如何批量将变量设置为带空格的值

how to set a variable to a value with spaces in batch

我有一个 Windows 8 批处理文件,我试图在其中找到一个命令行应用程序。例如,如果路径中没有空格,这就可以正常工作:

for /f %%i in ('where frob.exe 2^>NUL') do set frob=%%i
if [%frob%] == [] (
    @echo frob.exe must be in the path
    goto exit
)

但是,我想要一个更通用的解决方案,即使路径是 c:\this is a test\frob.exe 也能正常工作。所以,我尝试了这个:

for /f "tokens=*" %%i in ('where frob.exe 2^>NUL') do set frob=%%i

但是,现在我收到错误 is was unexpected at this time.

我需要做什么才能让批处理文件正确解释复杂路径?

for /f "delims="...

默认情况下,标准分隔符(如 Space 被选择为 "token separators" 并且默认情况下只有第一个标记被分配给 metavraiable(%%i 在你的情况下)

for /?

来自文档提示。

:: quote the assignment to avoid problems with poison characters
for /f "delims=" %%i in ('where frob.exe 2^>NUL') do set "frob=%%i"

:: quote the value as it can contain spaces
if "%frob%"=="" (
    @echo frob.exe must be in the path
    goto exit
)

我认为您的问题出在 if 而不是 for