2

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

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

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

我无法弄清楚,因为它看起来正确并且我尝试了不同的东西。如果传入参数,脚本运行良好。

编辑:我尝试回显该行,它看起来像 IF NOT [] == [] TYPE C:\test.log 1>>

4

1 回答 1

2

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

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

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

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

if not "%~1"=="" (
  echo Appending this log to %1
  type c:\test.log >>"%~1"
)
于 2012-08-01T19:45:53.393 回答