我正在尝试创建一个.bat文件,该文件使用Parameter定义应执行的副本。
我尝试了if无副本(代替回显),它可以正常工作,并且尝试了copy命令,也可以正常工作,但是每当我尝试在.bat文件中合并两者时,我得到: 该命令的语法不正确。
@echo off
if "%1%"=="P1" (copy /y c:\Meldung\Mel_properties_p1.bak c:\Meldung\gsa.properties)
if "%1%"=="P2" (copy /y c:\Meldung\Mel_properties_p2.bak c:\Meldung\Mel.properties)
@echo on
即使在看了技术文档之后,我也没有发现任何对我来说不对的地方。因此,我的问题是:这是怎么了?又为什么呢?
答案 0 :(得分:1)
您的参数是%1
,而不是%1%
,它是环境变量的语法(该变量不存在,因为它转换为%1
和单个%
),因此解析器会尝试根据其规则进行翻译:
if <Parameter1><variable>
,它尝试评估直到冒号为止的名为"=="P1" (copy /y c
的变量(无论如何都是无效的变量名),它具有特殊含义(请参见子字符串替换set /?
)。这注定会失败。
使用echo on
,您将获得该行,因为解析器试图执行该行:
if "P1\Meldung\Mel_properties_p1.bak c:\Meldung\gsa.properties)
显然if
语法不正确。
解决方案:只需对参数使用正确的语法即可,并且有效:
if "%1"=="P1" (copy /y c:\Meldung\Mel_properties_p1.bak c:\Meldung\gsa.properties)
if "%1"=="P2" (copy /y c:\Meldung\Mel_properties_p2.bak c:\Meldung\Mel.properties)
注意:我建议使用if /i "%~1" ...
,其中/i
使其不区分大小写(也将识别p1
),并且%~1
删除参数周围的引号(如果存在)。 (否则,您可能会以if ""P1"" ...
结尾,这很麻烦)