batch-file - 该命令的语法不正确 TYPE 命令

标签 batch-file cmd

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

最佳答案

当 %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"
)

关于batch-file - 该命令的语法不正确 TYPE 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765901/

相关文章:

android - Ant 成功构建测试项目,但 eclipse 抛出错误

找不到 Python 3.4 命令

c++ - 使用 sc create 启动时 Windows 程序不运行

batch-file - 如何获取通用 Windows 批处理文件时间戳

batch-file - 从另一个批处理文件中调用批处理中的子程序

arrays - 如何从文本文件中获取字符串到批处理文件中的数组?

powershell - bash 上相当于 `which` 的 cmd/powershell 是什么?

windows - 将参数传递给PS文件时,如何使用invoke-command从Windows命令行运行PS文件?

oracle - 检测dos批处理脚本中的sqlplus错误?

windows - 从外部文件中读取变量无法按计划任务运行