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

Wörter in Anführungsstrichen in einer Zeile einer txt in einem anderen Format in neue txt schreiben

Frage Entwicklung Batch & Shell

Mitglied: gijukud6

gijukud6 (Level 1) - Jetzt verbinden

08.04.2009, aktualisiert 19:29 Uhr, 4074 Aufrufe, 6 Kommentare

Hallo,

es gibt eine Menge Fragen, die dieses Thema behandeln, aber da ich bezüglich Batch-Dateien nicht viel Ahnung habe und mein Problem etwas spezieller ist, konnte ich mir aus den Themen nicht die Lösung zusammenbasteln... Hoffe ihr könnt mir helfen:

Ich habe eine txt Datei, die in jeder Zeile eine Menge stehen hat, unter anderem auch Host:"derhost" sowie Passwort:"daspw" und User:"deruser".
Nun bräuchte ich eine Batch, die jede Zeile dieser txt Datei ausliest und diese Information in eine neue txt Datei schreibt im Format:
ftp://deruser:daspw@derhost

Hier die ersten 3 Zeilen der Datei. Jede weitere Zeile ist gleich aufgebaut, aber die "Variablen" sind logischerweise unterschiedlich lang.

01.
<Site Name="apple" Host="apple.com" Port="21" User="stevey" RemoteDir="" LocalDir="" Pass="01807254095081091089001004" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/> 
02.
<Site Name="google" Host="google.com" Port="21" User="eric666" RemoteDir="" LocalDir="" Pass="0990850700690640857075084116118112" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/> 
03.
<Site Name="microsoft" Host="microsoft.com" Port="21" User="billG" RemoteDir="" LocalDir="" Pass="02209478064088124084068083" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/>
Vielen Dank für Hilfe
Gruß
Mitglied: bastla
08.04.2009 um 18:43 Uhr
Hallo gijukud6 und willkommen im Forum!

Gibt es in den Zeilen irgend eine Systematik (etwa: fixe Wortanzahl bzw Zeichenanzahl/Zeichenposition; oder: nur nach "Host", "Passwort" und "User" befindet sich ein ":")?

Es wäre auch hilfreich, wenn Du einige Beispielzeilen (mit anonymisierten Daten) in Code-Formatierung posten könntest ...

Grüße
bastla
Bitte warten ..
Mitglied: colinardo
08.04.2009 um 20:36 Uhr
Folgendes Visual Basic Script solte dir helfen:
Nach deinen Formatvorgaben sucht das Script nach den folgenden Textstellen :
User=
Pass=
Host=
und extrahiert alles was danach zwischen den Anführungszeichen folgt.

Du musst nur noch den Pfad für die Textdatei in Zeile 2 des Codes anpassen.
Nach dem Aufruf findest du eine Textdatei im Ordner des Scriptes, du kannst den Pfad aber auch in Zeile 3 des Codes anpassen!
01.
Set fso = CreateObject("scripting.filesystemobject") 
02.
Set source_file = fso.OpenTextFile("text.txt",1) 
03.
Set target_textfile = fso.OpenTextFile("processed_file.txt",2,true) 
04.
Do Until source_file.AtEndOfStream 
05.
	line = source_file.ReadLine 
06.
	pos_content_user = InStr(1,line,"User=",1)+6 
07.
	len_content_user = InStr(pos_content_user, line, Chr(34)) - pos_content_user 
08.
	pos_content_pass = InStr(1,line,"Pass=",1)+6 
09.
	len_content_pass = InStr(pos_content_pass, line, Chr(34)) - pos_content_pass 
10.
	pos_content_host = InStr(1,line,"Host=",1)+6 
11.
	len_content_host = InStr(pos_content_host, line, Chr(34)) - pos_content_host 
12.
	 
13.
	user = Mid(line,pos_content_user, len_content_user) 
14.
	pass = Mid(line,pos_content_pass, len_content_pass) 
15.
	host = Mid(line,pos_content_host, len_content_host) 
16.
	target_textfile.WriteLine "ftp://" & user & ":" & pass & "@" & host 
17.
Loop 
18.
MsgBox "Feddich..." 
19.
source_file.Close 
20.
target_textfile.Close
Wünsche weiterhin viel Erfolg !
Bitte warten ..
Mitglied: gijukud6
08.04.2009 um 20:53 Uhr
Danke vielmals Softmeister, das hat (trotz fehlermeldung) funktioniert.
Trotzdem würde ich gern interessehalber wissen, wie man das Problem mittels Batch gelöst hätte.
Bitte warten ..
Mitglied: bastla
08.04.2009 um 21:55 Uhr
Hallo gijukud6!

Ich hätte zwar auch eher VBS als Batch gewählt, aber es könnte - soferne es keine zusätzlichen Leerzeichen zwischendurch (etwa im Wert von "Site Name" oder "LocalDir") gäbe - so klappen:
01.
@echo off & setlocal 
02.
set "Ein=D:\text.txt" 
03.
set "Aus=D:\processed_file.txt" 
04.
 
05.
if exist "%Aus%" del "%Aus%" 
06.
for /f "usebackq tokens=3,5,8" %%i in ("%Ein%") do for /f "tokens=2,4,6 delims==" %%a in ("%%j=%%k=%%i") do >>"%Aus%" echo ftp://%%~a:%%~b@%%~c
Grüße
bastla
Bitte warten ..
Mitglied: gijukud6
08.04.2009 um 22:45 Uhr
Dankesehr, es funktioniert!
Eine Bitte hab ich noch: Könntest du mir bitte die letzte Zeile deiner Batch ein wenig erläutern?
Bitte warten ..
Mitglied: bastla
08.04.2009 um 22:57 Uhr
Hallo gijukud6!
for /f "usebackq tokens=3,5,8" %%i in ("%Ein%") do
Gehe alle Zeilen der in der Klammer angegebenen Datei (da diese unter Anführungszeichen - für den Fall, dass Name oder Pfad Leerzeichen enthielten - steht muss, zur Unterscheidung von einem Text, "usebackq" verwendet werden) durch und entnehme die (durch die Default-Trennzeichen Leerzeichen bzw TAB) Teile 3, 5 und 8 als Variable %%i und alphabtisch folgende - Ergebnis für die erste Zeile:
%%i: Host="apple.com" 
%%j: User="stevey" 
%%k: Pass="01807254095081091089001004"
Da die Werte jeweils durch ein "=" vom Namen getrennt sind, wird mit der nächsten "for /f"-Schleife anhand dieses Zeichens getrennt - der Einfachheit halber wird das Trennzeichen auch zwischen die einzelnen Namen-/Wert-Kombinationen (bereits in der benötigten Reihenfolge angegeben) gesetzt:
for /f "tokens=2,4,6 delims==" %%a in ("%%j=%%k=%%i") do
- zerlegt wird daher
User="stevey"=Pass="01807254095081091089001004"=Host="apple.com"
Da nur die Werte interessieren, werden die "tokens" 2 ("stevey"), 4 ("01807254095081091089001004") und 6 ("apple.com") verwendet, um das gewünschte Ergebnis in die Ausgabedatei zu schreiben:
>>"%Aus%" echo ftp://%%~a:%%~b@%%~c
Die Schreibweise "%%~a" entfernt schließlich noch die umgebenden Anführungszeichen.
Wenn Du übrigens das "echo off" auf "echo on" änderst, erhältst Du die einzelnen Befehlszeilen (mit "aufgelösten" Variablen) vor der Ausführung angezeigt. Starten solltest Du den Batch (beim Testen ohnehin immer) dazu dirket von der Kommandozeile.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...