在我的系统上应用此SO answer后,我注意到单击.bat
文件现在会导致:
"/c" is not recognized as an internal or external command
为了修复它,我尝试使用%CMDCMDLINE%
替换IF
表达式中Environment variable substitution
中的引号。然后我注意到了一些奇怪的事情。这是我的测试批处理文件:
@echo off
echo _%CMDCMDLINE%_
echo _%CMDCMDLINE:"=_%_
echo _%CMDCMDLINE%_
pause
这是它的输出:
_C:\Windows\system32\cmd.exe /c ""C:\cygwin\opt\openconnect64\rek.bat" "_
_C:\Windows\system32\cmd.exe /c __C:\cygwin\opt\openconnect64\rek.bat_ __
_C:\Windows\system32\cmd.exe /c __C:\cygwin\opt\openconnect64\rek.bat_ __
如您所见,尽管没有分配,但变量已更改。具有相同值的其他环境变量不会发生这种情况。
答案 0 :(得分:1)
您找到了well known cmdcmdline
effect。
它是唯一显示此非常有用的行为的变量。
这很有用,因为很有可能检查解析器的工作方式。
像问题一样,解析器是否在REM
或标签后扩展变量?
顺便说一句。延迟扩展的工作方式也相同。
@echo off
echo %CMDCMDLINE%
REM %CMDCMDLINE:C:=1#%
: %CMDCMDLINE:"=X%
echo %CMDCMDLINE%
应避免使cmdcmdline变量的长度大于初始长度,因为这可能会使cmd.exe崩溃