从Windows批处理文件调用SUBST

时间:2019-05-15 12:07:23

标签: windows batch-file subst

我从Windows批处理文件调用SUBST时遇到问题。我想使用一批创建虚拟驱动器映射,并使用另一批卸载驱动器。但是,卸载会显示错误消息:

The system cannot find the path specified.

这是我的批处理文件:

prepare.bat

pushd .
subst X: .
X:

cleanup.bat

popd
subst X: /D

执行将提供以下输出:

d:\>prepare.bat

d:\>pushd .

d:\>subst X: .

d:\>X:

X:\>cleanup.bat

X:\>popd

d:\>subst X: /D
Das System kann den angegebenen Pfad nicht finden.

d:\>

有人可以向我解释这里出了什么问题以及如何解决吗?

编辑:

一些奇怪的事情要注意:

  • 直接在控制台上键入所有命令即可。仅在使用时 批处理文件,则发生错误。
  • 在调用subst X: /D之前,驱动器映射很好。调用后直接将驱动器映射确实删除了。但是为什么我会出错?

1 个答案:

答案 0 :(得分:4)

该行为的原因是批处理脚本的执行方式。它会读取一行,然后执行并读取下一行以执行,直到没有更多行为止。

卸载驱动器时,您破坏了脚本的(虚拟)路径,因此“读取下一行”失败-脚本“消失”。即使卸载是脚本的最后一行,解释器也要等到尝试读取下一行时才知道-并失败,因为该脚本不再可用。

因此,您的错误消息不是来自脚本内部的任何内容,而是来自解释器本身,试图读取脚本的下一行。

如果在命令提示符下输入命令,则不会出现“下一行”,因此不会发生错误。

修改

为避免错误消息:

subst x: /d & goto :eof

一次性读取并分析该行,并且当行显式退出批处理时,解释器不会尝试读取 next 行。

>