我正在尝试运行失败的脚本。我已将问题隔离到一个简单的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>>
答案 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"
)