【问题标题】:Windows batch file - Concatenate all files in subdirectoriesWindows 批处理文件 - 连接子目录中的所有文件
【发布时间】:2012-07-27 12:50:10
【问题描述】:

需要将一个目录中的所有javascript文件及其所有子目录连接到一个文件中。

现在我在一个批处理文件中有一个非常简单的命令,它将一个目录中的所有匹配文件连接到一个文件中:

copy C:\javascripts\*.js concatenated.js

但是,这仅适用于一个目录,而不适用于它的任何子目录。我怎样才能做同样的事情并在子目录中包含所有匹配的文件?

非常感谢!

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    我不知道从批处理文件中执行此操作的方法,但您可以使用像 minify 这样的工具

    http://code.google.com/p/minify/

    合并 JavaScript 文件并缩小它们(例如,通过删除 cmets 和不必要的空白)。

    有很多类似的工具适用于各种编程环境。

    【讨论】:

      【解决方案2】:

      你可以从命令行使用

      for /r "c:\javascripts" %F in (*.js) do @type "%F" >>concatenated.js
      

      在运行上述命令之前,您可能需要先删除所有现有的 concatenated.js。

      从批处理文件中,百分比需要加倍

      @echo off
      del concatenated.js
      for /r "c:\javascripts" %%F in (*.js) do type "%%F" >>concatenated.js
      

      编辑
      将括号括在整个语句周围并使用单个覆盖重定向而不是每次迭代都附加重定向更有效。它还消除了从一开始就删除文件的需要。

      >concat.js (for /r "c:\javascripts" %F in (*.js) do @type "%F")
      

      或批量

      @echo off
      >concat.js (for /r "c:\javascripts" %%F in (*.js) do type "%%F")
      

      【讨论】:

      • 您的最后一个示例“或来自批处理”需要将 %F 更改为 %%F,或者至少在 win xp 上是这样。
      • @Mica - 是的,一切都已修复。谢谢
      • 有什么办法不让文件名和路径回显到连接文件中?
      • 太好了,谢谢!注意到一个小警告:如果输出文件(例如 concat.js)还具有要连接的文件(例如 .js)的扩展名,则在 for 中执行一个额外的循环,IF IF i>输出文件夹与输入文件夹一致。一种解决方法是不在同一个文件夹中输出,或者输出到具有不同扩展名的文件,然后重命名。
      • 我说过要对最后一个代码执行此操作,而不是之前的代码。重定向需要同时应用于 ECHO 和 TYPE。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2010-12-02
      • 2011-12-15
      • 2011-08-07
      • 1970-01-01
      • 2015-08-05
      相关资源
      最近更新 更多