Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst Datum bzw. Textstellen in drei TXT-Datei ändern (automatisch oder manuell)

Mitglied: Busfahrer

Busfahrer (Level 1) - Jetzt verbinden

14.04.2008, aktualisiert 16.04.2008, 4894 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe folgendes Problem:
ich muss/soll/will in drei TXT-Datei einen gewissen Wert (in dem Fall das Datum (JJJMMTT)) ändern:
Entweder, dass man das Datum beim Starten des Batches eingeben kann, oder dass das aktuelle Datum automatisch in die Datei geschrieben wird.

Die Datei sieht z. B. folgendermaßen aus:
.
.
.
rt60_asta*_1.*:rt60_asta_20080409_001.pdf
rt60_asta*_2.*:rt60_asta_20080409_002.pdf
rt60_asta*_3.*:rt60_asta_20080409_003.pdf
rt60_asta*_4.*:rt60_asta_20080409_004.pdf
.
.
.
Es werden die Positionen z. T. erweitert bzw. es kommen neue hinzu.

Meine letzten Batch-Programmierungen (simple) liegen schon einige Jahre zurück.
Hat mir jemand einen Tipp bzw. einen Ansatzpunkt?

Der Inhalt der Zeile darf nicht verändert werden (außer das Datum natürlich )
da diese Datei für die Umbenennung mehrerer Dateien dient.

Vielen Dank schon mal im Voraus.

Gruß,
Tom
Mitglied: bastla
14.04.2008 um 15:29 Uhr
Hallo Busfahrer und willkommen im Forum!

Soferne die Ersetzung für jede Zeile erfolgen soll und die Struktur der einzelnen Zeilen (hinsichtlich des Trennzeichens "_" und der sich daraus ergebenden Position des Datums als 5. Bestandteil) immer gleich ist, etwa so:
01.
@echo off & setlocal 
02.
set "Datei=D:\Textdatei.txt" 
03.
set "Bak=%Datei%.bak" 
04.
move "%Datei%" "%Bak%" 
05.
 
06.
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: " 
07.
if defined Datum goto :DoIt 
08.
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2% 
09.
 
10.
:DoIt 
11.
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%"
Die Eingabe des Datums wird nicht weiter geprüft - nur, falls keine Eingabe erfolgte, wird das heutige Datum verwendet.

Die Originaldatei bleibt als Kopie namens "Dateiname.Typ.bak" erhalten.
Generell ist allerdings anzumerken, dass für Ersetzungen besser ein Tool wie etwa "sed" oder zumindest VBScript zu empfehlen wäre, da Batch für das Behandeln von einzelnen Zeichen/Teilstrings nur bedingt geeignet ist.

Grüße
bastla
Bitte warten ..
Mitglied: Busfahrer
14.04.2008 um 21:04 Uhr
Hallo bastla,

Vielen Dank für die schnelle Hilfe.

Die Batch funktioniert soweit.
Das Problem ist, dass ich drei TXT-Dateien habe mit, im Prinzip, gleichen Inhalt, aber anderem Dateinamen.

Ich hab mir auch mal "sed" angeschaut. Blick da blos noch nicht ganz durch...

Puh, am Besten ich fang glaub nochmal bei null an.
Hab mich seit über 10 Jahren nicht mehr mit Batch schreiben beschäftigt.



Ich hab im Netz nichts wirklich brauchbares zu meinem Problem gefunden.
Deshalb versuche ich es hier mal.

Danke.

Gruß,
Tom
Bitte warten ..
Mitglied: bastla
14.04.2008 um 21:46 Uhr
Hallo Busfahrer!

Für 3 Dateien brauchen wir noch ein Unterprogramm:
01.
@echo off & setlocal 
02.
 
03.
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: " 
04.
if defined Datum goto :DoIt 
05.
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2% 
06.
 
