Verzwicktes Löschen eines Zeichens...
Hallo zusammen, ich durchforste nun seit 3 Tagen Euer Archiv - habe auch einige Anregungen gelesen allerding stecke ich jetzt fest. Vermutlich ist mein Problem recht simpel...
Ich bekomme aus einer ZFA-Software eine Datei mit einer variierenden Anzahle von Gerätenummern, jeden in einer eigenen Zeile. Die Nummern beginnen mit Hochkomma und enden mit Hochkomma und einem Komma. Hier ein kleines Beispiel:
'1041070089529691',
'15131863',
'13703509',
'1126110052504629',
Ich muss diesen Datensatz so bearbeiten, dass in der ersten Zeile "where nr in (" steht und in der letzten Zeile ";)". Das habe ich soweit alles. Was mir ums Verrecken nicht gelingt ist das Löschen des Kommas nach der letzten Gerätenummer. Im Prinzip soll das letzte Zeichen der letzten Spalte gelöscht werden (das abschließende ";)" füge ich erste später ein).
Könnt ihr mir hier weiterhelfen?
Bis jetzt habe ich es so:
@echo off
set name="ISU-VR-nicht-gefunden-Bezug.txt"
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"
set "var="
FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A
echo %var:~0,-1%>%ziel%
more +1 %name%>>%ziel%
Aber so wird ja nimmer nur das letzte Zeichen der 1. Zeile gelöscht.
Vorab schon einmal vielen Dank!
Ich bekomme aus einer ZFA-Software eine Datei mit einer variierenden Anzahle von Gerätenummern, jeden in einer eigenen Zeile. Die Nummern beginnen mit Hochkomma und enden mit Hochkomma und einem Komma. Hier ein kleines Beispiel:
'1041070089529691',
'15131863',
'13703509',
'1126110052504629',
Ich muss diesen Datensatz so bearbeiten, dass in der ersten Zeile "where nr in (" steht und in der letzten Zeile ";)". Das habe ich soweit alles. Was mir ums Verrecken nicht gelingt ist das Löschen des Kommas nach der letzten Gerätenummer. Im Prinzip soll das letzte Zeichen der letzten Spalte gelöscht werden (das abschließende ";)" füge ich erste später ein).
Könnt ihr mir hier weiterhelfen?
Bis jetzt habe ich es so:
@echo off
set name="ISU-VR-nicht-gefunden-Bezug.txt"
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"
set "var="
FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A
echo %var:~0,-1%>%ziel%
more +1 %name%>>%ziel%
Aber so wird ja nimmer nur das letzte Zeichen der 1. Zeile gelöscht.
Vorab schon einmal vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189222
Url: https://administrator.de/contentid/189222
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
17 Kommentare
Neuester Kommentar
Hallo OlliMuc und willkommen im Forum. und bitte schreibe doch nicht als Titel "Batch Problem
Die Fungtionierende Version:
Das meiste kommt übrigens von hier:
Über Batch letzte Zeile in TXT ersetzen bzw löschen
Grüße
Darkprodukt
Die Fungtionierende Version:
@echo off & setlocal
set name="ISU-VR-nicht-gefunden-Bezug.txt"
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"
set "Bak=bak"
set "Ret=%temp%\ret"
set Anzahl=0
set "var="
FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A
set "var=%var:,=%"
echo %var%>%ziel%
more +1 %name%>>%ziel%
FOR /F "delims=" %%A in ('type %name%') do set LZeile=%%A
set "LZeile=%LZeile:,=%"
for /f "delims=:" %%i in ('findstr /n "^" "%ziel%"') do set Anzahl=%%i
set /a MitCR=%Anzahl%-2
set /a OhneCR=%Anzahl%-1
if %MitCR% leq 0 (
echo Die Datei "%Datei%" enthaelt zu wenig Zeilen!
goto :eof
)
move "%ziel%" "%ziel%.%Bak%"
echo\>%Ret%
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%ziel%.%Bak%"') do (
if %%i leq %MitCR% (>>"%ziel%" echo\%%j)
if %%i equ %OhneCR% (
if defined LZeile (
set /p=%LZeile%<%Ret%>>"%ziel%"
) else (
set /p=%%j<%Ret%>>"%ziel%"
)
)
)
Das meiste kommt übrigens von hier:
Über Batch letzte Zeile in TXT ersetzen bzw löschen
Grüße
Darkprodukt
Hoi,
bye
Karo
@echo off
Setlocal EnableDelayedExpansion
set name="ISU-VR-nicht-gefunden-Bezug.txt"
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"
set var
set /A COUNT=0
set /A COUNT2=0
FOR /F "delims=" %%i in ('type %name%') do (
set /A COUNT=!COUNT! + 1
)
FOR /F "delims=" %%A in ('type %name%') do (
SET VAR=%%A
SET /A COUNT2=!COUNT2! + 1
REM ECHO !COUNT2! von !COUNT!
IF !COUNT2! NEQ %COUNT% (
IF !COUNT2! EQU 1 set var=where nr in ^(!var!>%ziel%
echo !var!>>%ziel%
) ELSE (
echo !var:~0,-1!;^)>>%ziel%
)
)
bye
Karo
Ich habe die angepasste Karo-Variante wieder gelöscht,
da du ja sagtest das "where nr in (...;) etc." von einem anderen Programm gemacht werden und
das daher unnötig ist. Oder ist das eine andere Batch die nur dazu dient?
Und das "=" ist nicht nötig.
Wennschon so:
Auserdem reicht es schon, wenn du Zeile 19 durch
ersetzt.
Grüße
Darkprodukt
da du ja sagtest das "where nr in (...;) etc." von einem anderen Programm gemacht werden und
das daher unnötig ist. Oder ist das eine andere Batch die nur dazu dient?
Und das "=" ist nicht nötig.
Wennschon so:
set "var=!var:,=!"
Auserdem reicht es schon, wenn du Zeile 19 durch
echo !var:,=!;^)>>%ziel%
Grüße
Darkprodukt