Windows-Batch-Skript - Datei Lesen, Namen in die Variablen
Ich versuche zum konvertieren von Dateien (Filme) in ein Verzeichnis eins nach dem anderen. Jeder neue, konvertierte Datei ein neuer Dateiname zugewiesen - die alte mit einer neuen Erweiterung.
Ich habe versucht, das unten zum Lesen der Quell-Datei, entfernen Sie die Erweiterung und eine neue zuordnen:
@echo off
setlocal DisableDelayedExpansion
cd \target_dir
for %%x in (*) do (
echo %%x
set source=%%x
echo Source #%source%#
set target=%source:.mpg=%
echo Target #%target%#
transcode %source% %target%.mp4
)
Leider, das wird nicht funktionieren. Wie die Ausgabe zeigt, ich bin nicht selbst verwalten, um eine Kopie der aktuellen Datei in die variable "source":
E:\target_dir>..\test.bat
movie1.mpg
source ##
target ##
movie2.mpg
source ##
target ##
Googelte ich herum und dachte, ich würde gefunden haben, die richtige syntax, aber das scheint nicht zu sein. Vielen Dank für jede Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
jlahd zeigt eine korrekte Lösung, ohne Sie zu kopieren Sie den Dateinamen in eine variable.
Aber ich will erklären, Ihr Aktuelles problem.
Finden Sie die BBB (batch-Anfänger-Fehler), in Wirklichkeit Sie die variable, aber Sie haben nicht Zugriff auf den Inhalt später.
Dies ist ein Effekt, der die batch-parser arbeiten mit code-Blöcke diese Blöcke werden analysiert und Prozent wird die expansion getan vor der code wird ausgeführt.
Ein code-block ist der code innerhalb der Klammern oder Befehle verkettet
&
,&&
oder||
.Um dieses problem zu vermeiden die verzögerte Erweiterung eingeführt wurde.
Dann klicken Sie einfach verwenden können
!variable!
zum erweitern einer variable zur Laufzeit.Dies funktioniert:
Beachten Sie, dass Sie nicht verwenden können, die
%%~n
syntax auf standard-Umgebungsvariablen - Sie brauchen, um direkt auf die for-Schleife-variable.Edit: Zitate Hinzugefügt, um die batch-Dateien mit Leerzeichen im Namen, wie gut.