07.
:DoIt 
08.
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt") do call :ProcessFile "%%~i" 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set "Datei=%~1" 
13.
set "Bak=%Datei%.bak" 
14.
move "%Datei%" "%Bak%" 
15.
 
16.
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%" 
17.
goto :eof
Zu "sed": Für eine Deiner Dateien ginge das etwa so:
01.
move "D:\Textdatei1.txt" "D:\Textdatei1.txt.bak" & sed 's/20080409/20080414/g' "D:\Textdatei1.txt.bak">"D:\Textdatei1.txt"
Anmerkung: Die Anführungszeichen sind in diesem Beispiel alle überflüssig, aber schaden nicht, und sollten Leerzeichen in Pfad- oder Dateinamen ins Spiel kommen, brauchst Du sie tatsächlich.

"sed"-Info: Du könntest zB hier beginnen (und Dir vor allem auch die sedFAQ ansehen) ...

Grüße
bastla
Bitte warten ..
Mitglied: Busfahrer
16.04.2008 um 08:11 Uhr
Hallo bastla,

Batch funktioniert soweit wunderbar. Danke dafür.
Jetzt ergibt sich eine andere Schwierigkeit:

In einer neuen Datei sieht der Inhalt jetzt folgendermaßen aus:
.
.
.
rt60_asta*_1.*:plott klein_!!_rt60_asta_20080409_001.pdf
rt60_asta*_2.*:plott klein_!!_rt60_asta_20080409_002.pdf
rt60_asta*_3.*:plott klein_!!_rt60_asta_20080409_003.pdf
rt60_asta*_4.*:plott klein_!!_rt60_asta_20080409_004.pdf
.
.
.
D. h. es kamen nochmal zwei "_" dazu.
Wie kann ich diesen zweiten Prozess in die Batch einarbeiten?
Ich hab mal ein bischen experimentiert, allerdings macht der mir immer nur die erste Datei.
Der Rest wird ignoriert....

Vielen Dank schon mal.

Gruß,
Tom
Bitte warten ..
Mitglied: bastla
16.04.2008 um 10:17 Uhr
Hallo Busfahrer!

Wenn es auch Datumseinträge an Position 7 (anstatt 5) gibt, verwenden wir eben verschiedene Unterprogramme:
01.
@echo off & setlocal 
02.
 
03.
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: " 
04.
if defined Datum goto :DoIt 
05.
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2% 
06.
 
07.
:DoIt 
08.
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt") do call :ProcessFile_5 "%%~i" 
09.
for %%i in ("D:\Textdatei4.txt") do call :ProcessFile_7 "%%~i" 
10.
goto :eof 
11.
 
12.
:ProcessFile_5 
13.
set "Datei=%~1" 
14.
set "Bak=%Datei%.bak" 
15.
move "%Datei%" "%Bak%" 
16.
 
17.
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%" 
18.
goto :eof 
19.
 
20.
:ProcessFile_7 
21.
set "Datei=%~1" 
22.
set "Bak=%Datei%.bak" 
23.
move "%Datei%" "%Bak%" 
24.
 
25.
for /f "usebackq tokens=1-7* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%%e_%%f_%Datum%_%%h>>"%Datei%" 
26.
goto :eof
Nach diesem Prinzip kannst Du auch andere Anordnungen berücksichtigen.
Als Alternative: Doch "sed" verwenden, etwa
01.
@echo off & setlocal 
02.
 
03.
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: " 
04.
if defined Datum goto :DoIt 
05.
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2% 
06.
 
07.
:DoIt 
08.
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt" "D:\Textdatei4.txt") do call :ProcessFile "%%~i" 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set "Datei=%~1" 
13.
set "Bak=%Datei%.bak" 
14.
move "%Datei%" "%Bak%" 
15.
 
16.
"C:\Pfad zu sed\sed" 's/20080409/%Datum%/g' "%Bak%">"%Datei%" 
17.
goto :eof
Damit wird das Datum unabhängig von seiner Position in der Zeile ersetzt.

