Verwenden von> und <in einer Batchdatei mit einer for-Schleife

546
Basj

Wenn Sie dies in einer test.batDatei tun :

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

Ich hatte erwartet zu sehen:

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

aber ich sehe das stattdessen:

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

Warum wird diese falsche Reihenfolge <ersetzt 0<und >ersetzt 1>?

Wie bekomme ich stattdessen die normale Bestellung? (wie von jsmin gewollt )

jsmin <fulljslint.js >jslint.js "(c)2002 Douglas Crockford" 
1
Die Reihenfolge und Position der Weiterleitungen ist irrelevant und dem gestarteten Programm unbekannt. Die vorangehenden Ziffern betonen die umgeleiteten Pfade, haben jedoch keine Auswirkungen (`0 <` = `<` und `1>` = `>`). Dies ist einfach die Art, wie Befehle nach der Erweiterung wiederholt werden. AFH vor 6 Jahren 1
Ja, aber es macht immer noch jsmin mit falscher Reihenfolge ... Basj vor 6 Jahren 0
@Basj Wenn Sie ein Echo ausführen, versuchen Sie `für %% i in (__src \ *. Js) und geben Sie jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C ) Beispiel "" und die Reihenfolge ist ohne die vorangestellten Ziffern korrekt. Andernfalls müssen Sie möglicherweise `setlocal enabledelayedexpasion 'setzen und die ersetzten Werte als Variablen festlegen und diese Variablen dann in die Befehle mit den`! Varnames! `Einfügen. Wenn Sie jedoch nur ein Echo geben, habe ich das so gelöst, indem Sie die Caret-Symbole hinzugefügt haben, aber ich denke, Sie versuchen, mit dem Befehl jsmin umzuleiten, und ich habe das im Moment nicht, um es zu testen. Pimp Juice IT vor 6 Jahren 0
Das Programm, das ausgeführt wird, weiß nicht, wo in der Ausführungszeichenfolge die Umleitungen angewendet werden: Es werden nur die Parameter angezeigt. Wenn der Befehl Echo on aktiviert ist, wird jede Umleitung in einer Batchdatei auf diese Weise angezeigt. AFH vor 6 Jahren 0
@PimpJuiceIT Ich habe versucht mit `für %% i in (__src \ *. Js) do jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C) Beispiel "` aber es funktioniert nicht Basj vor 6 Jahren 0
Ich habe mir den Quellcode angesehen, und "jsmin" ist ein Standard-C-Programm, das nichts anderes tut als Code von "stdin" zu lesen und modifizierten Code in "stdout" zu schreiben, mit Fehlern in "stderr". Welche Fehler bekommst du? AFH vor 6 Jahren 0
@AFH Wenn Sie `für %% i in (__src \ *. Js) verwenden, machen Sie jsmin ^ <" %% i "^>" temp \ %% ~ ni %% ~ xi "" (C) Beispiel "` kehrt nicht von 'jsmin' zurück und ist auf Eingaben gesperrt. Wenn Sie Zeit haben, einen Blick darauf zu werfen, finden Sie hier die .exe-Datei: http://www.crockford.com/javascript/jsmin.zip Basj vor 6 Jahren 0
Diese Befehlszeichenfolge ist falsch - es gibt keine Umleitung (die Umleitungszeichenfolgen werden in Parameter konvertiert), daher liest sie aus `stdin`. Welche Fehler erhalten Sie mit Ihrem ursprünglichen Befehl? AFH vor 6 Jahren 0

1 Antwort auf die Frage

1
Basj

Ich kann es nicht glauben, aber das Problem war nur der Newline. Damit test.batfunktioniert es nicht richtig (die Copyright-Zeichenfolge wird nicht hinzugefügt, wie es von jsmin gewünscht wird, und die erste Zeile der JS-Ausgabedatei ist leer):

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

Aber test.batdamit funktioniert es:

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