代码之家  ›  专栏  ›  技术社区  ›  Thomas

if和copy组合失败,语法不正确

  •  1
  • Thomas  · 技术社区  · 6 年前

    我正在尝试创建一个.bat文件,该文件使用一个参数来定义它应该执行的复制操作。

    我尝试了if-without-copy(一个echo),它工作得很好,我尝试了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
    

    即使在看了技术文档之后,我也没有发现任何问题。Thusmy问题:这里怎么了?为什么呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Stephan    6 年前

    您的参数是 %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"" ... 哪个会有麻烦)