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

Suchen und Ersetzen in .bat Datei mit Bedingung

Frage Entwicklung Batch & Shell

Mitglied: chrishh

chrishh (Level 1) - Jetzt verbinden

27.07.2012 um 10:44 Uhr, 3132 Aufrufe, 6 Kommentare

Hallo zusammen,

wir exportieren aus einem Programm heraus Dateien die eine bestimmte Formatierung haben damit Sie auf einer Website der spanischen Polizei richtig eingelesen werden können. Es sind Meldelisten von unseren Hotelgästen. Da unser Programm in Deutsch ist und die Spanier aber gerne alles in Spanisch haben möchten habe ich eine batch Datei mit einem VB Script was die deutschen Ländernamen durch spanische ersetzt.

Die formatierten Zeilen in der Datei sehen wie folgt aus:

2||C5204661|I|20101214|STUDER||WERNER|M|19600704|FRANCIA|20120724|
2||10CF31776|I|20100720|STUDER||MAZZARINE|F|19980101|FRANCIA|20120724|
2||712002310|I|20100916|KALLYAKIN|| ALEXEY|M|19610614|RUSIA|20120724|
2||F0826056|I|20040309|GAECHTER||JASMIN|F|19731116|SUIZA|20120724|
2||NY6065R14|I|20110401|SONKE||ESTHER|F|19700510|PAÍSES BAJOS|20120724|
2||XF623864-Q|I|20091101|RODRIGUEZ||MANOLO|M|19730522|ESPAÑA|20120724|

Nur zur Nachvollziehbarkeit:
2||Ausweisnummer|Ausweisart|Austellungsdatum|Nachname|2.Nachname|Vorname|Geschlecht|Geburtsdatum|Geburtsland|Anreisedatum|

Jetzt haben wir das Problem dass unser Programm für den Export nur die Ausweistypen "P" und "I" kennt, das ist bei fast allen Ländern auch in Ordnung, bis auf SPANIEN.

Die Spanier müssen als Ausweistyp ein "D" dort stehen haben, sprich aus:
2||XF623864-Q|I|20091101|RODRIGUEZ||MANOLO|M|19730522|ESPAÑA|20120724|
müsste
2||XF623864-Q|D|20091101|RODRIGUEZ||MANOLO|M|19730522|ESPAÑA|20120724|
gemacht werden.

Ist es möglich eine Abfrage da rein zu basteln die abfragt wenn in einer Zeile |ESPAÑA| steht, in der gleichen Zeile das |I| durch |D| ersetzt werden soll?!

Hier mein bereits vorhandenes Script:

@echo off & setlocal
set "Datei=Z:\Jandarma\18685AAH01.036"

set R=%temp%\Replace5.vbs

>%R% echo F = WScript.Arguments(0)
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%R% echo T = fso.OpenTextFile(F).ReadAll

>>%R% echo T = Replace(T, "AEGYPTEN", "EGIPTO")
>>%R% echo T = Replace(T, "DAENEMARK", "DINAMARCA")
>>%R% echo T = Replace(T, "DEUTSCHLAND", "ALEMANIA")
>>%R% echo T = Replace(T, "ALGERIEN", "ARGELIA")
>>%R% echo T = Replace(T, "ARMENIEN", "ARMENIA")
>>%R% echo T = Replace(T, "ASERBAIDSCHAN", "AZERBAIYÁN")
>>%R% echo T = Replace(T, "BELGIEN", "BÉLGICA")
>>%R% echo T = Replace(T, "BRASILIEN", "BRASIL")
>>%R% echo T = Replace(T, "BULGARIEN", "BULGARIA")
...

>>%R% echo fso.CreateTextFile(F).Write T
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"



Hoffe mir kann jemand helfen.

Vielen Dank
Mitglied: ColdZero89
27.07.2012, aktualisiert um 11:04 Uhr
Moin,

soweit ich richtig verstanden habe, sobald da - bei deinen Beispielen Manolo - ESPANA steht, soll egal welcher Buchstabe durch D ersetzt werden?

Btw Setz das ganze mal in ein CODE mit < code > und am ende < /code > (nur ohne Leerzeichen), dann ist das übersichtlicher.

Gruß Zero
Bitte warten ..
Mitglied: chrishh
27.07.2012 um 11:06 Uhr
Hallo auch und vielen Dank für die schnelle Antwort.

Nicht jeder Buchstabe soll durch D ersetzt werden, es soll nur der Ausweistyp von |I| oder |P| (je nachdem welcher in der Zeile eingetragen ist) durch |D| ersetzt werden. Aber das halt nur in der Zeile wo |ESPANA| als Land steht.

