2012-08-01 60 views
2

我想运行失败的脚本。我已经将问题隔离为一个简单的TYPE命令。这里是代码该命令的语法不正确TYPE命令

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

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

,因为它看起来是正确的,我已经尝试了不同的,如果一个参数传入things.The脚本运行良好,我不能弄明白

编辑:我想呼应这一行,但好像IF NOT [] == [] TYPE C:\ test.log 1 >>

+1

+1使用ECHO来帮助调试 - 这是解决问题所需的关键信息。 – dbenham 2012-08-01 19:40:26

回答

2

当%1为空时,脚本失败,因为整个IF语句必须具有有效语法,即使IF计算结果为false,没有得到执行。

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

我会在中频条件下使用"%~1"而不是[%1]:它更健壮一点。

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

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

非常感谢!这很好用!我想知道为什么我没有在我看过的任何教程中遇到过这种情况(我刚刚开始使用脚本) – 2012-08-01 19:52:57