Windows启动命令无法执行批处理文件。

3

我正在从命令提示符执行start命令。 该命令调用名为D:\My script.cmd的批处理文件,并传递参数“Argument one”。以下是我尝试执行的命令。

   C:\Users\ABCUser>start "D:\My script.cmd" "Argument one"

但是出现了错误信息:系统找不到文件参数一。我不明白为什么命令正在搜索文件。文件的内容是 My script.cmd。

@echo off
cls
echo "Hello"
echo %1

我是否漏掉了什么或者命令语法不正确?即使是没有空格的文件名,该命令也无法正常工作。

这与 .netc 没有任何关系。实际上,你指定的文件很可能要么不存在,要么无法让你在执行 start 的命令提示符中访问(例如权限不足)。 - Eric J.
我目前没有Windows机器的访问权限,但我怀疑它将文件视为新进程的标题,而参数视为文件。尝试在文件名之前添加一个空字符串"" - Jeff Mercado
根据您所包含的内容,您不需要在这里使用start。您可以完全不使用start,只需使用"D:\My script.cmd" "参数一"即可。 - Ken White
@KenWhite,但是有一个区别,start打开一个新任务,该任务并行运行。 - jeb
2个回答

5
这是一个关于启动/cmd.exe处理带引号的命令和参数的众所周知的bug。
原因是start使用cmd.exe /k来启动新任务。
cmd /k和cmd /c的帮助文档解释了,在这种情况下,第一个和最后一个引号会被删除。

此外,你错误地使用了start命令。

这应该可以正常工作,因为调用方式像一个虚拟的方法来抑制引号问题。

start "Title" call "D:\My script.cmd" "Argument one"

@kenwhite 你应该试一下,Ken。jeb 在这里很在行。 - foxidrive
感谢这里的所有专家。 "Title" 代表什么?实际上我不需要任何标题。那么我需要在 "Title" 的位置上保留一个空字符串吗? - sagar
是的,一个空的双引号没问题。 - foxidrive
@foxidrive: 感谢。命令可以使用空字符串,但它会提供一个额外的信息:“没有足够的存储空间来处理此命令。”批处理文件只打印一个字符串,我认为不需要大量的内存。 - sagar
我们看不到你的批处理文件或命令 - 但是当我测试时,上面的语法使用"title"""都有效。 - foxidrive
显示剩余2条评论

1
你可以使用 cmd.exe /c "D:\My script.cmd" arg1 arg2 如果有问题,你可以将 /c 替换为 /k,这样命令提示符会保持打开状态,以便你检查错误。
祝好,
Refael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接