Usando> e <dentro de um arquivo em lotes, com um loop for

1

Ao fazer isso dentro de um test.batarquivo:

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

Eu esperava ver:

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

mas vejo isso:

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

Por que essa ordem errada e <substituída por 0<, >substituída por 1>?

Como obter a ordem normal? (como desejado por jsmin )

jsmin <fulljslint.js >jslint.js "(c)2002 Douglas Crockford"
Basj
fonte
1
A ordem e a posição dos redirecionamentos são irrelevantes e desconhecidas para o programa lançado. Os números anteriores enfatizam os caminhos redirecionados, mas não têm nenhum efeito ( 0<= <e 1>= >). É assim que os comandos são repetidos após a expansão.
AFH
Sim, mas ele ainda faz jsmin falhar com ordem errada ...
Basj
@Basj Se você estiver ecoando, tente for %%i in (__src\*.js) do echo jsmin ^<"%%i" ^>"temp\%%~ni%%~xi" "(C) Example"e a ordem está correta sem os dígitos prefixados. Caso contrário, você pode precisar setlocal enabledelayedexpasiondefinir os valores substituídos como variáveis ​​e, em seguida, colocar essas variáveis ​​nos comandos com o mesmo !varnames!tipo. Se você está apenas ecoando, foi assim que resolvi adicionando os símbolos de sinal de intercalação, mas acho que você está tentando redirecionar com o comando jsmin e não preciso fazer o teste para confirmar para você no momento.
Juice Pimp TI
O programa que está sendo executado não sabe onde na sequência de execução os redirecionamentos estão sendo aplicados: ele vê apenas os parâmetros. Quando o comando está ecoando, todos os redirecionamentos em um arquivo em lotes são exibidos dessa maneira.
AFH
@PimpJuiceIT Eu tentei com for %%i in (__src\*.js) do jsmin ^<"%%i" ^>"temp\%%~ni%%~xi" "(C) Example", mas ele não funciona
Basj

Respostas:

1

Não acredito, mas o problema era apenas a nova linha. Com isso test.bat, ele não funciona corretamente (a cadeia de direitos autorais não é incluída como o jsmin deve fazê-lo e a primeira linha do arquivo JS de saída está vazia):

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

Mas com isso test.bat, funciona:

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