【问题标题】:Combination of If and copy fails with syntax incorrectIf 和 copy 的组合失败,语法不正确
【发布时间】:2018-08-09 11:58:28
【问题描述】:

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

我尝试了没有复制的 if(而不是回显),效果很好,我尝试了复制命令也很好,但是每当我尝试在 .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

即使在查看技术文档后,我也没有看到任何对我来说看起来不对劲的地方。因此我的问题:这里有什么问题?为什么?

【问题讨论】:

  • 这应该是If /I "%~1"=="P1"If /I "%~1"=="P2"吗?

标签: windows batch-file windows-console


【解决方案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"" ... 结尾,这会很麻烦)

【讨论】:

  • 是的。语法是if &lt;value1&gt; &lt;comparator&gt; &lt;value2&gt; command,因此命令甚至必须 位于同一(逻辑)行上。尽管您可以将其拆分为几行 physical 行,例如 if a == b ( 和下一行 echo equal 和下一行 )。这称为代码块,至少( 必须与if 位于同一物理行。
  • 我问我遇到了麻烦,直到我将“复制...”部分移到下一行(这对我来说毫无意义)
猜你喜欢
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多