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
GELÖST

Verzwicktes Löschen eines Zeichens...

Frage Entwicklung Batch & Shell

Mitglied: OlliMuc

OlliMuc (Level 1) - Jetzt verbinden

07.08.2012, aktualisiert 15:29 Uhr, 3281 Aufrufe, 17 Kommentare

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!

Mitglied: Darkprodukt
07.08.2012, aktualisiert um 16:27 Uhr
Hallo OlliMuc und willkommen im Forum. und bitte schreibe doch nicht als Titel "Batch Problem

Die Fungtionierende Version:
01.
@echo off & setlocal 
02.
set name="ISU-VR-nicht-gefunden-Bezug.txt" 
03.
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt" 
04.
set "Bak=bak" 
05.
set "Ret=%temp%\ret" 
06.
set Anzahl=0 
07.
set "var=" 
08.
 
09.
FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A 
10.
set "var=%var:,=%" 
11.
echo %var%>%ziel% 
12.
more +1 %name%>>%ziel% 
13.
 
14.
FOR /F "delims=" %%A in ('type %name%') do set LZeile=%%A 
15.
set "LZeile=%LZeile:,=%" 
16.
 
17.
for /f "delims=:" %%i in ('findstr /n "^" "%ziel%"') do set Anzahl=%%i 
18.
set /a MitCR=%Anzahl%-2 
19.
set /a OhneCR=%Anzahl%-1 
20.
 
21.
if %MitCR% leq 0 ( 
22.
    echo Die Datei "%Datei%" enthaelt zu wenig Zeilen! 
23.
    goto :eof 
24.
25.
 
26.
move "%ziel%" "%ziel%.%Bak%" 
27.
echo\>%Ret% 
28.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%ziel%.%Bak%"') do ( 
29.
    if %%i leq %MitCR% (>>"%ziel%" echo\%%j) 
30.
    if %%i equ %OhneCR% ( 
31.
        if defined LZeile ( 
32.
            set /p=%LZeile%<%Ret%>>"%ziel%" 
33.
        ) else ( 
34.
            set /p=%%j<%Ret%>>"%ziel%" 
35.
36.
37.
)
Das meiste kommt übrigens von hier:
http://suche.administrator.de/forum/%C3%9Cber-Batch-letzte-Zeile-in-TXT ...

Grüße
Darkprodukt
Bitte warten ..
Mitglied: Karo
07.08.2012 um 15:19 Uhr
Hoi,

01.
@echo off 
02.
Setlocal EnableDelayedExpansion 
03.
set name="ISU-VR-nicht-gefunden-Bezug.txt" 
04.
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt" 
05.
set var 
06.
set /A COUNT=0 
07.
set /A COUNT2=0 
08.
FOR /F "delims=" %%i in ('type %name%') do ( 
09.
  set /A COUNT=!COUNT! + 1 
10.
11.
FOR /F "delims=" %%A in ('type %name%') do ( 
12.
 SET VAR=%%A 
13.
 SET /A COUNT2=!COUNT2! + 1 
14.
REM  ECHO !COUNT2! von !COUNT! 
15.
 IF !COUNT2! NEQ %COUNT% ( 
16.
    IF !COUNT2! EQU 1 set var=where nr in ^(!var!>%ziel% 
17.
    echo !var!>>%ziel% 
18.
 ) ELSE ( 
19.
    echo !var:~0,-1!;^)>>%ziel% 
20.
21.
22.
 
bye
Karo
Bitte warten ..
Mitglied: Karo
07.08.2012 um 15:19 Uhr
oh, ich sollte mal F5 drücken ...
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 15:33 Uhr
Titel ist geändert - sorry.

Teste gerade mal deine Variante...
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 15:39 Uhr
Die Variante von darkprodukt läuft - super

Bei Karo wird das letzt Komma leider nicht gelöscht.

Ich danke Euch beiden für Eure Mühe!

Man lernt nie aus ... vlt schaff ich nun das nächste Problem selbst :D
Bitte warten ..
Mitglied: Karo
07.08.2012 um 15:41 Uhr
doch wird es.....
schau mal genau hin, da steht ein ';'

Karo
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 15:51 Uhr
Ausgangsdatei:
'1041070089529691',
'15131863',
'13703509',
'1126110052504629',

Ergebnis:
where nr in ('1041070089529691',
'15131863',
'13703509',
'1126110052504629',;)

... hab nix manipuliert, wirklich
Bitte warten ..
Mitglied: Karo
07.08.2012 um 15:56 Uhr
...Du vielleicht nicht, aber wahrscheinlich ist in der letzten Zeile der Nummerndatei ein LEERZEICHEN nach dem Komma.
Denn wenn !var:~0,-1! das letzte Zeichen killt, kann es garnichts anderes sein.

Karo
Bitte warten ..
Mitglied: Darkprodukt
07.08.2012 um 16:00 Uhr
Kurzer Tipp:

Lösche das komma doch so:
01.
set "var=!var:,=! 
02.
echo %var%
Grüße
Darkprodukt
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 16:00 Uhr
Komisch -- hab jetzt einen Testlauf unter "normalen" Bedingungen durchgeführt und plötzlich schaut die letzte Zeile so aus:

'1020090002213069' Settings\Temp\f\ret

Woran liegt das? Ich bin leider nicht so wirklich sicher in Batch...
Bitte warten ..
Mitglied: Darkprodukt
07.08.2012, aktualisiert um 16:28 Uhr
Hm...

Was ist den anders am durchlauf unter "normalen" Bedingungen?

Grüße
Darkprodukt
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 16:19 Uhr
Am Durchlauf ist anders, dass vorher "where nr in )" eingefügt und danach ";)" eingefügt wird - aus einer anderen Software heraus.

Hab den Fehler - jemand hatte die Verzeichnise geändert, jetzt stimmt es wieder

Danke.
Bitte warten ..
Mitglied: OlliMuc
07.08.2012, aktualisiert um 16:25 Uhr
Das Ergebnis nach deiner angepassten "Karo-Variante" schaut so aus (wobei ich hinter set var noch ein "=" gesetzt habe - also set var=:

where nr in ('1041070089529691',
'15131863',
'13703509',
'1126110052504629' ;)


Das liegt nun an den Leerzeichen hinter den Kommas?
Bitte warten ..
Mitglied: Darkprodukt
07.08.2012 um 16:24 Uhr
Ok dann ist die Frage ja gelöst...

Grüße
Darkprodukt
Bitte warten ..
Mitglied: Darkprodukt
07.08.2012, aktualisiert um 16:43 Uhr
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:
01.
set "var=!var:,=!"
Auserdem reicht es schon, wenn du Zeile 19 durch
01.
echo !var:,=!;^)>>%ziel% 
ersetzt.

Grüße
Darkprodukt
Bitte warten ..
Mitglied: OlliMuc
07.08.2012 um 16:46 Uhr
Die Ergänzungen werden in der Tat von einem anderen Programm eingetragen, nicht mittels Batch. - OK, daher ist das "=" überflüssig, gut.

Nochmal Danke.
Bitte warten ..
Mitglied: Darkprodukt
08.08.2012 um 00:27 Uhr
Ok,

wenn das Thema damit gelöst ist.

Markiere doch die Frage bitte als gelöst, Danke.

Grüße
Darkprodukt
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Exchange Server
Exchange 2010 Akzeptierte Domäne löschen (4)

Frage von Rob1982 zum Thema Exchange Server ...

Exchange Server
gelöst SBS2011 - im Exchange mobile Geräte löschen (4)

Frage von MiSt zum Thema Exchange Server ...

Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...