首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Windows批处理文件调用SUBST

从Windows批处理文件调用SUBST
EN

Stack Overflow用户
提问于 2019-05-15 12:07:22
回答 1查看 2.2K关注 0票数 2

我在从Windows批处理文件调用SUBST时遇到了问题。我希望使用一个批处理创建一个虚拟驱动器映射,使用第二个批处理卸载该驱动器。但是,卸载会产生错误消息:

代码语言:javascript
复制
The system cannot find the path specified.

这是我的批处理文件:

prepare.bat

代码语言:javascript
复制
pushd .
subst X: .
X:

cleanup.bat

代码语言:javascript
复制
popd
subst X: /D

执行提供下列产出:

代码语言:javascript
复制
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之前,驱动器映射是很好的。在调用它之后,驱动器映射确实被删除了。但是为什么我会出错呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 12:50:51

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

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

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

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

编辑

为了避免错误消息:

代码语言:javascript
复制
subst x: /d & goto :eof

行是一次读取和解析的,当这一行明确地退出批处理时,解释器不会尝试读取下一行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56149003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档