Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 30.12.2010 um 23:16:19 Uhr
Auf "Abgehakt" gesetzt.
GELÖST

In Batch-file durchnummerierte Dateinamen verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: Yosimo

Yosimo (Level 1) - Jetzt verbinden

29.12.2010, aktualisiert 30.12.2010, 4530 Aufrufe, 9 Kommentare

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?

Mit freundlichen Grüßen
Yosimo
Mitglied: bastla
29.12.2010 um 14:54 Uhr
Hallo Yosimo und willkommen im Forum!

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
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:
01.
@echo off & setlocal 
02.
set /a Nr=100001 
03.
:Loop 
04.
set Datei=%Nr:~-5%.txt 
05.
if not exist %Datei% goto :Done 
06.
echo Bearbeite: %Datei% 
07.
copy /b static.ps + %Datei% NEU_%Datei% >nul 
08.
set /a Nr+=1 
09.
goto :Loop 
10.
 
11.
:Done 
12.
echo Fertig.
Grüße
bastla
Bitte warten ..
Mitglied: Yosimo
29.12.2010 um 18:01 Uhr
Hallo bastla,

das ging aber fix, vielen herzlichen Dank!!

Der Einzeiler funktioniert nicht - macht aber nichts: das zweite Batch-Script läuft in meiner Testumgebung tadellos.

Das macht Hunger nach mehr: Mein nächster Schritt ist, die Batch-Datei so zu ergänzen, dass die neuen Dateinamen in einer weiteren Textdatei (CSV-Datei) 1-spaltig aufgelistet werden.


Spaltentitel
NEU_00001.txt
NEU_00002.txt
NEU_00003.txt
NEU_00004.txt
usw....


Vielleicht lässt sich diese ja auch automatisch erzeugen (mache ich momentan händisch in Excel).
Und wenn man dieser Spalte noch einen beliebigen Spaltentitel hinzufügen konnte (evtl. aus einer vorbereiteten einzeiligen Textdatei?), dann wäre das richtig großartig.

Vielen Dank nochmal,
Yosimo
Bitte warten ..
Mitglied: bastla
29.12.2010 um 20:12 Uhr
Hallo Yosimo!

Das wäre dann in etwa:
01.
@echo off & setlocal 
02.
set "CSV=D:\Die.csv" 
03.
set "Vorlage=D:\Vorbereitete einzeilige Textdatei.txt" 
04.
 
05.
copy "%Vorlage%" "%CSV%" >nul 
06.
set /a Nr=100001 
07.
:Loop 
08.
set Datei=%Nr:~-5%.txt 
09.
if not exist %Datei% goto :Done 
10.
echo Bearbeite: %Datei% 
11.
copy /b static.ps + %Datei% NEU_%Datei% >nul 
12.
>>"%CSV%" echo NEU_%Datei% 
13.
set /a Nr+=1 
14.
goto :Loop 
15.
 
16.
:Done 
17.
echo Fertig.
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
>"%CSV%" echo @Mergedtext
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 ...
Bitte warten ..
Mitglied: Yosimo
29.12.2010 um 22:55 Uhr
Ist ja der Wahnsinn, das klappt ja prima!
Vielen Dank bastla.

Ist es denn noch möglich, unabhängig von der "Vorbereitete einzeilige Textdatei.txt" zu werden? Also dass man den Spaltentitel innerhalb der Batch-Datei erzeugt und keine externe Textdatei mehr braucht? Der Spaltentitel soll mit einem @-Zeichen beginnen, z.B. @Mergedtext.

Dazu habe ich jetzt mit der Umgebungsvariablen "Vorlage" experimentiert, aber die meldet immer, dass Sie eine Datei benötigt. Außerdem weiß ich nicht wie ich den Zeilenumbruch nach dem Spaltentitel gestalten muss.

Vielen herzlichen Dank nochmal,
Yosimo



>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
>"%CSV%" echo Spaltentitel

Ach ich Trottel, da steht es ja. Vor lauter Euphorie glatt übersehen.
DAS ist es - Suuuper.

Danke, das wars denn für heute.
Bitte warten ..
Mitglied: bastla
29.12.2010 um 23:04 Uhr
Hallo Yosimo!

Die Variante ohne Datei hatte ich zwischenzeitlich schon ergänzt - also einfach die Zeilen 3 und 5 durch
>"%CSV%" echo @Mergedtext
ersetzen.

Der Zeilenumbruch "passiert" eigentlich von selbst (es ist in Batch aufwändiger, eine Zeile ohne Umbruch zu schreiben) ...

Grüße
bastla
Bitte warten ..
Mitglied: Yosimo
29.12.2010 um 23:08 Uhr
Hallo bastla,

hab's gerade gemerkt, sorry und vielen Dank!

Grüße
Yosimo
Bitte warten ..
Mitglied: Yosimo
29.12.2010 um 23:24 Uhr
Hallo bastla,

Zitat von bastla:
P.S.: Der Oneliner (direkt an der Kommandozeile verwendet, ansonsten, wie angegeben, jeweils mit %%i) macht bei mir auch, was er
soll ...


Das mit dem oneliner werde ich demnächst nochmal näher untersuchen.
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?

Grüße
Yosimo
Bitte warten ..
Mitglied: bastla
29.12.2010 um 23:34 Uhr
Hallo Yosimo!
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
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:
>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
Grüße
bastla
Bitte warten ..
Mitglied: Yosimo
30.12.2010 um 10:23 Uhr
Hallo bastla,

ja, der Einzeiler funktioniert genauso. Ich hatte ihn anfangs aus der Batch-Datei gestartet ohne %%i anstelle von %i zu verwenden.
Die Pfadangabe für die CSV-Datei habe ich rausgenommen, da ich alle Batch-Aufgaben im gleichen Directory ausführe, diese aber in verschiedenen Verzeichnispfaden liegen.

Grüße und Dank
Yosimo
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateinamen umschreiben batch (5)

Frage von jocheng zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...