Использование> и <внутри командного файла с циклом for

463
Basj

Делая это внутри test.batфайла:

for %%i in (__src\*.js) do jsmin <"%%i" >"temp\%%~ni%%~xi" "(C) Example" 

Я ожидал увидеть:

D:\Temp>jsmin <"__src\background.js" >"temp\background.js" "(C) Example" 

но я вижу это вместо этого:

D:\Temp>jsmin "(C) Example" 0<"__src\background.js" 1>"temp\background.js" 

Почему этот неправильный порядок и <заменен 0<, >заменен 1>?

Как получить нормальный заказ вместо этого? (как хочет jsmin )

jsmin <fulljslint.js >jslint.js "(c)2002 Douglas Crockford" 
1
Порядок и положение перенаправлений не имеет значения и неизвестно для запущенной программы. Предыдущие цифры подчеркивают перенаправленные пути, но не имеют никакого эффекта (`0 <` = `<` и `1>` = `>`). Это просто способ отображения команд после раскрытия. AFH 6 лет назад 1
Да, но это все равно заставляет jsmin терпеть неудачу с неправильным порядком ... Basj 6 лет назад 0
@Basj Если вы используете эхо, попробуйте `for %% i в (__src \ *. Js) сделать эхо jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C ) Пример "` и порядок правильный без префиксных цифр. В противном случае вам может потребоваться `setlocal enabledelayedexpasion` и установить замещенные значения в качестве переменных, а затем поместить эти переменные в команды с`! Varnames! `, Возможно, так. Однако если вы просто повторяете, я решил это, добавив символы каретки, но я думаю, что вы пытаетесь перенаправить с помощью команды jsmin, и у меня нет этого, чтобы проверить вас в данный момент. Pimp Juice IT 6 лет назад 0
Запускаемая программа не знает, где в строке выполнения применяются перенаправления: она видит только параметры. При включении команды, каждое перенаправление в пакетном файле отображается таким образом. AFH 6 лет назад 0
@PimpJuiceIT Я пытался с `for %% i в (__src \ *. Js) сделать jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C) Пример "`, но это не работает Basj 6 лет назад 0
Я посмотрел на исходный код, и `jsmin` - это стандартная программа на C, которая делает только чтение кода из` stdin` и запись модифицированного кода в `stdout` с ошибками в` stderr`. Какие ошибки вы получаете? AFH 6 лет назад 0
@AFH При использовании `for %% i в (__src \ *. Js) выполните jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C) Пример "`, это делает не возвращается из `jsmin` и блокируется в ожидании ввода. Если у вас есть время, чтобы посмотреть, вот .exe: http://www.crockford.com/javascript/jsmin.zip Basj 6 лет назад 0
Эта командная строка неверна - перенаправление отсутствует (строки перенаправления преобразуются в параметры), поэтому она читает из `stdin`. Какие ошибки вы получаете с вашей оригинальной команды? AFH 6 лет назад 0

1 ответ на вопрос

1
Basj

Я не могу в это поверить, но проблема была только в новой строке. При этом test.batон не работает должным образом (строка авторских прав не добавляется, как это должен делать jsmin, а первая строка выходного файла JS пуста):

for %%i in (__src\*.js) do jsmin <"%%i" >"temp\%%~ni%%~xi" "(C) Example" 

Но с этим test.batэто работает:

for %%i in (__src\*.js) do jsmin <"%%i" >"temp\%%~ni%%~xi" "(C) Example" + (empty line here)