小编ooL*_*oLi的帖子

批处理退出时隐式“popd”

pushd有没有办法在脚本末尾撤消所有内容。我所拥有的是:

pushd somwhere
rem doing stuff
goto end

:end
popd
goto :EOF
Run Code Online (Sandbox Code Playgroud)

我想要的是:

setlocal
pushd somwhere
rem doing stuff
goto :EOF
Run Code Online (Sandbox Code Playgroud)

但这不起作用,目录保持“pushd”状态。我无法说出pushd会发生多少次的另一种尝试是:

set CurrentDir=%CD%
rem doing a lot of pushd and popd
pushd somwhere

:POPBACK
if /i not "%CD%" == "%CurrentDir%" popd & goto POPBACK
Run Code Online (Sandbox Code Playgroud)

但这看起来我很容易陷入困境:POPBACK。添加一个计数器来退出该循环有点不确定我最终会在哪个目录。

在这种情况下,我想知道 a 是否可以看到 Pushd 目录的堆栈。我发现的唯一的事情是$+prompt $P$+$G每个 Pushd 目录添加一个“+”,例如D:\CMD++>。但我看不出如何利用它。

编辑:我刚刚注意到有一些问题让$+prompt困惑。上面示例setlocal中的实际上使脚本返回到初始目录,但提示符显示一个“+”,表示缺少popd.

D:\CMD>test.cmd
D:\CMD>prompt $P$+$g
D:\CMD>setlocal
D:\CMD>pushd e:\DATA …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file pushd

3
推荐指数
1
解决办法
1191
查看次数

标签 统计

batch-file ×1

cmd ×1

pushd ×1

windows ×1