我很难获得在For循环中运行的命令。从cmd提示符可以正常工作:
"C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" -r info | find "E:"
但是,以下似乎有语法问题
for /f "tokens=1-7 delims=," %%A in ('"C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" ^-r info ^| find "E:"') do (set _DRVID=%%A)
产生错误 - C:\Program' is not recognized as an internal or external command, operable program or batch file.
仅供参考,我找到了一种方法,可以通过以下方式获得我想要的结果: 我可以使用以下代码在Batch中工作,并生成所需的输出:
for /f "tokens=1-7 delims=," %%A in ('"C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" ^-r info') do (IF %%G=="E:" set _DRVID=%%A)
我做错了什么?
答案 0 :(得分:2)
当管道时,管道的两侧都在cmd
的自己的实例中执行。这使得引用和转义看起来不直观。尝试:
for /f "tokens=1-7 delims=," %%A in ('""C:\Program Files (x86^)\MakeMKV\makemkvcon64.exe" -r info | find "E:""') do (set _DRVID=%%A)
答案 1 :(得分:1)
我认为最好的解决方法是在表达式周围加上一对带引号的引号:
for /f "tokens=1-7 delims=," %%A in ('^""C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" ^-r info ^| find "E:"^"') do (set "_DRVID=%%~A")
在for /F
使用封闭的''
之后,执行表达式的cmd
实例将删除最外层""
,因此剩余的命令行显示为奇数,因此无法执行:
C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" ^-r info ^| find "E:
另外一对""
修复了这个,但是你需要更改转义。添加一对转义引号^"^"
可让代码无需更改转义即可运行。因此,这是最通用的解决方案。
答案 2 :(得分:0)
for /f "delims=" %%X in ('"C:\Program Files (x86)\MakeMKV\makemkvcon64.exe" ^-r') do (
for /f "tokens=1-7 delims=," %%A in ('ECHO(%%X^| find "E:"') do (set _DRVID=%%A)
)
但是我无法按照find
的预期过滤引用的可执行文件名的输出。