我尝试了不同的变体(如 setlocal EnableDelayedExpansion) - 但没有任何效果:
echo off
IF "%1"=="Debug^|Win32" set servicesConfig=Win2008.Debug
echo Incorrect parametr %servicesConfig%
pause > nul
我尝试了不同的变体(如 setlocal EnableDelayedExpansion) - 但没有任何效果:
echo off
IF "%1"=="Debug^|Win32" set servicesConfig=Win2008.Debug
echo Incorrect parametr %servicesConfig%
pause > nul
当引号转义特殊字符时,您将比较%1
with的内容Debug^|Win32
(包括插入符号)。
在你的情况下,你应该使用这个
@echo off
IF "%~1"=="Debug|Win32" (
echo It's ok
set servicesConfig=Win2008.Debug
) ELSE (
echo Unknown in "%~1"
)
你可以调用它
test.bat "Debug|Win32"
or
test.bat Debug^|Win32
会将第"%~1"
一个参数括在引号中,因此特殊字符是无害的,但如果第一个参数已被引用,%~
则将在添加新引号之前将它们剥离,因此您总是只得到一个包围。
如果您拨打以下电话:script.bat "Debug|Win32"
这有效:
@echo off&setlocal IF "%~1"=="Debug|Win32" 设置 "servicesConfig=Win2008.Debug" echo 参数不正确 %servicesConfig%
输出是:
Incorrect parametr Win2008.Debug