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

Batchverarbeitung suchen und ersetzen ohne Zusatztools

Frage Entwicklung Batch & Shell

Mitglied: cqash

cqash (Level 1) - Jetzt verbinden

22.04.2010, aktualisiert 18.10.2012, 3708 Aufrufe, 9 Kommentare

Hallo zusammen,

ich habe folgenden Problem: Ich verarbeite eine CSV-Datei und muss die letzte Zeile in der Datei um einen String erweitern, also quasi suchen und ersetzen. Das Batchskript fügt dann die Ausführungszeit an die Zeile an.

Beispiel:
Letze Zeile in der CSV-Datei (vorher): 2010-04-20;07:15:23;
Letze Zeile in der CSV-Datei (nachher): 2010-04-20;07:15:23;16:53:24;

Ich hoffe jemand kann mir bei dem Thema helfen, ich bin dankbar für jede Idee.

Gruß cqash
Mitglied: cqash
22.04.2010 um 20:28 Uhr
Ja, habe diverse Einträge von "bastla" durchgelesen und versucht das in meinem Skript umzusetzen, leider bisher ohne Erfolg.
Bitte warten ..
Mitglied: bastla
22.04.2010 um 20:42 Uhr
Hallo cqash!

Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
>>D:\Datei.csv 16:53:24;
Problem: Danach gibt's die Zeilenschaltung ...
Soferne VBScript nicht unter "nogo" fällt:
01.
@echo off & setlocal 
02.
set "Datei=D:\Datei.csv" 
03.
set "Zusatz=16:53:24;" 
04.
 
05.
set A=%temp%\AppendIt.vbs 
06.
>%A% echo Set fso=CreateObject("Scripting.FileSystemObject"):D=WScript.Arguments(0):T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write T ^& WScript.Arguments(1) 
07.
 
08.
cscript //nologo %A% "%Datei%" "%Zusatz%"
Grüße
bastla
Bitte warten ..
Mitglied: cqash
22.04.2010 um 20:54 Uhr
Hi bastla,

das ist leider auch eins der Probleme, VB, bzw VBS dürfen wir nicht auf dem Server verwenden (Unternehmensrichtlinien), nur BATCH oder perl, wobei ich perl eigentlich vermeiden will. Hast Du vielleicht noch eine weitere Idee. Dir scheint das ja alles so aus den Fingern zu fließen. Schon mal vielen Dank für weitere Ideen/Lösungen.

Gruß cqash
Bitte warten ..
Mitglied: bastla
22.04.2010 um 20:58 Uhr
Hallo cqash!

Na gut - dann vielleicht so:
01.
@echo off & setlocal 
02.
set "Datei=D:\Datei.csv" 
03.
set "Zusatz=16:53:24;" 
04.
 
05.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Letzte=%%i" 
06.
move "%Datei%" "%temp%\Datei.txt" 
07.
findstr /v /b "%Letzte%" "%temp%\Datei.txt">"%Datei%" 
08.
<nul >>"%Datei%" set /p=%Letzte%%Zusatz% 
09.
del "%temp%\Datei.txt"
Voraussetzung: Die letzte Zeile kommt mit dem selben Inhalt nicht nochmals in der Datei vor ...

[Edit] Zeile 9 zum Aufräumen hinzugefügt [/Edit]
[Edit2] Jetzt so, wie's vorher schon gemeint war ... [/Edit2]

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
22.04.2010 um 21:08 Uhr
Zitat von bastla:
Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
>>D:\Datei.csv 16:53:24; 
> 
Problem: Danach gibt's die Zeilenschaltung ...

Das ließe sich ja verhindern:
<NUL >>D:\Datei.csvt set /P Dummy=15:53:24;
Gruß
LotPings
Bitte warten ..
Mitglied: bastla
22.04.2010 um 21:16 Uhr
@LotPings
Bin ja inzwischen auch schon dort - und auch ohne die Voraussetzung, dass die letzte Zeile keine Zeilenschaltung beinhalten darf ...

Grüße
bastla
Bitte warten ..
Mitglied: cqash
23.04.2010 um 08:03 Uhr
Danke für die vielen Antworten, leider funktioniert es noch nicht ganz richtig. Vielleicht hilft es doch, wenn ich Euch mal den gesamten Code zur Verfügung stelle.

01.
@echo off 
02.
SETLOCAL ENABLEEXTENSIONS 
03.
SETLOCAL DISABLEDELAYEDEXPANSION 
04.
Set log_folder=C:\ 
05.
Set log_file=test.csv 
06.
Set mm=%DATE:~3,2% 
07.
Set dd=%DATE:~0,2% 
08.
Set yyyy=%DATE:~6,4% 
09.
Set stunde=%time:~0,2% 
10.
If "%stunde:~0,1%"==" " set stunde=0%stunde:~1,1% 
11.
Set minute=%time:~3,2% 
12.
Set sekunde=%time:~6,2% 
13.
 
14.
if %stunde% LSS 12 (goto start) else (goto end) 
15.
 
16.
:start 
17.
ECHO %dd%.%mm%.%yyyy%;%stunde%:%minute%:%sekunde%;>> %log_folder%%log_file% 
18.
goto finish 
19.
 
20.
:end 
21.
for /f "usebackq delims=" %%i in ("%log_folder%%log_file%") do set "Letzte=%%i"  
22.
move "%log_folder%%log_file%" "%temp%\Datei.csv"  
23.
findstr /v /b "%Letzte%" "%temp%\Datei.csv">"%Datei%"  
24.
<nul >>"%log_folder%%log_file%" set /p=%Letzte%%stunde%:%minute%:%sekunde%; 
25.
del "%temp%\Datei.csv" 
26.
goto finish 
27.
 
28.
:finish 
29.
exit
Bitte warten ..
Mitglied: bastla
23.04.2010 um 09:06 Uhr
Hallo cqash!
leider funktioniert es noch nicht ganz richtig
ist eine mäßig aussagekräftige Fehlerbeschreibung - da hilft der gepostete Code schon mehr ...

Ersetze die Zeilen 20 bis 26 durch:
01.
:end 
02.
for /f "usebackq delims=" %%i in ("%log_folder%%log_file%") do set "Letzte=%%i"  
03.
move "%log_folder%%log_file%" "%temp%\Datei.csv"  >nul 
04.
findstr /v /b "%Letzte%" "%temp%\Datei.csv">"%log_folder%%log_file%"  
05.
>>"%log_folder%%log_file%" echo %Letzte%%stunde%:%minute%:%sekunde%; 
06.
del "%temp%\Datei.csv" 
07.
goto finish
Grüße
bastla

P.S.: Vielleicht solltest Du überhaupt erst am Nachmittag testen ...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Suchen, Ersetzen und Entfernen von Dateiinhalten auf Textbasis (1)

Frage von DanteManor zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (1)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...