%20zu%20erstellen.png)
Nehmen wir an, ich habe diese Textdatei:
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*000000000000302082890010000000000T SECTEUR SANITAIRE JIJEL 1
*000000000000306758680008500000000TIC ZIAMA MANSOURIAH 1
Die Kopfzeile und alle Zeilen enthalten 62 Zeichen. Wenn Sie sich die Kopfzeile ansehen und bei Position 42 beginnen, sehen Sie 022017
, 02
dass der aktuelle Monat und 2017
das Jahr ist; von Position 48 bis 62 (also nach 052017
) haben wir 14 Werte ( 10801801000999
) und eine 0
(Null).
Die letzte Zeile enthält die anderen Zeilen bzw. ist nicht identisch mit ihnen.
Angenommen, ich habe mehrere Dateien mit derselben Struktur und möchte das Datum im Header auf das aktuelle Datum setzen (wir befinden uns im August 2019, also möchte ich 082019
in den Header statt 052017
). Nach dem Datum ( 052017
) möchte ich die Werte entfernen, die danach kommen (in diesem Fall ( 10801801000999
) und sie durch Leerzeichen ersetzen und den Wert (0) so beibehalten, dass der Header seine 62 Zeichen behält. Kann mir jemand helfen, Code (eine Batchdatei: .bat) zu schreiben, der dies erledigt? Insbesondere, wenn ich mehrere Textdateien habe und jede davon mehr als 5000 Zeilen enthält.
Antwort1
Die folgende Charge wird
- iteriere Dateien *.txt im aktuellen Ordner,
- Benennen Sie das Original in die Erweiterung .bak um
- Header lesen, ändern und wieder auf den Originalnamen setzen
- den Rest der gespeicherten Datei kopieren
Übrigens ist SuperUser kein Skript-Schreibdienst,
ein bisschen mehr eigene Recherche und Programmierversuche wären also zu erwarten.
:: Q:\Test\2019\08\16\SU_1472064.cmd
@Echo off
:: Get MonthYear
for /f "usebackq" %%A in (`
powershell -NoP -C "(Get-Date).ToString('MMyyyy')"
`) Do Set MonthYear=%%A
:: iterate .txt files in current folder
For /f "delims=" %%F in ('Dir /B /O-D *.txt') Do Call :sub "%%~F"
Echo Job done
Goto :Eof
:Sub filename
:: Rename original file to .bak extension
Ren %1 "%~1.bak"
:: read header line
Set /p "Header=" <"%~1.bak"
Echo 1234567890123456789012345678901234567890123456789012345678901234567890
Echo _________1_________2_________3_________4_________5_________6_________7
Echo %Header%
Set "NewHeader=%Header:~0,41%%MonthYear% 0"
Echo %NewHeader%
(Echo %NewHeader%
More +1 "%~1.bak"
) > %1
Beispielausgabe:
> SU_1472064.cmd
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*0000000000003000345800185000000000000002082019 0
Job done