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 推送当前目录以便稍后弹出?的主要内容,如果未能解决你的问题,请参考以下文章