【问题标题】:Calling SUBST from Windows batch file从 Windows 批处理文件调用 SUBST
【发布时间】:2019-05-15 12:07:22
【问题描述】:

我在从 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 之前,驱动器映射很好。直接调用之后,驱动映射确实已经去掉了。但是为什么我会收到错误消息?

【问题讨论】:

    标签: windows batch-file subst


    【解决方案1】:

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

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

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

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

    编辑

    为了避免错误消息:

    subst x: /d & goto :eof
    

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

    【讨论】:

    • 比我解释得好,你可以接受acpeted anser check。
    • @tukan 由 Juergen 来接受对他帮助最大的答案。想象一下,我们可以直接“选中”复选标记 - 哈哈 - 那会是多么的一团糟……
    • 嘿嘿,那真是一团糟:)。
    • @Stephan 这个解决方法是个好主意,非常适合我的需要!我会继续接受你的回答。
    • 编辑:我试过了,它只会生成第二条错误消息。但是,解释很清楚。
    猜你喜欢
    • 2015-06-21
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多