Ich habe einen Ordner, der alle Arten von Dateien enthält. Nehmen wir an, mein Ordnerpfad ist E:/temp
.
Ich möchte nur für die .avi
Typdateien eine TXT-Datei erstellen und die TXT-Datei nach dem Namen des Films benennen. Wenn ich also 20 Clipdateien .avi
im Ordner habe, möchte ich 20 TXT-Dateien öffnen und jede TXT-Datei wird nach einem Clip benannt.
Außerdem muss ich in die txt-Datei das Wort „HAPPY“ schreiben (für alle txt-Dateien ist es dasselbe).
Was wird das Skript sein, das die Batchdatei verwendet?
Antwort1
Sie müssen verwenden, FOR
um über die Elemente zu iterieren, mit denen Sie arbeiten möchten. SieheSo durchlaufen Sie Dateien, die mit Platzhaltern in einer Batchdatei übereinstimmenfür Details.
Sobald Sie diesen Teil erledigt haben, möchten Sie den Dateinamen Ihrer .txt
Datei erstellen. Die Kommandozeilendokumentation FOR
kann uns dabei helfen:
In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
Wir wollen den letzten Eintrag. Wir wollen das abschneiden .avi
, also verwenden wir ~n
in unserer Variable, um nur den Namen zu erhalten. Hier %%~nf.txt
kommt das her.
Wir beginnen mit %%f
, dem aktuellen Dateinamen. Dann schneiden wir die Erweiterung mit ab %%~nf
und hängen das .txt
... an. Fertig:%%~nf.txt
Das letzte Problem entsteht, wenn Sie versuchen, alles in einer Zeile zu lösen, etwa:
FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt
Das würde nicht funktionieren, da die Shell das interpretiert >
und sofort mit der Ausgabe in diese Datei beginnt, was wir nicht wollen. Wir möchten, dass das ECHO
für jede einzelne Datei verarbeitet wird, also teile ich es einfach in mehrere Zeilen auf.
@ECHO OFF
REM Iterate over all *.avi file in the current directory
FOR %%f IN (*.avi) DO (
REM Cut off the extension from %%f, tack on .txt and
REM use it as the filename for our HAPPY output
ECHO HAPPY > %%~nf.txt
)
Antwort2
Erstellen Sie eine Textdatei mit dem Namenglücklich.txtenthält "GLÜCKLICH". Erstellen Sie eine Batchdatei mit dem Namenmakehappy.cmdenthält Folgendes:
for %%i in (*.avi) do copy happy.txt "%%i.txt"
Laufenglücklich machen. Die neuen Textdateien werden eine doppelte Erweiterung haben, aber es gibt Möglichkeiten, dies bei Bedarf zu umgehen.