如果bat文件突然终止,则恢复默认工作目录

hum*_*man 10 shell cmd batch-file command-prompt windows-console

我有一个场景,在执行批处理文件期间,它导航到另一个文件夹(比如说"../asdf"); 并且在执行结束时,它将当前工作目录设置为用户调用.bat文件的同一文件夹.

但是如果用户在完成之前终止批处理,则cmd显示当前工作目录(例如"../asdf").

但就我而言,我需要将工作目录恢复为默认/预定义目录.可能吗?

  • 批处理文件是我写的,所以我可以修改它.
  • CMD通过CMD的桌面快捷方式打开,我可以控制; 因此可以在那里完成像工作目录或将args传递给CMD等属性.

roj*_*ojo 27

在批处理脚本中,用于setlocal封装批处理会话的运行环境.如果用户终止脚本,你之前cdpopd返回,脚本仍然会在目录中退出,它开始.这是一个简短的测试:

@echo off
setlocal
pushd c:\Users
cd
exit /b
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Users\me\Desktop>test.bat
c:\Users

C:\Users\me\Desktop>
Run Code Online (Sandbox Code Playgroud)

请注意我没有popd或者cd %userprofile%\Desktop,但是在脚本退出后我仍然回到我的桌面.

此外,还setlocal可以防止孤立变量在您的环境中使用,这些变量在批处理脚本之外没有任何意义.这只是一种很好的做法.在控制台,输入help setlocal更多信息.

  • @AndriyM - 啊,对不起。我在我的工作计算机上安装了 gnuwin32,在我的一台家用计算机上安装了 cygwin,我经常在 Linux 和 Windows 之间来回切换,以至于我有时会忘记哪些命令是哪个操作系统的本地命令。:> 我会修复它。`pwd` 是用于打印工作目录的 Linux-ese,它与不带参数的 `cd` 或 Windows 中的 `echo %cd%` 做同样的事情。 (2认同)