2009-07-17 98 views
0

我试图创建一个批处理文件,该文件将针对目录中的所有.js文件运行Doug Cockford的JSMin。这里就是我的了:在批处理文件中使用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认为尖括号是路径的一部分。

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

回答

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总是这样符号化,通常只基于空白,虽然。但是我的配置文件夹里已经有空格,所以最好关掉标记。

+0

如果我直接在命令提示符中键入它,但在包含在批处理文件中时不起作用。递归和For循环不是问题。 仅从批处理文件运行以下行失败: jsmin jsmin-stuff.js 为什么它失败? 如何改变它,使其不会失败? – mikefrey 2009-07-18 20:28:24