该命令的语法不正确TYPE命令

时间:2012-08-01 19:09:25

标签: batch-file cmd

我正在尝试运行失败的脚本。我已将问题隔离到一个简单的TYPE命令。这是代码

IF NOT [%1]==[] ECHO Appending this log to %1
IF NOT [%1]==[] TYPE C:\test.log >> %1

如您所见,我想要做的就是将日志文件复制到指定的指定位置。如果没有指定额外的日志文件,脚本也应该运行。

我无法理解,因为它看起来是正确的,我尝试了不同的东西。如果传入参数,脚本运行正常。

编辑:我尝试了ECHOing那一行,看起来像IF NOT [] == [] TYPE C:\ test.log 1>>

1 个答案:

答案 0 :(得分:2)

当%1为空时,脚本失败,因为整个IF语句必须具有有效的语法,即使IF的计算结果为false,这样主体也不会被执行。

您可以通过重定向到"%~1"而不是%1来解决问题。需要~来删除可能已存在于值中的任何封闭引号。重定向到""是有效的语法。它会因运行时错误而失败,但不会出现语法错误。但是如果%1为空,它就不会被执行,所以没关系。

我也会在IF条件中使用"%~1"而不是[%1]:它更健壮。

我还会重构代码以使用单个IF,但这更多的是风格问题。

if not "%~1"=="" (
  echo Appending this log to %1
  type c:\test.log >>"%~1"
)