Frage zu Batch-Programmierung

eightcore

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
1.657
Guten Abend.

Ich habe eine Batchdatei mit folgendem Inhalt:
Code:
for %%f in (*.MOV) do (starth.exe /M "D:\Program Files\Avidemux 2.6\avidemux_cli.exe" --force-alt-h264 --load %%f --run mov2avi.py --save "%%f.avi" --quit)
exit


Dabei wird jede MOV-Datei im Verzeichnis in eine AVI-Datei umgewandelt. Etwas möchte ich noch:
Die MOV-Dateien sollen gelöscht werden. Am besten gleich nach der abgeschlossenen Umwandlung derjenigen Datei, falls nicht anders möglich nach der abgeschlossenen Umwandlung aller Dateien.

Edit: starth.exe öffnet das Programm, das per Parameter übergeben wird, versteckt.
 
Zuletzt bearbeitet:
for %%f in (*.MOV) do (
starth.exe /M "D:\Program Files\Avidemux 2.6\avidemux_cli.exe" --force-alt-h264 --load %%f --run mov2avi.py --save "%%f.avi" --quit
del %%f
)
exit
Alles was in ( ) ist, wird für jede Datei ausgeführt.

Aber mal abgesehen davon, Batch ist keine Programmierung.
 
Bagbag schrieb:
Alles was in ( ) ist, wird für jede Datei ausgeführt.

Aber mal abgesehen davon, Batch ist keine Programmierung.

http://www.duden.de/rechtschreibung/Programm

Bedeutungsübersicht
1.
a. ...
b. ...
c. vorgesehener Ablauf, die nach einem Plan genau festgelegten Einzelheiten eines Vorhabens
d. festzulegende Folge, programmierbarer Ablauf von Arbeitsgängen einer Maschine

2. ...
3. ...
4. (EDV) Folge von Anweisungen für eine Anlage zur elektronischen Datenverarbeitung zur Lösung einer bestimmten Aufgabe
 
Bagbag schrieb:
Alles was in ( ) ist, wird für jede Datei ausgeführt.

Aber mal abgesehen davon, Batch ist keine Programmierung.

Von der Thematik "Ist Batch Programmierung?" abgesehen funktioniert dein Skript nicht, es löscht mir gleich alle Videos, bevor es irgendeines umwandeln kann. So einfach ist es leider nicht.
 
Wenn ich den nachfolgenden Code benutze, funktioniert es nicht mehr.

Code:
FOR /F %%f in (*.MOV) do (starth.exe /M "D:\Program Files\Avidemux 2.6\avidemux_cli.exe" --force-alt-h264 --load %%f --run mov2avi.py --save "%%f.avi" --quit)
pause


Die Datei "*.MOV" kann nicht gefunden werden.
 
wenn du For /F benutzt, musst du die Klammeranweisung entspechend instruieren.

Beispiel:
Code:
For /F "Tokens=* Delims=" %%i IN ('Dir /B X:\Movies\*.mov') DO starth.exe /M "D:\Program Files\Avidemux 2.6\avidemux_cli.exe" --force-alt-h264 --load %%~nxi --run mov2avi.py --save "%%~ni.avi" --quit :Call Sub

:Sub
Del %%~nxi

%%i ist eine inkrementale Variable bei For. Hier nehme ich die Ausgabe des Dir-Befehls und leite diesen dann auf die DO-Befehle um. Ob das jetzt so funktioniert, kann ich natürlich nicht nachvollziehen.
 
Zuletzt bearbeitet:
eightcore schrieb:
Wenn ich den nachfolgenden Code benutze, funktioniert es nicht mehr.

Code:
FOR /F %%f in (*.MOV) do (starth.exe /M "D:\Program Files\Avidemux 2.6\avidemux_cli.exe" --force-alt-h264 --load %%f --run mov2avi.py --save "%%f.avi" --quit)
pause

Hi,
ich vermute das Problem bei "starth.exe /M"
Bei einen Aufruf über den normalen "start"-Befehl, wartet die Kommandozeile nicht das Ende des Programms ab, vermute das ist hier auch so.
Versuche mal (Testweise) die "avidemux_cli.exe" direkt zu starten, dann sollte der "Del"-Befehl erst nachdem Programmende von "avidemux_cli.exe" erfolgen.
 
Es tut mir leid. Die Variante von Bagbag hätte eigentlich funktioniert, nur habe ich für starth.exe einen falschen Parameter angegeben. Wenn ich anstelle von "/M" "/W" schreibe, wartet das Programm nämlich, bis der Befehl beendet ist und fähr erst dann fort.
Funktioniert nun einwandfrei! Danke!
 
@frogger9: Thx für den Tipp. Werde ich mir bei Gelegenheit mal näher anschauen.
 
Alles was GOTO kann ist Programmierung :p

Aber mal eine andere Frage: warum muss ich Avidemux in so einer Konstruktion anstrengen; kann dieses Tool denn nicht selbst solche Stapeljobs abarbeiten? Ich meine, ich hätte aufgeschnappt, dass…

CN8
 
Zurück
Oben