【发布时间】:2019-07-29 07:23:47
【问题描述】:
这是在 cmd 中工作的:
"C:\Program Files (x86)\CodeMeter\Runtime\bin\cmu32.exe" --list-content | FIND "Serial Number 12345-"
输出(从多行正确提取):
序列号为 12345-67890 和版本 1.19(锁定)的 CmContainer
但我想让它在 .bat 文件中工作并将结果存储到变量中(来自here):
for /f "usebackq" %%i in (`"C:\Program^ Files^ ^(x86)\CodeMeter\Runtime\bin\cmu32.exe" --list-content ^| FIND "Serial Number 12345-"`) do SET foobar=%%i
它抛出:
文件名、目录名或卷标语法不正确。
PS:在最终版本中,我想使用系统变量作为路径,例如"%PROGRAMFILES(X86)%\CodeMeter\Runtime\bin\cmu32.exe",但是虽然这在 cmd 中没有什么区别,但它会抛出 "'C:\Program' is不被识别为内部或外部命令、可运行程序或批处理文件。” 从 .bat 中调用时...所以我猜有转义问题?
【问题讨论】:
-
通常不需要转义除了
|之外的任何东西,因为路径在保护特殊字符的""之间;然而,在这种情况下,第一个"和最后一个被视为一对,并在进一步处理之前被删除;为防止出现另一对但逃脱的对,所以... in ('^""%ProgramFiles(x86)%\..." ^| find "..."^"') ...... -
@aschipfl:
'C:\Program' is not recognized as an internal or external command, operable program or batch file.。通过仅在第一个空格前添加 ^ 进行双重检查:'C:\Program Files' is not recognized as an internal or external command, operable program or batch file. -
同时编辑了我的第一条评论...
-
更好,因为错误消息消失了。但是:结果仍然与命令行不一样,只是将
-存储在foobar中......不过可能是一个不同的问题?
标签: batch-file cmd