Windows命令:如何使用chdir命令推送当前目录以便稍后弹出?

13

背景/目标:

在Windows 7中,我正在使用普通的Windows命令开发批处理脚本。在这个批处理中,我需要首先保存当前目录,以便在脚本运行完成后恢复它。

我的尝试:

我尝试使用chdir、pushd和popd命令来使其工作。

  • 尝试1:

    PUSHD CHDIR

    REM 主要脚本体

    POPD

    结果:PUSHD行出现错误“系统找不到指定的路径”

  • 尝试2:

    SET curdir=CHDIR

    PUSHD %curdir%

    REM 主要脚本体

    POPD

    结果:在PUSHD行上出现相同的错误“系统找不到指定的路径”

  • 其他尝试:通过谷歌搜索也没有找到令人满意的结果。

问题:

我可以使用这些命令使其工作吗? 还是需要使用另一组命令?

注意:我只希望使用Windows本地命令解决问题,第三方工具或PowerShell不是可选项。


pushd 失败的原因很可能是它找不到您作为参数提供的目录。 - CristiFati
3个回答

16
你可以使用 . 表示当前目录。
尝试一下:
PUSHD .

REM The rest of you script

POPD

2
谢谢您。官方文档位于https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/pushd,指出“Path”参数是可选的,并被描述为“指定要使当前目录的目录”,这意味着它不会影响目录堆栈的操作方式,也就是说,“pushd”与“pushd .”相同。但这是错误的。文档不够清晰或者是错误的。 - cowlinator
1
PUSHD将当前目录推入堆栈并更改为指定目录,所有操作都在一个操作中完成。因此,我认为这是更正确的答案。 - Stephen G Tuggy

4
您的问题是需要使用CD命令(而不是CHDIR),并且不要忘记将其包装在%之间。人们通常认为它们是相同的,但在这方面略有不同。
请尝试在批处理文件中使用以下示例:
@echo off

echo Initial directory set to:
cd "%UserProfile%\Desktop"
echo   `%cd%`
echo.

pushd %CD%

echo Changing to %AppData%
REM main script body
cd /D %AppData%
echo   `%cd%`
echo.

echo Changing to %LocalAppData%
cd /D %LocalAppData%
echo   `%cd%`
echo.

echo.
echo About to POPD
pause
POPD
echo   `%cd%`
echo.

我应该指出,@aphoria的回答同样有效。


1
小问题...您没有使用CD命令,而是使用了CD环境变量,该变量通过将其包装在%字符中(%CD%)进行引用。 - aphoria

4

由@aphoria和@wasatchwizard提供的解决方案都很有用。希望我能将两者都标记为答案。非常感谢你们!

我将它们合并成一个,以供那些遇到相同问题的人使用。

选项1:

PUSHD .
REM main scripts body
POPD

选项二:

PUSHD %cd%
REM main scripts body
POPD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接