对于/ F:文件名和参数中的空格

时间:2017-06-06 11:40:09

标签: windows batch-file command-line command-line-arguments

在批处理文件中,我想将变量设置为程序的单行输出 - 在多个问题和互联网资源中解释的任务。

在我的特定任务中,我想执行命令

"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe"

如您所见,我想要执行的程序的路径FileVersion.exe包含空格,而传递给FileVersion.exe的第二个参数包含带空格的完整路径。

当我直接在命令行或在批处理文件中使用CALL调用上述命令时,它会正确执行程序打印出预期的输出。

现在,为了捕获执行程序的输出,我使用了以下批处理命令

FOR /F "usebackq tokens=* delims=" %%i IN (`"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe"`) DO (
    echo %%i
)

FOR documentation

usebackq     Use the alternate quoting style:                        
           - Use double quotes for long file names in "filenameset".
           - Use single quotes for 'Text string to process'
           - Use back quotes for `command to process`

我认为我通过在命令周围使用后引号并在文件名周围使用引号来正确地做到这一点。

但是,呼叫失败并显示消息(从德语翻译)

The command "D:\My" is either incorrect or couldn't be found.

我认为这指出了逃避空间的问题。

奇怪的部分:如果我要么替换要调用的exe的路径,要么使用路径 sans 空格的参数替换它,它就可以工作。所以两者

FOR /F "usebackq tokens=* delims=" %%i IN (`FileVersion.exe /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe"`) DO (
    echo %%i
)

FOR /F "usebackq tokens=* delims=" %%i IN (`"D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release\FileVersion.exe" /n Test.exe`) DO (
    echo %%i
)

的工作。

为什么两个引用转义字符串不能在同一个命令中工作,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我不会使用usebackq并首先解决复杂路径:

@Echo off
Pushd "D:\__My Program\___My Program\Folder1\Folder2\..\..\FileVersion\FileVersion\bin\Release"
FOR /F "tokens=*" %%i IN (
  ' FileVersion.exe /n "D:\__My Program\___My Program\Folder1\Folder2\bin\Deploy\My Program.exe" '
) DO echo %%i
PopD