Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3156 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 ..
Ähnliche Inhalte
VB for Applications
gelöst VBS Suchen und Ersetzen bei UTF8 XML Dateien funktioniert nicht (7)

Frage von Nexxudus zum Thema VB for Applications ...

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

Frage von GNLen1 zum Thema Batch & Shell ...

Windows 10
gelöst Werden Dateien beim Ersetzen wirklich überschrieben? (3)

Frage von Nexder zum Thema Windows 10 ...

Neue Wissensbeiträge
Mac OS X

Apple hat macOS High Sierra veröffentlicht

Information von Frank zum Thema Mac OS X ...

Viren und Trojaner

Ransomware or Wiper? RedBoot Encrypts Files but also Modifies Partition Table

(4)

Information von BassFishFox zum Thema Viren und Trojaner ...

Notebook & Zubehör

WOL bei HP Notebooks

(7)

Erfahrungsbericht von Henere zum Thema Notebook & Zubehör ...

Heiß diskutierte Inhalte
Windows 10
gelöst Netzwerkkarte schaltet sich erst nach dem Logon ein (24)

Frage von DerWoWusste zum Thema Windows 10 ...

Windows Server
Seit IP Umstellung DC DNS Fehler (22)

Frage von Yaimael zum Thema Windows Server ...

Grafik
gelöst CAD Arbeitsplätze (17)

Frage von Diddi93 zum Thema Grafik ...