Использование JSMin в командном файле - PullRequest
0 голосов
/ 18 июля 2009

Я пытаюсь создать командный файл, который будет запускать JSMin Дуга Кокфорда против всех файлов .js в каталоге. Вот что у меня есть:

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 думать, что угловые скобки являются частью пути.

Есть идеи? Что я делаю не так?

1 Ответ

2 голосов
/ 18 июля 2009

Прежде всего, вы используете 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 всегда делает токенизацию, обычно только на основе пробелов. Но в папке моего профиля уже есть пробелы, поэтому лучше вообще отключить токенизацию.

...