我有一个根目录,从中运行主批处理文件,它调用根目录子目录中的另一个批处理文件(第二个批处理文件)。
执行第二批处理文件后,想要保留在根目录中:
@echo off
set root_dir=C:\Users\milan\Desktop
cd "%root_dir%\2nd_dir"
call 2nd_batch.bat
echo %cd%
最后的 echo 命令应该向我显示根目录的补丁。我尝试这样做
cd "\%root_dir%\2nd_dir\"
但它没有起作用。
答案1
您面临的问题在于调用指令的工作方式。
当您在批处理文件中使用调用指令时,它会将该批处理文件包含到当前脚本中并运行其代码。这意味着新脚本对您的环境所做的所有更改都会延续到上一个批处理文件中,正如您所注意到的。
您可以使用 start 命令而不是 call 命令在新的进程中启动新的批处理文件,这样就不会将其更改转移到前一个批处理文件中。
或者,您可以在执行新脚本之前存储当前文件夹,并在脚本完成后返回该文件夹。
下面是 2 个示例。:: 行是注释。您可以将其复制到脚本中,也可以根据需要将其省略。
:: example that uses start
cd "%root_dir%\2nd_dir"
start 2nd_batch.bat
echo %cd%
:: example that stores and sets the path
:: store current folder for retrieval
set masterfolder=%cd%
cd "%root_dir%\2nd_dir"
call 2nd_batch.bat
:: restore folder
cd /d %masterfolder%
echo %cd%
答案2
答案3
打开cmd.exe并执行以下查询。
PUSHD/?
POPD/?
问题解决了。
通过对使用帮助查询时列出的命令进行查询可以找到很多答案/?
。
PUSHD 允许您以类似于 CD 的方式更改目录,因此:
PUSHD "DirectoryPath"
但是,PUSHD 存储了前一个目录以供 POPD 调用。
因此,在您描述的情况下,您将 PUSHD 到其他批处理文件使用或需要的目录,然后当您需要返回上一个目录时,只需使用
POPD
瞧,你就到了。
要使用 PUSHD/POPD 解决此问题:
在您的主批处理文件中:
PUSHD "PathFor2ndBatch"
call 2nd_batch.bat
POPD
echo %cd%
如果目的是让第二个批处理文件在主批处理文件的目录中执行:
PUSHD "PathFor2ndBatch"
CALL 2nd_Batch.bat
在第二批开始时:
POPD
答案4
您还可以使用 /D 开关启动批处理文件:
start /?
START [/D path]
path Starting directory
因此,运行下面的代码将使批处理文件在C:\users
目录内运行。
start /D C:\users C:\Windows\System32\RCWM\rmdir.bat
但是,就像 Akina 在评论中提到的那样,start /w
对于这个目的来说,它更短。