2009-07-17 3 views
0

Ich versuche, eine Batch-Datei zu erstellen, die Doug Cockfords JSMin gegen alle .js-Dateien in einem Verzeichnis ausführen wird. Hier ist, was ich habe:Verwenden von JSMin in einer Batch-Datei

for /f %%a IN ('dir /b /s *.js') do jsmin <%%a >%%~da%%~pamin\%%~na.min%%~xa 

Das Problem ist, dass die spitzen Klammern (<>) bewirken, dass die Batch-Datei als 0 < und 1> interpretieren. Event läuft nur:

jsmin <scripts\script.js >jsmin-stuff.js 

in einer Batch-Datei macht das gleiche. Wenn Sie die spitzen Klammern mit^verwerfen, ist jsmin der Ansicht, dass die spitzen Klammern Teil des Pfades sind.

Irgendwelche Ideen? Was mache ich falsch?

Antwort

2

Zunächst einmal verwenden Sie for /f für etwas, wo for allein ausreicht. Zweitens empfehle ich nicht, dies rekursiv zu tun, da Sie die Skripte mit minimalem Aufwand offensichtlich in einen Unterordner desselben Baums platzieren.

for %x in (*.js) do jsmin <"%x" >"min\%~nx-min.js" 

(von der Befehlszeile, nicht aus einer Charge) tut, was es für mich hier sollte. Was Sie mit 0< und 1> sehen, ist eigentlich korrekt, da 0 der Standard-Eingabestrom und 1 der Standard-Ausgabestream ist, den Sie beide umleiten.

Für diese rekursiv die folgende Zeile zu tun hat den Trick für mich:

for /r %x in (*.js) do jsmin <"%x" >"%~dpx\min\%~nx-min.js" 

ETA: Ok, ich habe es, die dir Methode tatsächlich funktioniert zuverlässiger als for /r verwenden. Ich entschuldige mich. Von einer Batch-Datei für mich folgende gearbeitet:

for /f "usebackq delims=" %%x in (`dir /s /b *.js`) do jsmin <"%%x" >"%%~dpx\min\%%~nx-min.js" 

for /f immer Tokenisieren tut, in der Regel nur auf Leerzeichen basierte, though. Aber in meinem Profilordner ist bereits Whitespace enthalten, also deaktivieren Sie das Tokening vollständig.

+0

Das funktioniert, wenn ich es direkt in die Eingabeaufforderung eingibt, aber wenn es in einer Batch-Datei enthalten ist, funktioniert es nicht. Rekursion und die For-Schleife sind nicht das Problem. Fehler beim Ausführen der folgenden Zeile aus einer Batchdatei: jsmin jsmin-stuff.js Warum schlägt es fehl? Wie kann es geändert werden, damit es nicht scheitert? – mikefrey

+0

Übrigens habe ich keine Rekursionsprobleme mit meiner ursprünglichen for-Schleife, da 'dir/b/s * .js' zuerst eine Liste mit Dateien erhält ... und dann neue Dateien erstellt. – mikefrey