批处理脚本重定向语法

Vom*_*yle 5 command-line batch-file

有一天我用批处理脚本示例写了一个答案,有人指出,当您将输出重定向到文件时,如果您先重定向到文件,然后将您的命令、文本等(以下示例[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%"
Run Code Online (Sandbox Code Playgroud)

示例更容易阅读方式

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
Run Code Online (Sandbox Code Playgroud)

显然,使用这种格式的命令从批处理脚本中读取逻辑要容易得多,ECHO但是如果在批处理脚本中使用这种方法作为标准存在任何问题,就会引起关注。

我在互联网上环顾四周,我能找到的最多的是下面引用的一个来源,声明不要在还包含其他重定向的命令行中使用此技术[2]


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

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

参考

  • 重定向[1]

    • 注释:(3)

      重定向到一个或多个文件往往会使批处理文件难以阅读。有时可以用空格填充行以对齐所有重定向标志并使批处理文件更具可读性。

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

      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 !!根据经验:不要在还包含其他重定向的命令行中使用此技术。

    来源

Dav*_*ill 6

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

这是另一种选择,(对我而言)更具可读性:

(
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%"
Run Code Online (Sandbox Code Playgroud)

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