批处理脚本重定向语法

批处理脚本重定向语法

有一天,我用一个批处理脚本示例写了一个答案,有人指出,当你将输出重定向到文件时,如果先重定向到文件,然后再输入命令、文本等,那么在批处理脚本中读取 echo 逻辑会更容易(见下面的示例[1])。

但是这个建议没有提到你不想这样做的任何理由,所以我开始进行一些调查,因为我一直在寻找本机方法来让事情看起来更干净。


示例通常方法

IF EXIST "%tmpfile%" DEL /Q /F "%tmpfile%"
ECHO Some Text Here>>"%tmpfile%"
ECHO A little more text here>>"%tmpfile%"
ECHO Some other text over here man>>"%tmpfile%"
ECHO Can Scooby please have a Scooby snack>>"%tmpfile%"

示例更易于阅读的方式

IF EXIST "%tmpfile%" DEL /Q /F "%tmpfile%"
ECHO>>"%tmpfile%" Some Text Here
ECHO>>"%tmpfile%" A little more text here
ECHO>>"%tmpfile%" Some other text over here man
ECHO>>"%tmpfile%" Can Scooby please have a Scooby snack

显然更轻松使用这种格式的命令从批处理脚本中读取逻辑ECHO,但如果在批处理脚本中使用此方法作为标准,则会存在任何问题。

我在网上查了一些,最多能找到的是下面引用的一个来源,它指出不要在包含其他重定向的命令行中使用此技术[2]


问题

这个问题可能是针对 Windows 批处理脚本专家或已使用过此方法一段时间或已进行过严格测试的人提出的,但是...

  1. 除了一个问题(多次重定向[2]) 不使用此语法,还有其他问题、原因或陷阱需要您事先考虑吗?

参考

  • 重定向[1]

    • 注:(3)

      重定向到一个或多个文件往往会使批处理文件难以阅读。有时可以在行中填充空格以对齐所有重定向符号,并使批处理文件更易读。

      但是,如果您使用 ECHO 命令行执行此操作,空格实际上会被 ECHOed,至少可以说这并不总是方便的。

      Marc Stern 的网站我找到了一个很好的解决方案:只需将重定向放在实际命令之前。

      以这个假想的批处理文件为例:

      ECHO Directory of all files on C: >> LOG1.LOG

      DIR C:\ /S >> LOG1.LOG

      那看起来可不太好看,对吧?

      那么这个怎么样?

      >> LOG1.LOG ECHO Directory of all files on C:

      >> LOG1.LOG DIR C:\ /S

      效果完全一样,没有区别!好多了,不是吗?但是现在,试试这些:

      VER | TIME > LOG1.LOG > LOG1.LOG VER | TIME

      正如您所注意到的,在第二行中,VER 的输出被重定向到 LOG1.LOG !! 经验法则是:不要在还包含其他重定向的命令行中使用此技术。

    来源

答案1

我一直在寻找本地方法来让事情看起来更干净一些。

这是另一种选择,(对我来说)甚至更具可读性:

(
ECHO Some Text Here
ECHO A little more text here
ECHO Some other text over here man
ECHO Can Scooby please have a Scooby snack
)>>"%tmpfile%"

它也更易于维护,因为如果需要的话,打开/关闭重定向要容易得多,因为它在一个地方完成。

相关内容