Hier noch mal die ganze Datei, die bis jetzt nur die Ländernamen in Spanisch ändert:

01.
 
02.
@echo off & setlocal  
03.
set "Datei=Z:\Jandarma\18685AAH01.036" 
04.
 
05.
set R=%temp%\Replace5.vbs  
06.
 
07.
>%R%  echo F = WScript.Arguments(0) 
08.
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject") 
09.
>>%R% echo T = fso.OpenTextFile(F).ReadAll 
10.
 
11.
>>%R% echo T = Replace(T, "AEGYPTEN", "EGIPTO")  
12.
>>%R% echo T = Replace(T, "DAENEMARK", "DINAMARCA") 
13.
>>%R% echo T = Replace(T, "DEUTSCHLAND", "ALEMANIA") 
14.
>>%R% echo T = Replace(T, "ALGERIEN", "ARGELIA")  
15.
>>%R% echo T = Replace(T, "ARMENIEN", "ARMENIA")  
16.
>>%R% echo T = Replace(T, "ASERBAIDSCHAN", "AZERBAIYÁN")  
17.
>>%R% echo T = Replace(T, "BELGIEN", "BÉLGICA")  
18.
>>%R% echo T = Replace(T, "BRASILIEN", "BRASIL") 
19.
>>%R% echo T = Replace(T, "BULGARIEN", "BULGARIA") 
20.
>>%R% echo T = Replace(T, "ELFENBEINKÜSTE", "COSTA DE MARFIL") 
21.
>>%R% echo T = Replace(T, "ESTLAND", "ESTONIA") 
22.
>>%R% echo T = Replace(T, "FINNLAND", "FINLANDIA") 
23.
>>%R% echo T = Replace(T, "FRANKREICH", "FRANCIA") 
24.
>>%R% echo T = Replace(T, "GEORGIEN", "GEORGIA") 
25.
>>%R% echo T = Replace(T, "GRIECHENLAND", "GRECIA") 
26.
>>%R% echo T = Replace(T, "GROSSBRITANNIEN", "REINO UNIDO") 
27.
>>%R% echo T = Replace(T, "IRLAND", "IRLANDA") 
28.
>>%R% echo T = Replace(T, "ISLAND", "ISLANDIA") 
29.
>>%R% echo T = Replace(T, "ITALIEN", "ITALIA") 
30.
>>%R% echo T = Replace(T, "JAPAN", "JAPÓN") 
31.
>>%R% echo T = Replace(T, "KAMBODSCHA", "CAMBODIA") 
32.
>>%R% echo T = Replace(T, "KANADA", "CANADÁ") 
33.
>>%R% echo T = Replace(T, "KASACHSTAN", "KAZAJSTÁN") 
34.
>>%R% echo T = Replace(T, "KOLUMBIEN", "COLOMBIA") 
35.
>>%R% echo T = Replace(T, "KROATIEN", "CROACIA") 
36.
>>%R% echo T = Replace(T, "LETTLAND", "LETONIA") 
37.
>>%R% echo T = Replace(T, "LIBANON", "LIBANO") 
38.
>>%R% echo T = Replace(T, "LITAUEN", "LITUANIA") 
39.
>>%R% echo T = Replace(T, "LUXEMBURG", "LUXEMBURGO") 
40.
>>%R% echo T = Replace(T, "MALAYSIA", "MALASIA") 
41.
>>%R% echo T = Replace(T, "MALEDIVEN", "MALDIVAS") 
42.
>>%R% echo T = Replace(T, "MAROKKO", "MARRUECOS") 
43.
>>%R% echo T = Replace(T, "MAURITIUS", "MAURÍTANIA") 
44.
>>%R% echo T = Replace(T, "NEUSEELAND", "NUEVA ZELANDIA") 
45.
>>%R% echo T = Replace(T, "NIEDERLANDE", "PAÍSES BAJOS") 
46.
>>%R% echo T = Replace(T, "NORDKOREA", "COREA DEL NORTE") 
47.
>>%R% echo T = Replace(T, "NORWEGEN", "NORUEGA") 
48.
>>%R% echo T = Replace(T, "OESTERREICH", "AUSTRIA") 
49.
>>%R% echo T = Replace(T, "PHILIPPINEN", "FILIPINAS") 
50.
>>%R% echo T = Replace(T, "POLEN", "POLONIA") 
51.
>>%R% echo T = Replace(T, "RUMAENIEN", "RUMANIA") 
52.
>>%R% echo T = Replace(T, "RUSSLAND", "RUSIA") 
53.
>>%R% echo T = Replace(T, "SCHOTTLAND", "ESCOCIA") 
54.
>>%R% echo T = Replace(T, "SCHWEDEN", "SUECIA") 
55.
>>%R% echo T = Replace(T, "SCHWEIZ", "SUIZA") 
56.
>>%R% echo T = Replace(T, "SLOWAKEI", "ESLOVAQUIA") 
57.
>>%R% echo T = Replace(T, "SLOWENIEN", "ESLOVENIA") 
58.
>>%R% echo T = Replace(T, "SPANIEN", "ESPANA") 
59.
>>%R% echo T = Replace(T, "SUEDAFRIKA", "SUDÁFRICA") 
60.
>>%R% echo T = Replace(T, "SUEDKOREA", "COREA DEL SUR") 
61.
>>%R% echo T = Replace(T, "TAIWAN", "TAIWÁN") 
62.
>>%R% echo T = Replace(T, "THAILAND", "TAILANDIA") 
63.
>>%R% echo T = Replace(T, "TSCHECHIEN", "REPÚBLICA CHECA") 
64.
>>%R% echo T = Replace(T, "TSCHECHISCHE REPUBLIK", "REPÚBLICA CHECA") 
65.
>>%R% echo T = Replace(T, "TUNESIEN", "TÚNEZ") 
66.
>>%R% echo T = Replace(T, "TUERKEI", "TURQUÍA") 
67.
>>%R% echo T = Replace(T, "UKRAINE", "UCRANIA") 
68.
>>%R% echo T = Replace(T, "UNGARN", "HUNGRÍA") 
69.
>>%R% echo T = Replace(T, "VATIKAN STADT", "CIUDAD DEL VATICANO") 
70.
>>%R% echo T = Replace(T, "VEREINIGTE STAATEN VON AMERIKA", "ESTADOS UNIDOS") 
71.
>>%R% echo T = Replace(T, "WALES", "GALES") 
72.
>>%R% echo T = Replace(T, "WEISSRUSSLAND", "BELARÚS") 
73.
>>%R% echo T = Replace(T, "ZYPERN", "CHIPRE") 
74.
 
