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, 3137 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
Exchange Server

WSUS bietet CU22 für Exchange 2007 SP3 nicht an. EOL Exchange 2007

Tipp von DerWoWusste zum Thema Exchange Server ...

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

Frage von GNLen1 zum Thema Batch & Shell ...

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 ...

Heiß diskutierte Inhalte
Batch & Shell
gelöst Batch xls nach aktuellem Datum auslesen und email senden (14)

Frage von michi-ffm zum Thema Batch & Shell ...

Backup
Datensicherung ARCHIV (12)

Frage von fautec56 zum Thema Backup ...

LAN, WAN, Wireless
Per Script auf UniFi-controller zugreifen und WPA2-Key ändern (11)

Frage von Winfried-HH zum Thema LAN, WAN, Wireless ...