我正在尝试创建一个批处理文件,该文件将针对目录中的所有.js文件运行Doug Cockford的JSMin。这就是我所拥有的:
for /f %%a IN ('dir /b /s *.js') do jsmin <%%a >%%~da%%~pamin\%%~na.min%%~xa
问题是尖括号(&lt;&gt;)导致批处理文件将其解释为0&lt;和1>。活动正好:
jsmin <scripts\script.js >jsmin-stuff.js
批处理文件中的做同样的事情。使用^转义尖括号使得jsmin认为尖括号是路径的一部分。
有什么想法吗?我做错了什么?
答案 0 :(得分:2)
首先,您使用for /f
来表示仅for
就足够了。其次,我不建议递归地执行此操作,因为您显然将min-ified脚本放入同一树的子文件夹中。
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
总是进行标记,通常只基于空格。但我的个人资料文件夹中已经有空格,所以最好完全关闭标记化。