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

Posted

技术标签:

【中文标题】Windows 命令:如何使用 chdir 推送当前目录以便稍后弹出?【英文标题】:Windows Command: how do I push current directory using chdir for popping later? 【发布时间】:2016-03-17 14:33:24 【问题描述】:

背景/目标:

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

我这样做的目的:

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

尝试1:

推送 CHDIR

REM 主脚本体

POPD

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

尝试2:

SET curdir=CHDIR

PUSHD %curdir%

REM 主脚本体

POPD

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

其他尝试:谷歌搜索也没有产生任何令人满意的结果。

问题:

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

注意:我正在寻找仅使用 Windows 本机命令的解决方案,第三方工具或 powershell 不是一个选项。

【问题讨论】:

pushd 很可能会失败,因为它找不到您作为参数提供的目录。 【参考方案1】:

您可以使用. 表示当前目录。

试试这个:

PUSHD .

REM The rest of you script

POPD

【讨论】:

谢谢你。 docs.microsoft.com/en-us/windows-server/administration/… 的官方文档声明 Path 参数是可选的,并被描述为 Specifies the directory to make the current directory,这意味着它不会影响目录堆栈的操作方式,这意味着 pushd 将与 @987654327 相同@。但这是错误的。文档不清楚和/或错误。 PUSHD 将当前目录压栈和切换到指定目录相结合,一次操作。所以我认为这是更正确的答案。【参考方案2】:

您的问题是您需要使用CD 命令(而不是 CHDIR)并且不要忘记将其包装在 %'s 中。通常认为它们是相同的,但它们确实不同,稍微,这样。

在批处理文件中尝试以下示例:

@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 的回答同样有效。

【讨论】:

次要的挑剔...您使用的不是CD 命令,而是CD 环境变量,通过将其包装在% 字符(%CD%)中来引用。 【参考方案3】:

@aphoria 和 @wasatchwizard 的工作解决方案。希望我可以将两者都标记为答案。谢谢两位!

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

选项 1:

PUSHD .
REM main scripts body
POPD

选项 2:

PUSHD %cd%
REM main scripts body
POPD

【讨论】:

以上是关于Windows 命令:如何使用 chdir 推送当前目录以便稍后弹出?的主要内容,如果未能解决你的问题,请参考以下文章

DOS:第一天

linux中chdir函数如何进入根目录

WINDOWS故障恢复控制台的命令操作

如何在 Window 上用 C++ 实现 cd 命令

如何在工作灯中为 Windows Phone 8 配置未经身份验证的推送通知

Win7/Win8.1怎么快速获得Win10更新升级文件推送