IF中的转义字符

时间:2013-05-28 21:38:15

标签: windows batch-file

我尝试了不同的变体(如setlocal EnableDelayedExpansion) - 但没有任何作用:

echo off
IF "%1"=="Debug^|Win32"  set servicesConfig=Win2008.Debug
echo Incorrect parametr %servicesConfig%
pause > nul

2 个答案:

答案 0 :(得分:1)

当引号转义特殊字符时,您将%1的内容与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"会将第一个参数括在引号中,因此特殊的字符是无害的,但如果第一个参数已经被引用,%~会在添加新引号之前删除它们,所以你总是得到只有一个封闭。

答案 1 :(得分:1)

如果您拨打以下电话:script.bat "Debug|Win32"这有效:

@echo off&setlocal
IF "%~1"=="Debug|Win32" set "servicesConfig=Win2008.Debug"
echo Incorrect parametr %servicesConfig%

输出是:

Incorrect parametr Win2008.Debug