Drag & Drop Batch-Datei für mehrere Dateien?
Ich schrieb eine batch-Datei zu verwenden, PngCrush zu optimieren .png-Bild, wenn ich per drag und drop auf die batch-Datei.
In der was nächsten Abschnitt, ich schrieb über das, was ich dachte wäre ein guter upgrade für die batch-Datei.
Meine Frage ist: ist es möglich, eine batch-Datei erstellen, wie ich in der post, aber in der Lage bei der Optimierung von mehreren Bildern auf einmal? Drag-and-drop mehrere .png-Dateien? (und die Ausgabe etwas neues.png, neu(1).png, neu(2).png, etc...
InformationsquelleAutor der Frage Chaddeus | 2009-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, natürlich ist das möglich. Beim ziehen von mehreren Dateien auf eine batch-Datei bekommen Sie eine Liste der übersprungenen Dateien, die als eine durch Leerzeichen-getrennte Liste. Sie können dies überprüfen, mit dem einfach folgende batch:
Nun haben Sie zwei Möglichkeiten:
PngCrush kann bereits in der Lage mehrere Dateinamen auf der Kommandozeile. In diesem Fall alles, was Sie würde tun müssen, wäre die pass
%*
zu PngCrush, anstatt nur%1
(wie Sie wahrscheinlich jetzt tun):%*
enthält alle Argumente, um die batch-Datei, so ist dies ein bequemer Weg, um pass alle Argumente zu einem anderen Programm. Vorsichtig mit Dateien mit Namen wie PngCrush Optionen, wenn. UNIX-geeks werden wissen,, problem 🙂Nach der Lektüre Ihrer post beschreibt Ihre Technik, aber das funktioniert nicht richtig, wie Sie schreiben, die komprimierte Datei, um
new.png
. Eine schlechte Idee, wenn Sie Umgang mit mehreren Dateien auf einmal, da kann es nur einenew.png
:-). Aber ich habe gerade ausprobiert, dass PngCrush verarbeitet mehrere Dateien nur gut, wenn Sie also nicht dagegen eine in-place-update von den Dateien, dann setzenin Ihrem batch-wird die Arbeit zu tun (nach Ihrer original-Artikel).
PngCrush nicht in der Lage mehrere Dateien oder Sie schreiben wollen, jedes Bild in einer neuen Datei nach der Kompression. In diesem Fall bleiben Sie mit Ihrem "one file at a time" - routine, aber Sie Schleife über die input-Argumente. In diesem Fall ist es am einfachsten, nur eine kleine Schleife und
shift
die Argumente jedes mal, wenn Sie Prozess ein:Was wir hier tun, ist einfach: Zunächst überspringen wir die gesamte Partie, wenn es ausgeführt wird, ohne Argumente, dann definieren wir ein label zum springen:
loop
. Im inneren haben wir Sie einfach laufen PngCrush auf das erste argument, was die komprimierte Datei einen neuen Namen. Möchten Sie vielleicht zu Lesen, auf den Weg Dissektion syntax, die ich hier inhelp call
. Im Grunde, was ich hier mache ist der name der Datei genau wie vorher; ich habe nur stick "_new" am Ende des Dateinamens (vor der Erweiterung).%~dpn1
erweitert, um Laufwerk, der Pfad und der Dateiname (ohne Erweiterung), während%~x1
erweitert, um die Erweiterung, einschließlich der dot.ETA: Eep, ich habe gerade gelesen Ihre gewünschte Ausgabe mit neuen.png, neu(1).png, etc. In diesem Fall benötigen wir keine Lust Weg Dissektionen, aber wir haben andere Probleme zu kümmern.
Der einfachste Weg wäre wahrscheinlich nur starten ein Zähler auf 0, bevor wir den Prozess der ersten Datei und die Schrittweite jedes mal, wenn wir den Prozess noch eins:
%n%
ist unser counter hier, und wir behandeln den Fall, won
ist 0 das Ergebnis schreiben zunew.png
stattnew(0).png
.Dieser Ansatz hat Probleme, obwohl. Wenn es bereits Dateien mit dem Namen
new.png
odernew(x).png
dann wirst du wohl Klamotten. Nicht schön. Also müssen wir etwas anders machen und prüfen, ob wir tatsächlich die Datei-Namen:Den rest des Programms bleibt die gleiche, auch die normale Schleife. Aber jetzt starten wir in die ersten freien Dateinamen und vermeiden Sie das überschreiben von Dateien, die bereits vorhanden sind.
Fühlen Sie sich frei, um anzupassen, wie gebraucht.
InformationsquelleAutor der Antwort Joey
Drag & Drop in einen sicheren Weg, ist nicht so einfach mit batch.
Umgang mit
%1
shift
oder%*
scheitern könnte, weil der explorer ist nicht sehr klug, während unter Angabe der Dateinamen, nur Dateinamen mit Leerzeichen sind in Anführungszeichen gesetzt.Aber Dateien wie
Cool&stuff.png
werden nicht in Anführungszeichen gesetzt, indem Sie die explorer so erhalten Sie einen cmdline wieSo, in
%1
ist nurCool
auch in%*
ist nurCool
aber nachdem die Ladung endet, cmd.exe Ausführung versucht einestuff.png
(und scheitert).Zu handhaben, können Sie Zugriff auf die Parameter mit
!cmdcmdline!
statt%1
..%n
und umgehen einen möglichen Fehler, die am Ende der Ausführung, eine einfache
exit
helfen könnte.Btw. es gibt eine Linie-Grenze für drag&drop-Operationen von ~2048 Zeichen, trotz der "standard" - batch-Linie-Grenze von ~8192 Zeichen.
Da für jede Datei den vollständigen Pfad übergeben wird, kann diese Grenze erreicht werden, mit wenigen Dateien.
InformationsquelleAutor der Antwort jeb
Und zu differenzieren zwischen abgelegten Dateien und Ordner, die Sie verwenden können:
InformationsquelleAutor der Antwort Amr Ali
Brauchen Sie nicht eine batch-Skript zu optimieren, mehrere PNGs, alles, was Sie benötigen, ist das wildcard:
Wird pngcrush alle PNG-Bilder im aktuellen Verzeichnis und verschieben Sie Sie in einem sub-dir namens "crushed". Ich möchte hinzufügen, die -brute-flag wahrscheinlich abrasieren ein paar bytes mehr.
Ich bin dieses posting, weil es scheint nicht zu sein, gut dokumentiert oder bekannt, und da kann es für Sie einfacher sein, auf die Dauer als für das schreiben und pflegen eine drag-and-drop-batch-Datei.
InformationsquelleAutor der Antwort dmitrik