2009-07-17 2 views
0

Я пытаюсь создать командный файл, который запустит JSMin Doug Cockford для всех файлов .js в каталоге. Вот что я получил:Использование 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. Во-вторых, я не рекомендую делать это рекурсивно, поскольку вы, очевидно, помещаете 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 всегда делает tokenizing, как правило, только основываясь на пробельных, хотя. Но в моей папке профиля уже есть пробелы, поэтому лучше отключить токенизацию вообще.

+0

Это работает, если я набираю его непосредственно в командной строке, но если он включен в пакетный файл, это не сработает. Рекурсия и цикл For не являются проблемой. Выполнение следующей строки из командного файла не выполняется: jsmin jsmin-stuff.js Почему это не удается? Как его можно изменить, чтобы он не провалился? – mikefrey

+0

Кстати, у меня не будет проблем с рекурсией с использованием моего исходного цикла, так как «dir/b/s * .js» сначала получает список файлов ... затем создает новые файлы. – mikefrey

Смежные вопросы