75.
 
76.
>>%R% echo fso.CreateTextFile(F).Write T 
77.
for %%f in ("%Datei%") do cscript //nologo %R% "%%f" 
78.
 
Bitte warten ..
Mitglied: bastla
27.07.2012, aktualisiert um 15:07 Uhr
Hallo chrishh!

Da Du eine zeilenweise Betrachtung benötigst, musst Du den Dateiinhalt nochmals splitten - etwa (als Ersatz der Zeilen 74 - 76):
01.
>>%R% echo Z = Split(T, vbCrLf) 
02.
>>%R% echo For i = 0 To UBound(Z) 
03.
>>%R% echo     If InStr(Z(i), "|ESPAÑA|") ^> 0 Then Z(i) = Replace(Z(i), "|I|", "|D|") 
04.
>>%R% echo Next 
05.
>>%R% echo fso.CreateTextFile(F).Write Join(Z, vbCrLf)
Grüße
bastla
Bitte warten ..
Mitglied: chrishh
27.07.2012 um 15:00 Uhr
Hallo bastla,

funktioniert genau wie gewünscht.

Ich danke Dir vielmals dafür!

Gruß,
Christian
Bitte warten ..
Mitglied: chrishh
27.07.2012 um 15:57 Uhr
Hola noch mal,

Kannst Du mir noch sagen wie ich einen zweiten String auf die gleiche Weise durch einen anderen ersetzen kann?

Wenn ich versuche da noch eine zweite if Abfrage mit einem anderen String ("2||" soll ersetzt werden durch "2|") reinsetze macht das Skript gar nichts mehr. Es soll sich auch wieder nur auf die Spanier beziehen, also genau so wie du im Code oben geschrieben hast nur dass 2|| durch 2| ersetzt werden soll.

Vielen Dank im Voraus
Bitte warten ..
Mitglied: bastla
27.07.2012, aktualisiert um 17:15 Uhr
Hallo chrishh!

Mach aus der Zeile 3
01.
>>%R% echo     If InStr(Z(i), "|ESPAÑA|") ^> 0 Then 
02.
>>%R% echo         Z(i) = Replace(Z(i), "|I|", "|D|") 
03.
>>%R% echo         Z(i) = Replace(Z(i), "2||", "2|") 
04.
>>%R% echo     End If
Ganz nebenbei: Wieso packst Du das in einen Batch? Wenn nicht mehr als diese Umwandlung gefragt ist, könntest Du ja direkt ein VBS verwenden ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Windows Server
gelöst Sichtbares Ausführen einer BAT-Datei mittels GPOs (10)

Frage von DasWombat1993 zum Thema Windows Server ...

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

Frage von DanteManor zum Thema Batch & Shell ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...