In Batch-file durchnummerierte Dateinamen verarbeiten
Hallo,
ich habe ein Batch-file geschrieben mit folgendem Inhalt:
copy /b static.ps + 00001.txt NEU_00001.txt
copy /b static.ps + 00002.txt NEU_00002.txt
copy /b static.ps + 00003.txt NEU_00003.txt
copy /b static.ps + 00004.txt NEU_00004.txt
copy /b static.ps + 00005.txt NEU_00005.txt
copy /b static.ps + 00006.txt NEU_00006.txt
copy /b static.ps + 00007.txt NEU_00007.txt
copy /b static.ps + 00008.txt NEU_00008.txt
copy /b static.ps + 00009.txt NEU_00009.txt
copy /b static.ps + 00010.txt NEU_00010.txt
usw. ...
Es gibt ca. 1000 durchnummerierte Textdateien und ein einziges static.ps-file, die je zu einem neuen Textfile zusammenkopiert werden.
Das funktioniert soweit ganz gut.
Da ich diese Aufgabe aber des öfteren und immer mit unterschiedlicher Anzahl an durchnummerierten Textdateien zu erledigen habe, hätte ich das im batch gerne automatisch (mit einer Zählfunktion?) abgearbeitet, damit ich nicht jedesmal das Batch-file neu anpassen muß.
Es soll die Anzahl der durchnummerierten Textdateien erkennen und dann den copierbefehl automatisch durcharbeiten. Habe mich schon mit der FOR Anweisung versucht, komme da aber nicht weiter.
Ob jemand helfen kann?
MfG
Yosimo
ich habe ein Batch-file geschrieben mit folgendem Inhalt:
copy /b static.ps + 00001.txt NEU_00001.txt
copy /b static.ps + 00002.txt NEU_00002.txt
copy /b static.ps + 00003.txt NEU_00003.txt
copy /b static.ps + 00004.txt NEU_00004.txt
copy /b static.ps + 00005.txt NEU_00005.txt
copy /b static.ps + 00006.txt NEU_00006.txt
copy /b static.ps + 00007.txt NEU_00007.txt
copy /b static.ps + 00008.txt NEU_00008.txt
copy /b static.ps + 00009.txt NEU_00009.txt
copy /b static.ps + 00010.txt NEU_00010.txt
usw. ...
Es gibt ca. 1000 durchnummerierte Textdateien und ein einziges static.ps-file, die je zu einem neuen Textfile zusammenkopiert werden.
Das funktioniert soweit ganz gut.
Da ich diese Aufgabe aber des öfteren und immer mit unterschiedlicher Anzahl an durchnummerierten Textdateien zu erledigen habe, hätte ich das im batch gerne automatisch (mit einer Zählfunktion?) abgearbeitet, damit ich nicht jedesmal das Batch-file neu anpassen muß.
Es soll die Anzahl der durchnummerierten Textdateien erkennen und dann den copierbefehl automatisch durcharbeiten. Habe mich schon mit der FOR Anweisung versucht, komme da aber nicht weiter.
Ob jemand helfen kann?
MfG
Yosimo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 30.12.2010 um 23:16:19 Uhr
Auf "Abgehakt" gesetzt.
Content-ID: 157716
Url: https://administrator.de/contentid/157716
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Yosimo und willkommen im Forum!
Soferne jede zu verarbeitende Datei dem Muster "0*.txt" entspricht, sollte doch eigentlich (ungetestet)
genügen. Wenn Du daraus einen Batch machen willst, jeweils %%i anstelle von %i verwenden ...
Falls Du tatsächlich die einzelnen Nummern benötigen solltest (und die Nummerierung lückenlos ist), könnte ein Batch für 5-stellige Nummern etwa so aussehen:
Grüße
bastla
Soferne jede zu verarbeitende Datei dem Muster "0*.txt" entspricht, sollte doch eigentlich (ungetestet)
for %i in (0*.txt) do copy /b static.ps + %i NEU_%i
Falls Du tatsächlich die einzelnen Nummern benötigen solltest (und die Nummerierung lückenlos ist), könnte ein Batch für 5-stellige Nummern etwa so aussehen:
@echo off & setlocal
set /a Nr=100001
:Loop
set Datei=%Nr:~-5%.txt
if not exist %Datei% goto :Done
echo Bearbeite: %Datei%
copy /b static.ps + %Datei% NEU_%Datei% >nul
set /a Nr+=1
goto :Loop
:Done
echo Fertig.
bastla
Hallo Yosimo!
Das wäre dann in etwa:
Wenn es übrigens keinen besonderen Grund dafür gibt, dass die Überschrift in einer eigenen Datei stehen muss, würde anstelle der Zeilen 3 und 5 auch ein einfaches
genügen ...
Grüße
bastla
P.S.: Der Oneliner (direkt an der Kommandozeile verwendet, ansonsten, wie angegeben, jeweils mit %%i) macht bei mir auch, was er soll ...
Das wäre dann in etwa:
@echo off & setlocal
set "CSV=D:\Die.csv"
set "Vorlage=D:\Vorbereitete einzeilige Textdatei.txt"
copy "%Vorlage%" "%CSV%" >nul
set /a Nr=100001
:Loop
set Datei=%Nr:~-5%.txt
if not exist %Datei% goto :Done
echo Bearbeite: %Datei%
copy /b static.ps + %Datei% NEU_%Datei% >nul
>>"%CSV%" echo NEU_%Datei%
set /a Nr+=1
goto :Loop
:Done
echo Fertig.
>"%CSV%" echo @Mergedtext
Grüße
bastla
P.S.: Der Oneliner (direkt an der Kommandozeile verwendet, ansonsten, wie angegeben, jeweils mit %%i) macht bei mir auch, was er soll ...
Hallo Yosimo!
Abgesehen davon ließe sich die Zeile auf
variieren und würde dann einfach alle *.txt-Dateien, die nicht mit "NEU_" beginnen, verarbeiten.
Um schließlich auch noch die .csv-Datei zu erhalten, müsste diese Zeile etwa so aussehen:
Grüße
bastla
Sehe ich das richtig, dass hier maximal nur die ersten 999 textfiles verarbeitet werden, da ab dem 1000-sten File die Bedingung (0*.txt) nicht mehr zutrifft?
Soferne Deine Dateien wie beschrieben 5-stellige Nummern haben, ginge es auch bei "0*.txt" bis zur "09999.txt" ...Abgesehen davon ließe sich die Zeile auf
for /f %i in ('dir /b *.txt^|findstr /v /b "NEU_"') do copy /b static.ps + %i NEU_%i
Um schließlich auch noch die .csv-Datei zu erhalten, müsste diese Zeile etwa so aussehen:
>D:\Die.csv echo @Mergedtextecho & for /f %i in ('dir /b *.txt^|findstr /v /b "NEU_"') do copy /b static.ps + %i NEU_%i >nul & >>D:\Die.csv echo NEU_%i
bastla