使用 SET 为变量设置一个空值在 Windows XP .CMD 脚本中效果很好。但是,当直接从命令行使用时,相同的 SET 命令在相同的 CMD 解释器中表现不同:
尝试在 CMD.EXE 命令行中测试它:
C:\>set Q=
C:\>echo %Q%
%Q%
C:\>echo "%Q%"
"%Q%"
C:\>set Q=/Q
C:\>echo %Q%
/Q
C:\>echo "%Q%"
"/Q"
Run Code Online (Sandbox Code Playgroud)
尝试使用这样的 .CMD 脚本对其进行测试:
set Q=
echo %Q%
echo "%Q%"
set Q=/Q
echo %Q%
echo "%Q%"
Run Code Online (Sandbox Code Playgroud)
运行它:
C:\>c.cmd
C:\>set Q=
C:\>echo
ECHO is on.
C:\>echo ""
""
C:\>set Q=/Q
C:\>echo /Q
/Q
C:\>echo "/Q"
"/Q"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这是雷德蒙德的一个好笑话,还是对这种差异有任何合理的解释?
当 .CMD 脚本中的行在命令行中使用时行为不同时,我应该如何测试它们?
如何在 CMD 命令行中将变量正确设置为空字符串值,以及如何引用该变量以便获得该空字符串?
我正在尝试使用 Windows 7 的 CMD /C 从 Perl 运行命令。该命令从提示符运行时可以正常工作,但需要引用其参数:
C:\>"C:\Program Files (x86)\gs\uninstgs.exe" "C:\Program Files (x86)\gs\gs8.63\uninstal.txt"
Run Code Online (Sandbox Code Playgroud)
没有引号,它不起作用。
如果我尝试通过 CMD /C 运行它,我发现无法强制 CMD.EXE 将带引号的字符串作为参数传递给 exe 文件。这些不起作用:
C:\>C:\Windows\System32\cmd.exe /C "C:\Program Files (x86)\gs\uninstgs.exe" "C:\Program Files (x86)\gs\gs8.63\uninstal.txt"
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
C:\>C:\Windows\System32\cmd.exe /C "C:\Program Files (x86)\gs\uninstgs.exe C:\Program Files (x86)\gs\gs8.63\uninstal.txt"
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
C:\>C:\Windows\System32\cmd.exe /C "C:\Program Files (x86)\gs\uninstgs.exe" \"C:\Program Files (x86)\gs\gs8.63\uninstal.txt\"
'C:\Program' is …Run Code Online (Sandbox Code Playgroud)