Windows For/F:文件名和参数中的空格

Windows For/F:文件名和参数中的空格,windows,batch-file,command-line,command-line-arguments,Windows,Batch File,Command Line,Command Line Arguments,在批处理文件中,我想将一个变量设置为程序的一行输出—这是一项在多个问题和internet资源中解释的任务 在我的特定任务中,我想执行命令 "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

在批处理文件中,我想将一个变量设置为程序的一行输出—这是一项在多个问题和internet资源中解释的任务

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

"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
调用上述命令时,它将正确执行程序,并打印出预期的输出

现在,为了捕获执行程序的输出,我使用followbatch命令

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
)
警察说

我认为我正确地做到了这一点,在命令周围使用了反引号,在文件名周围使用了引号

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

我认为这说明了逃离空间的问题

奇怪的是:如果我替换要调用的exe的路径,或者将参数替换为无空格的路径,那么它就可以工作。所以两者都是

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
)

工作


为什么两个引号转义字符串不能在同一个命令中工作?我如何修复它?

我不会使用
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

我不会使用
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

我不确定我是否明白使用反引号的目的!看看能不能解决你的问题。这没什么区别@MCND是你的。我确信一定有一个资源可以回答这个问题,但在筛选示例时我没有找到它。谢谢这个例子似乎比这个问题要复杂一些(因为插入符号字符和重定向器操作符)。翻译成我们在这里看到的:
for/f“tokens=*”%%f in(“'D:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(
…@CristiFati是的,在整个问题上加上双引号,同时在每个路径上加引号也是我使用的解决方案。这是链接问题公认答案中的第一个例子。我不确定我是否看到使用反引号的目的!看看是否解决了您的问题。复合:这没有什么区别。@MCND Your的答案是肯定的。我确信一定有一个资源可以回答这个问题,但我在筛选示例时没有找到。谢谢。我将它标记为重复。这个示例似乎比这个问题更复杂(因为插入符号字符和重定向器操作符)。翻译成我们这里的:
for/f“tokens=*”%%f在(“'D:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(
…@CristiFati是的,在整个问题上加上双引号,同时在每条路径上加引号也是我使用的解决方案。这是链接问题公认答案中的第一个例子。
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
)
@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