如何在不更改目录的情况下运行BAT脚本?
我在./a
,脚本cd进入./a/bc
。如果我出于任何原因需要终止我的脚本,我现在在bc
而不是a
。如何运行脚本而不更改文件夹?
另外,我不喜欢它是如何问我是否要终止我的脚本。我可以禁用它并让它终止吗?
答案 0 :(得分:2)
您可以使用start yourscript.bat
运行脚本。这使它在新的命令窗口中运行,因此不会影响启动脚本的命令提示符的工作目录。
另一种可能性是不使用 cd
并使用绝对路径。
答案 1 :(得分:2)
第一个问题是:为什么需要更改目录?你能简单地使用相对于你的一个批处理文件的路径吗? (例如,使用%~dp0\a\bc
引用目录)
但如果你真的需要这样做,你可以做到以下几点:
REM change the current directory pushd ..\a\bc .. do your stuff here REM restore the old "current directory" popd
答案 2 :(得分:2)
setlocal 命令对此非常有用。 setlocal 之后的任何目录更改都只是批处理脚本的本地目录。顺便说一句,这也适用于任何环境变量(设置命令)。
例如,运行此批处理脚本后:
cd /d c:\temp
setlocal
cd /d c:\windows
目录将是c:\ temp,因为脚本中的第二个cd只是脚本的本地。
答案 3 :(得分:1)
如果您不需要将环境变量更改传播到当前环境并且无法触及批处理文件(使用我通常使用的pushd
/ popd
变体使用),您仍然可以生成cmd
的新实例:
cmd /c myBatch.cmd arg1 arg2 ...
即使被调用的批处理引发错误,也具有保持原始批处理文件运行的良好属性。我在批量单元测试框架中这样做,例如,确保失败的批处理文件不会阻止测试执行。