Windows批处理文件 - 合并所有子目录中的文件

21

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

目前我有一个非常简单的批处理命令,可以将一个目录中所有匹配的文件连接成一个文件:

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

然而,这仅适用于一个目录,而不适用于其任何子目录。我该如何做到同样的事情,并包括所有匹配的子目录中的文件?

非常感谢!

2个回答

28

你可以从命令行使用以下命令

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
1
有没有办法不将文件名和路径回显到连接的文件中? - Mica
@user1586957 - 在最后的代码中,在 type "%%F" 之前立即插入 echo %%~dpF& - dbenham
似乎没有起作用。输出文件与之前相同。例如 for /r "C:\Users\sri00571\Desktop\test_spats" %F in (*.csv) do echo %%~dpF& @type "%F" >>concatenated.csv - user1586957
1
我说的是对最后一段代码进行操作,而不是前面那一段。重定向需要同时应用于ECHO和TYPE。 - dbenham
显示剩余3条评论

1

我不知道如何从批处理文件中实现这一点,但您可以使用像minify这样的工具

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

既要合并JavaScript文件,又要对它们进行缩小(例如通过删除注释和不必要的空格)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接