最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

DOS批处理中%cd%与%~dp0的区别详解

来源:懂视网 责编:小采 时间:2020-11-27 14:26:43
文档

DOS批处理中%cd%与%~dp0的区别详解

DOS批处理中%cd%与%~dp0的区别详解:Windows下批处理中%cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同。下面这篇文章就来给大家详细介绍了DOS批处理中%cd%与%~dp0的区别,需要的朋友可以参考借鉴。问题描述假设我们要在批处理a.bat里调用执行批处理b.bat,b
推荐度:
导读DOS批处理中%cd%与%~dp0的区别详解:Windows下批处理中%cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同。下面这篇文章就来给大家详细介绍了DOS批处理中%cd%与%~dp0的区别,需要的朋友可以参考借鉴。问题描述假设我们要在批处理a.bat里调用执行批处理b.bat,b

Windows下批处理中%cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同。下面这篇文章就来给大家详细介绍了DOS批处理中%cd%与%~dp0的区别,需要的朋友可以参考借鉴。

问题描述

假设我们要在批处理a.bat里调用执行批处理b.batb.bat需要知道b.bat的当前位置,并执行run.exe,如下:

// directory structure
// c:
// -a.bat
// -program
// -b.bat
// -run.exe
// a.bat
call "%cd%program.bat"
// b.bat
"%cd%
un.exe"

那么现在能不能成功执行run.exe呢?

问题分析

%cd%%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同:

  • %cd%代表的是当前工作目录(current working directory,variable);

  • %~dp0代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)。

  • 我们来看看下面的例子:

    // directory structure
    // c:
    // -c.bat
    // -program
    // -d.bat
    // c.bat
    call "%cd%programd.bat"
    // d.bat
    @echo off
    echo cd = %cd%
    echo dp0 = %~dp0

    直接运行d.bat,结果为

    cd = C:program
    dp0 = C:program

    直接运行c.bat,结果为

    cd = C:
    dp0 = C:program

    从上面的结果可以看出:

    1. 执行d.bat时,当前工作目录为d.bat所在目录;

    2. 执行c.bat时,当前工作目录为c.bat所在目录,即使在调用d.bat后,该工作目录依旧是c.bat所在目录。

    问题解决

    让我们再来看看问题描述中提及的问题——能不能成功执行run.exe呢?

    答案是:不能。“ %cd% un.exe ”表示的是“ C: un.exe ”,并非“ C:program un.exe ”。那么如何更改呢?

    有两种方案:

    // plan A
    // change the current working directory
    // a.bat
    cd "%~dp0"
    call "%cd%program.bat"
    // b.bat
    cd "%~dp0"
    "%cd%
    un.exe"
    // plan B
    // using %~dp0 directly
    // a.bat
    call "%~dp0program.bat"
    // b.bat
    "%~dp0run.exe"

    问题延伸

    上面的解决方案中plan A通过更改当前目录来解决该问题,可以这里面也存在另外一个问题,让我们看下面的例子:

    // directory structure
    // c:
    // -program
    // -f.bat
    // d:
    // -e.bat
    // plan A
    // change the current working directory
    // e.bat
    cd "%~dp0"
    call "c:programf.bat"
    // f.bat
    cd "%~dp0"
    "%cd%
    un.exe"

    现在e.batf.bat不在同一个盘符了,从e.bat切换当前工作目录到f.bat直接使用cd是不行的,必须要使用:

    cd /d "%~dp0"

    这个地方容易疏忽,切记不要犯错。

    问题总结

    我们来重申下%~dp0%cd%的区别, %cd%%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同:

  • %cd%代表的是当前工作目录(current working directory,variable);

  • %~dp0代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)。

  • 从目前我们的使用情况来看,尽量使用%~dp0,不建议使用%cd%,有其他需求除外。

    更多DOS批处理中%cd%与%~dp0的区别详解相关文章请关注PHP中文网!

    文档

    DOS批处理中%cd%与%~dp0的区别详解

    DOS批处理中%cd%与%~dp0的区别详解:Windows下批处理中%cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同。下面这篇文章就来给大家详细介绍了DOS批处理中%cd%与%~dp0的区别,需要的朋友可以参考借鉴。问题描述假设我们要在批处理a.bat里调用执行批处理b.bat,b
    推荐度:
    标签: bat 批处理 dos
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top