Windows批处理:如何转义adb路径中Program Files的空格?
解决批处理中带空格路径的转义问题
我来帮你搞定这个批处理里路径空格的转义难题!你之前遇到的问题是因为在FOR /F的in()括号里直接给带空格的路径加引号时,批处理会把这个带引号的字符串当成要读取的文件名,而不是要执行的命令,所以才会捕获到路径文本而非logcat的输出。下面给你两种靠谱的解决方法:
方法一:用cmd /c包裹命令并使用双层引号
你可以通过cmd /c来明确告诉批处理要执行后面的命令,同时给带空格的adb路径加上引号,外层再用一对引号把整个命令包起来(注意是双层引号):
FOR /f "delims=" %%a in ('cmd /c ""c:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" logcat -d -v raw ^| find "BBTests" ^| more"') do ( @echo %%a )
原理是cmd /c会执行其后引号内的完整命令,而内层的引号专门用来处理adb路径里的空格,这样FOR /F就能正确捕获命令的输出了。
方法二:使用Windows短路径(8.3格式)
Windows对带空格的长路径支持短路径格式,你可以把Program Files (x86)替换成它的短路径PROGRA~2(如果是32位系统的Program Files则是PROGRA~1),这样路径里就没有空格了,无需额外转义:
FOR /f "delims=" %%a in ('c:\PROGRA~2\Android\android-sdk\platform-tools\adb.exe logcat -d -v raw ^| find "BBTests" ^| more') do ( @echo %%a )
这种方法更简洁,适合不想嵌套引号的场景。
你之前用环境变量的方法确实是可行的,相当于把带空格的路径提前封装好了,批处理会自动识别环境变量里的路径。上面这两种方法则是直接在命令里处理空格转义的正确方式。
内容的提问来源于stack exchange,提问作者Alexandru Circus
相关产品推荐
相关产品推荐

