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