如何批量将变量设置为带空格的值
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
我有一个 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