0

我正在尝试创建一个批处理文件,它将针对目录中的所有 .js 文件运行 Doug Cockford 的 JSMin。这是我所拥有的:

for /f %%a IN ('dir /b /s *.js') do jsmin <%%a >%%~da%%~pamin\%%~na.min%%~xa

问题是尖括号 (<>) 导致批处理文件将其解释为 0< 和 1>。事件运行:

jsmin <scripts\script.js >jsmin-stuff.js

在批处理文件中做同样的事情。用 ^ 转义尖括号使 jsmin 认为尖括号是路径的一部分。

有任何想法吗?我究竟做错了什么?

4

1 回答 1

2

首先,您正在使用单独for /f的东西for就足够了。其次,我不建议递归地执行此操作,因为您显然将缩小的脚本放入同一树的子文件夹中。

for %x in (*.js) do jsmin <"%x" >"min\%~nx-min.js"

(从命令行,而不是从批处理)在这里为我做了应该做的事情。您所看到的0<并且1>实际上是正确的,因为 0 是标准输入流,而 1 是标准输出流,您都在重定向它们。

为了递归地执行此操作,以下行对我有用:

for /r %x in (*.js) do jsmin <"%x" >"%~dpx\min\%~nx-min.js"

ETA:好的,我检查过了,该dir方法实际上比使用for /r. 我道歉。从批处理文件中,以下内容对我有用:

for /f "usebackq delims=" %%x in (`dir /s /b *.js`) do jsmin <"%%x" >"%%~dpx\min\%%~nx-min.js"

for /f不过,总是进行标记化,通常仅基于空格。但是我的个人资料文件夹中已经有空格,所以最好完全关闭标记化。

于 2009-07-17T23:15:22.577 回答