Gre*_*reg 25 windows batch-file working-directory
在 shell 脚本中,如果我需要从目录运行命令,我可以使用子 shell 来确保我返回到原始上下文:
(cd temporary/new/directory ; command)
# now I am still in original directory
Run Code Online (Sandbox Code Playgroud)
这可以在 Windows 批处理文件(或 cmd 文件)中完成吗
在批处理文件中做同样的事情会让我留在新目录中。
我可以:
pushd temporary\new\directory && command && popd
Run Code Online (Sandbox Code Playgroud)
但是 popd 依赖于command
.
有任何想法吗?
Bil*_*3rd 22
如果你这样做:
pushd \windows && foobar && popd
Run Code Online (Sandbox Code Playgroud)
您将被留在 \windows 文件夹中(如您所述)。尝试:
pushd \windows & foobar & popd
Run Code Online (Sandbox Code Playgroud)
你应该会发现自己回到了起点。
use*_*686 20
默认情况下,Windows 批处理文件在父 shell 的上下文中运行(这对于source
需要显式的 Unix 用户来说是不寻常的,但在 MS-DOS 中是唯一的可能性)。这意味着目录更改和环境变量也会影响原始交互式 shell。
放在setlocal
脚本的顶部以使其在自己的上下文中运行 - 然后您可以安全地cd
在脚本内部使用。
小智 6
正如前面提到的,如果没有这样的目录,后者可能会失败,所以pushd \windows && (foobar & popd)
效果会更好pushd \windows & foobar & popd
。
此外,使用setlocal
和endlocal
允许您拥有多个本地环境,例如您可以拥有:
setlocal
cd dir
command
endlocal
现在您将回到原始目录。
归档时间: |
|
查看次数: |
27182 次 |
最近记录: |