• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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\b.bat"
    // b.bat
    "%cd%\run.exe"

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

    问题分析

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

    我们来看看下面的例子:

    // directory structure
    // c:
    // -c.bat
    // -program
    //  -d.bat
    // c.bat
    call "%cd%\program\d.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%\run.exe ”表示的是“ C:\run.exe ”,并非“ C:\program\run.exe ”。那么如何更改呢?

    有两种方案:

    // plan A
    // change the current working directory
    // a.bat
    cd "%~dp0"
    call "%cd%\program\b.bat"
    // b.bat
    cd "%~dp0"
    "%cd%\run.exe"
    // plan B
    // using %~dp0 directly
    // a.bat
    call "%~dp0program\b.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:\program\f.bat"
    // f.bat
    cd "%~dp0"
    "%cd%\run.exe"

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

    cd /d "%~dp0"

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

    问题总结

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

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

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

    您可能感兴趣的文章:
    • DOS批处理中%cd%和%~dp0的异同分析
    上一篇:通过拖曳获取文件信息的bat代码分享
    下一篇:dos命令行choice命令使用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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