Grüße
bastal
Bitte warten ..
Mitglied: Busfahrer
16.04.2008 um 12:51 Uhr
Hallo bastla,

Danke dir.
Das Script hat funktioniert!
Ich denke/hoffe ich komme dann damit soweit alleine zurecht, hab ja jetzt ne Vorlage.
Und reinarbeiten in die ganze Geschichte muss ich mich dann ja eh.


Ich kann dir leider nichts dafür geben, außer der Gewissenheit, dass du jemandem sehr geholfen hast


Gruß,
Tom
Bitte warten ..
Ähnliche Inhalte
Video & Streaming

Drei Webseiten auf drei Monitoren automatisch im Vollbild starten

Frage von BirdyBVideo & Streaming9 Kommentare

Hallo zusammen, ich bräuchte bitte einen Rat von euch: Derzeit hängen in unserer Einsatzzentrale 3 Statusmonitore nebeneinander. Jeder von ...

Batch & Shell

Einen Wert manuell eingeben und in einer Datei ein bestimmtest Wort ändern

gelöst Frage von ThunderSmileBatch & Shell2 Kommentare

Hallo Zusammen, ich hoffe ihr könnt mir helfen. Ich würde gerne ein Skript schreiben, dass folgendes kann: - Überprüfung ...

CPU, RAM, Mainboards

Arbeitsspeicher Taktfrequenz automatisch oder manuell

Frage von MarkowitschCPU, RAM, Mainboards15 Kommentare

Hallo liebe Techniker, ich habe folgende Konfig : Mainboard : ASUS ROG Strix Z370-H CPU : Intel Core i7-8700K ...

Batch & Shell

Mittels Batch alle .txt Dateien eines Verzeichnises ändern

gelöst Frage von mttspeedyBatch & Shell10 Kommentare

Ich habe ca. 10.000 TXT-Dateien in einem Verzeichnis und möchte für alle folgendes durchführen: -> suchen in jeder Datei ...

Neue Wissensbeiträge
Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 6 StundenMultimedia & Zubehör

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Windows Server

Windows Server Backup schlögt Fehl -Lösung 2008-2016

Tipp von BiGnoob vor 8 StundenWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden fehler: lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 21 StundenHumor (lol)3 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Batch & Shell

Windows 10 Heimnetzgruppe abgeschaft. Ein Script für einfache Netzwerk - Freigabe im Heimnetzwerk

Anleitung von treehe vor 1 TagBatch & Shell3 Kommentare

Anleitung für eine einfache Netzwerkfreigabe unter Windows 10 Wie weiter hab mal ein kleines CMD - Script gebastelt. Womit ...

Heiß diskutierte Inhalte
Netzwerke
IP-Adresse am zweiten Domänencontroller fest vergeben - Server verschwunden
gelöst Frage von DanielG1974Netzwerke25 Kommentare

Ich hab ein Problem, was ich bisher noch nicht erlebt habe Ich habe erfolgreich einen zweiten Server mit ActiveDirectory ...

Windows Server
Windows Server 2012 - Update - Beim Booten bleibt der Server beim Windows Zeichen stehen
Frage von KeilbachWindows Server15 Kommentare

Hallo Zusammen, ich grüße euch, mein Name ist Michele. Ich bin hier ganz Neu - da ich einfach nicht ...

Windows Tools
Virtueller Drucker gesucht (Schnittstelle: USB oder Seriell)
Frage von chrisButterflyWindows Tools14 Kommentare

Hi, ich suche einen virtuellen Drucker, den ich über eine USB oder serieller Schnittstelle ansprechen kann. Dieser Drucker soll ...

Firewall
Sophos SG 125 nicht mehr erreichbar
Frage von GwaihirFirewall14 Kommentare

Hallo zusammen, ausgerechnet über die Feiertage stimmt etwas mit meiner Firmen-Firewall nicht. Es ist eine Sophos SG 125 und ...