Erstellen einer TXT-Datei für bestimmte Dateitypen im Batch

Erstellen einer TXT-Datei für bestimmte Dateitypen im Batch

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 .aviTypdateien eine TXT-Datei erstellen und die TXT-Datei nach dem Namen des Films benennen. Wenn ich also 20 Clipdateien .aviim 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, FORum ü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 .txtDatei erstellen. Die Kommandozeilendokumentation FORkann 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 ~nin unserer Variable, um nur den Namen zu erhalten. Hier %%~nf.txtkommt das her.

Wir beginnen mit %%f, dem aktuellen Dateinamen. Dann schneiden wir die Erweiterung mit ab %%~nfund 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 ECHOfü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.

verwandte Informationen