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, 3716 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
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

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
Dateien mit Liste suchen (16)

Frage von Phippu zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (24)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Netzwerke
Abisolierwerkzeug (11)

Frage von SarekHL zum Thema Netzwerke ...

Hyper-V
Langsames Netzwerk i210 LAN Karte (11)

Frage von Akcent zum Thema Hyper-V ...

Windows Server
Server 2016 - Kuriositäten (8)

Frage von certifiedit.net zum Thema Windows Server ...