【发布时间】:2018-09-24 07:43:13
【问题描述】:
我正在尝试创建一个必须在Windows 7 和Windows 10 上运行的批处理脚本。但是,每个处理带有空格的文件夹名称的方式似乎有所不同,我必须以不同的方式转义它们。
特别是在Windows 7 上,我成功使用了以下命令:
start cmd.exe /k "%OpenOCD_bin_Path%\openocd.exe -f %OpenOCD_bin_Path%\..\scripts\interface\ftdi\SuperDongle.cfg -f %OpenOCD_bin_Path%\..\scripts\target\nrf52.cfg"
OpenOCD_bin_Path 包含一个文件夹,其中包含空格;它引用的完整路径是:
C:\Users\Rafael\AppData\Roaming\GNU MCU Eclipse\OpenOCD\0.10.0-7-20180123-1217\bin
但是,在Windows 10 上,同一行失败并显示以下错误:
'C:\Users\Rafael\AppData\Roaming\GNU' 不是内部或外部命令、可运行程序或批处理文件。
如果我将命令更改为:
start cmd.exe /k ""%OpenOCD_bin_Path%"\openocd.exe -f "%OpenOCD_bin_Path%"\..\scripts\interface\ftdi\SuperDongle.cfg -f "%OpenOCD_bin_Path%"\..\scripts\target\nrf52.cfg"
成功了。
相反,如果我在 Windows 7 上运行该命令,我会收到以下错误:
'""C:\Users\Rafael\AppData\Roaming\GNU' 不是内部或外部命令、可运行程序或批处理文件。
注意这个版本前面额外的""。
TLDR;有没有一种方法可以在两个系统上都进行这项工作,而无需使用开关来检测正在运行的操作系统?
【问题讨论】:
-
如果你使用
Start的/D选项会发生什么?或者也许首先使用CD /D将当前工作目录设置为最深的公共父级,然后使用<pathto>\openocd.exe -f interface\ftdi\SuperDongle.cfg -f target\nrf52.cfg。顺便说一句,C:\Users\Rafael\AppData\Roaming可以替换为%AppData%。
标签: windows batch-file windows-7 escaping windows-10