无法在参数中的路径和空间中运行批处理文件

tfo*_*ana 17 arguments cmd batch-file

我正在尝试运行位于以下位置的批处理文件:

C:\Test Batch\BatchTest.bat
Run Code Online (Sandbox Code Playgroud)

我们会说,这将从另一个指定的位置复制一个文件

C:\Users\UserName\Desktop\Company Downloads\downloadedDoc.doc
Run Code Online (Sandbox Code Playgroud)

我可以运行批处理文件:

cmd  /c start "" "C:\Test Batch\TestBatch.bat"
Run Code Online (Sandbox Code Playgroud)

批次实际上运行.

但是当我尝试添加一个参数来复制时这样:

cmd  /c start "" "C:\Test Batch\TestBatch.bat" "C:\Users\User Name\Desktop\Company Downloads\downloadedDoc.doc"
Run Code Online (Sandbox Code Playgroud)

我明白了:

'C:\Test' is not recognized a an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

最终,要复制的批处理文件和文件将由用户指定,并且名称或路径中可能包含空格.因此,使用没有空格的路径的简单答案是不够的.

Egg*_*Egg 14

尝试使用/ d参数更改启动目录,如下所示:

cmd /c start "" /d"C:\Test Batch\" "TestBatch.bat" "C:\Users\User Name\Desktop\Company Downloads\downloadedDoc.doc"
Run Code Online (Sandbox Code Playgroud)

start命令有一些奇怪的解析引号.


jeb*_*jeb 8

这是一个众所周知的特征cmd.exe是由启动start.exe.仅当命令在其名称或路径中有空格且至少引用其中一个参数时,才会发生这种情况.

解决方法是用a替换命令call.

start "" CALL "C:\Test Batch\TestBatch.bat" "C:\Users\User Name\down.doc"
Run Code Online (Sandbox Code Playgroud)

  • 这确实应该是正确的答案......接受的答案太长并且需要事先知道工作目录,这对我来说是不可能的。 (2认同)