Inhalt einer Datei an immer der gleichen Stelle ändern per Batch oder VBS
Hallo Community,
ich hoffe ihr könnt mir bei einem Problem helfen wo ich nicht weiterkomme. Folgende Ausgangssituation:
Ein Partner schickt uns eine DFÜ, nennen wir Sie Daten_20121116134034.dat. Der Dateiname fangt immer gleich an und hat am Schluss einen Zeitstempel. Den Inhalt dieser Datei muss ich an immer der gleichen Stelle in der 1. Zeile ändern. Das ganze soll per Batch oder VBS laufen, so dass ich es im Hintergrund als Task einbauen kann.
So sieht die erste Zeile der Datei aus:
@@PHBORD128 0128003500107 TRENTO1 TRENTO1
Es geht um den Text "TRENTO1", nur soll nicht der erste Wert geändert werden, dieser soll gleich bleiben. Nur der zweite, im obigen Beispiel fett markierte Wert soll geändert (ersetzt) werden. Stattdessen soll dann dort stehen NEUWER1.
Falls möglich soll die Datei direkt geändert werden, wenn nicht ist mir aber auch geholfen wenn die Datei neu erstellt wird und das Original gelöscht wird (Sicherungskopie wird schon beim Eintreffen der DFÜ per Skript gemacht).
Bitte um Tips wie ich das hinkriege. Danke!
ich hoffe ihr könnt mir bei einem Problem helfen wo ich nicht weiterkomme. Folgende Ausgangssituation:
Ein Partner schickt uns eine DFÜ, nennen wir Sie Daten_20121116134034.dat. Der Dateiname fangt immer gleich an und hat am Schluss einen Zeitstempel. Den Inhalt dieser Datei muss ich an immer der gleichen Stelle in der 1. Zeile ändern. Das ganze soll per Batch oder VBS laufen, so dass ich es im Hintergrund als Task einbauen kann.
So sieht die erste Zeile der Datei aus:
@@PHBORD128 0128003500107 TRENTO1 TRENTO1
Es geht um den Text "TRENTO1", nur soll nicht der erste Wert geändert werden, dieser soll gleich bleiben. Nur der zweite, im obigen Beispiel fett markierte Wert soll geändert (ersetzt) werden. Stattdessen soll dann dort stehen NEUWER1.
Falls möglich soll die Datei direkt geändert werden, wenn nicht ist mir aber auch geholfen wenn die Datei neu erstellt wird und das Original gelöscht wird (Sicherungskopie wird schon beim Eintreffen der DFÜ per Skript gemacht).
Bitte um Tips wie ich das hinkriege. Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 194473
Url: https://administrator.de/forum/inhalt-einer-datei-an-immer-der-gleichen-stelle-aendern-per-batch-oder-vbs-194473.html
Ausgedruckt am: 23.12.2024 um 16:12 Uhr
18 Kommentare
Neuester Kommentar
Hallo B-Real und willkommen im Forum!
Soferne der Aufbau dieser ersten Zeile immer gleich bleibt, völlig ungetestet etwa so:
Grüße
bastla
[Edit] Fehlendes Anführungszeichen und Token %%k in Zeile 9 ergänzt[/Edit]
Soferne der Aufbau dieser ersten Zeile immer gleich bleibt, völlig ungetestet etwa so:
@echo off & setlocal
set "Ordner=D:\Neue Daten"
set "Name=Daten_*.dat"
set "TextNeu=NEUWER1"
for /f "delims=" %%i in ('dir /b "%Ordner%\%Name%"') do set "Datei=%Ordner%\%%i"
set /p Zeile1=<"%Datei%"
move "%Datei%" "%temp%\Daten_"
for /f "tokens=1-3" %%i in ("%Zeile1%") do >"%Datei%" echo %%i %%j %%k %TextNeu%
>>"%Datei%" more +1 "%temp%\Daten_"
del "%temp%\Daten_"
bastla
[Edit] Fehlendes Anführungszeichen und Token %%k in Zeile 9 ergänzt[/Edit]
moin B-Real,
Du hast in der Zweiten Forschleife nach "%datei% ein fehlendes Anführungszeichen, somit interpretiert der Befehlsinterpreter den Befehl als irgendetwas nicht interpretierbares.
Das könnte in etwa so aussehen. Ich schreibs jetzt trotzdem hin, weil ichs "schon" fertig hatte:
edit ein do eingefügt /edit
Gruß Phil
Du hast in der Zweiten Forschleife nach "%datei% ein fehlendes Anführungszeichen, somit interpretiert der Befehlsinterpreter den Befehl als irgendetwas nicht interpretierbares.
Das könnte in etwa so aussehen. Ich schreibs jetzt trotzdem hin, weil ichs "schon" fertig hatte:
@echo off
setlocal
for %%i in ("D:\Ordner\Daten_20????????????.dat") do call :ersetzen "%%~i"
exit /b
:ersetzen
set "Line1="
set /p Line1=<%1
if "%Line:~-7%" neq "NEUWER1" exit /b
ren %1 "%~n.old"
>%1 (
echo %Line:~0,-8% NEUWER1
more +1 "%~dpn.old"
)
del "%~dpn.old"
exit /b
edit ein do eingefügt /edit
Gruß Phil
Hallo B-Real!
Wie schon von PH angemerkt fehlte ein Anführungszeichen - ist oben ergänzt.
Grüße
bastla
Wie schon von PH angemerkt fehlte ein Anführungszeichen - ist oben ergänzt.
Außerdem ist mir nicht ganz klar woher das Skript wissen soll dass es TRENTO1 ersetzen soll
Da ich einen immer gleichen Aufbau der Zeile vorausgesetzt hatte, wird einfach der vierte Teil (auf Basis "Trennung durch Leerzeichen") der Zeile durch den neuen Wert ersetzt ...Grüße
bastla
Hi,
wie gesagt, geht der for-Befehl interaktiv nur mit einem %-Zeichen.
Mach doch eine DOS-Box auf und zieh per Drag&Drop die von dir geändert test.bat dort rein. Dann siehst du die Meldung
(und ändere event. übergangsweise zum Debuggen auch noch "@echo off" in "@echo on" damit du mehr siehst)
Gruß Andi
P.S. du kannst auch mal deine test.bat hier posten damit man dir helfen kann
wie gesagt, geht der for-Befehl interaktiv nur mit einem %-Zeichen.
Mach doch eine DOS-Box auf und zieh per Drag&Drop die von dir geändert test.bat dort rein. Dann siehst du die Meldung
(und ändere event. übergangsweise zum Debuggen auch noch "@echo off" in "@echo on" damit du mehr siehst)
Gruß Andi
P.S. du kannst auch mal deine test.bat hier posten damit man dir helfen kann
Hi B_Re0al,
das Skript von pieh-eidsch geht davon aus, dass die Zeile 1 mit dem String "TRENTO1" endet. Wenn da noch was dahinter steht ("Da stehen halt dann hinten dran in der 1. Zeile noch mehr Daten zum Absender.") dann kann das so nicht klappen.
Das muss zuerst geklärt werden, bevor man dir Lösungsvorschläge machen kann.
(ich glaube auch die Zeile 11 im Skript müsste wie folgt aussehen: ren %1 "%~n1.old")
Gruß Andi
das Skript von pieh-eidsch geht davon aus, dass die Zeile 1 mit dem String "TRENTO1" endet. Wenn da noch was dahinter steht ("Da stehen halt dann hinten dran in der 1. Zeile noch mehr Daten zum Absender.") dann kann das so nicht klappen.
Das muss zuerst geklärt werden, bevor man dir Lösungsvorschläge machen kann.
(ich glaube auch die Zeile 11 im Skript müsste wie folgt aussehen: ren %1 "%~n1.old")
Gruß Andi
Ja, das hättest du wohl mal machen sollen
Ist denn der Wert TRENTO1 konstant oder kann sich das auch ändern ?
Andi
Hallo B-Real!
Dann hatte mein Ansatz ohenehin nie eine Chance ...
Versuch es damit:
Grüße
bastla
Dann hatte mein Ansatz ohenehin nie eine Chance ...
Versuch es damit:
@echo off & setlocal
set "Ordner=D:\Neue Daten"
set "Name=Daten_*.dat"
set "TextAlt=TRENTO1 TRENTO1"
set "TextNeu=TRENTO1 NEUWER1"
for /f "delims=" %%i in ('dir /b "%Ordner%\%Name%"') do set "Datei=%Ordner%\%%i"
set /p Zeile1=<"%Datei%"
move "%Datei%" "%temp%\Daten_"
call set "Zeile1Neu=%%Zeile1:%TextAlt%=%TextNeu%%%"
>"%Datei%" echo %Zeile1Neu%
>>"%Datei%" more +1 "%temp%\Daten_"
del "%temp%\Daten_"
bastla