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

Bestimmten gefundenen Wert aus txt verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: connecthor

connecthor (Level 1) - Jetzt verbinden

04.06.2010 um 17:18 Uhr, 3751 Aufrufe, 17 Kommentare

Hallo,

Biber und LotPings wissen bestimmt schnell rat.

01.
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do set "js=%%j"
jetzt fehlt mir die einstellung, dass er den ERSTEN gefundenen wert weiterverarbeitet. Wie folgt.

01.
for /f "usebackq delims=" %%k in ("%Datei%") do set "Line=%%k" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
dann soll er den nächsten wert genauso bearbeiten.

zur schnelleren bearbeitung würde ich denke, dass noch eine abfrage ala

01.
'findstr /i /b "%von%" "%js%"'
bei mir nimmt er zur zeit leider nur die LETZTE gefundene zeile (wenn nur eine gefunden wird nimmt er natürlich die)

ihr könnt bestimmt helfen

DANKE
Mitglied: Biber
04.06.2010 um 17:34 Uhr
Moin connecthor,

im Prinzip hast du schon alles richtig, nur sollen ALLE Anweisungen, die in deiner zweiten Zeile nach dem FOR-Anweisungs-DO folgen
für jedes Element/jede Zeile angewandt werden. Also musst du diese in Klammern setzen.

Demo am CMD-Prompt:
> rem die inputdatei sieht so aus. 
>type x.txt 
path=d:\temp 
path=f:\temp 
path=d:\temp\backup 
 
> Rem Setzen der Von/nach-Variablen 
> set "von=temp" & set "nach=another" 
 
>for /f "usebackq delims=" %k in (x.txt) do @(set "Line=%k" & set Line=!Line:%Von%=%Nach%! & @echo !Line!) 
path=d:\another 
path=f:\another 
path=d:\another\backup
Ich denke, der Unterschied zu deiner 2.Zeile (also die Einklammerung) ist erkennbar.
Die "@"-Zeichen sind bedeutungslos ... ist nur zur Echo-unterdrückung am Prompt.

Grüße
Biber
Bitte warten ..
Mitglied: LotPings
04.06.2010 um 20:19 Uhr
Zitat von connecthor:
Biber und LotPings wissen bestimmt schnell rat.
Nicht so ganz, ich finde ja toll was Biber da interpreiert hat, aber

01.
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do set "js=%%j" 
jetzt fehlt mir die einstellung, dass er den ERSTEN gefundenen wert weiterverarbeitet. Wie folgt.
meinst du jetzt das du hier NUR den ersten gefundenen Wert bearbeiten willst?
01.
for /f "usebackq delims=" %%k in ("%Datei%") do set "Line=%%k" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
dann soll er den nächsten wert genauso bearbeiten.
Hier fehlt mir der Zusammenhang und vor allem ein Ist-Soll-Vergleich der Eingangsdaten.
zur schnelleren bearbeitung würde ich denke, dass noch eine abfrage ala
01.
 'findstr /i /b "%von%" "%js%"'
bei mir nimmt er zur zeit leider nur die LETZTE gefundene zeile (wenn nur eine gefunden wird nimmt er natürlich die)
ihr könnt bestimmt helfen
Vielleicht hat Biber das ja schon getan

Falls du nur den ersten von mehreren möglichen Werten berabeiten willst:
01.
Set "js=" 2>NUL 
02.
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do If not defined js set "js=%%j" 
Gruß
LotPings
Bitte warten ..
Mitglied: connecthor
07.06.2010 um 21:43 Uhr
Nabend,

@Biber:

das blöde ist, dass der "path=" per zufall generierte werte enthält. diese also nicht statisch zugewiesen werden können...

@LotPings:

so weit gehts... PRIMA, DANKE!!! Was muss ich aber machen, damit entweder ALLE "path=" verzeichnisse oder nur der Xte bearbeitet werden???

es ist doch bestimmt möglich, mehrere aufgaben mit einem & zu verknüpfen, so wie:
<code>
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do If not defined js set "js=%%j" & do rd "%%j\maildir" /S /Q 2>nul & do rd h:\maildir_old /S /Q

????

vielen dank im vorraus für eure hilfe
Bitte warten ..
Mitglied: LotPings
07.06.2010 um 21:59 Uhr
dto, schönen Abend,

deine Anforderungen sind ja ganz schön variabel.
Das mit dem & ist kein Problem, kannst du aber einfach ausprobieren.
Wenn du Alle willst pack die Befehle in zus. Klammern oder eine Subroutine.

Wenn du z.Bsp. nur den 3. willst, brauchst du einen Zähler, und für den brauchst du Delayed Expansion oder eine Subroutine.

01.
@Echo off & Setlocal EnableDelayedExpansion 
02.
Set X=0 
03.
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do Set /A "X+=1"& If !X! EQU 3 set "js=%%j"
Gruß
LotPings
Bitte warten ..
Mitglied: connecthor
07.06.2010 um 23:07 Uhr
hallo LotPings,

das mit den "zus. klammern" versteh ich gerade nicht... wahrscheinlich weil meine frau gerade in den wehen liegt und ich in kürze vater sein werde...

könntest du mir ein kurzes beispiel geben?!?!?

mit ALLE meinte ich, dass er ALLE pfade die er in der %ini% findet nacheinander durchgeht und das ersetzen durchführt...



danke
Bitte warten ..
Mitglied: LotPings
07.06.2010 um 23:16 Uhr
Na dann beeile ich mich wohl besser

Dein 2. Beispiel ganz oben könntest du auch so schreiben:
01.
for /f "usebackq delims=" %%k in ("%Datei%") do ( 
02.
  set "Line=%%k" 
03.
  set Line=!Line:%Von%=%Nach%!  
04.
  echo !Line!>>"%t%" 
05.
)
Alles Gute!

LotPings
Bitte warten ..
Mitglied: connecthor
09.06.2010 um 10:22 Uhr
Mahlzeit!!!

so, da issa dann stolzer vater eines gesunden jungen...

da habe ich zwischen windeln und scheien ein paar minuten zeit das mal zu testen.

schönen dank im vorraus!!!
Bitte warten ..
Mitglied: Biber
09.06.2010 um 19:16 Uhr
Moin connecthor,

Zitat von connecthor:
Mahlzeit!!!

so, da issa dann stolzer vater eines gesunden jungen...
Herzlichen Glückwunsch!
...war es denn sehr anstrengend für dich...?? *fg

da habe ich zwischen windeln und scheien ein paar minuten zeit das mal zu testen.
Da fehlt ein Buchstabe .... nein, ich möchte nicht raten, wo und welcher...

schönen dank im vorraus!!!
Dafür ist hier einer zuviel...

Egal, wenn du schon bei einem einzigen Kiddie so durch den Wind bist, dass du dich für eine bereits gepostete Lösung und/oder dein Testen derselben im Voraus bedankst...

.... fang lieber erstmal keine Folgeprojekte an...*gg

Grüße
Biber
Bitte warten ..
Mitglied: connecthor
12.06.2010 um 12:47 Uhr
guten tag, morgen, abend oder was auch immer gerade ist...

das mir der rechtschreibung tut mir ein wenig leid, ich könnte es auf die tastatur schieben, die nämlich voller wasser

zum glück ist das schreiben keine batch und erst recht kein linux... sonst wär ich bei dem verschwommenen bild wohl zum virenschreiber geworden.

vielen dank BIBER für die glückwünsche... und JA, es war anstrengend!!! außer in braveheart und apocalypto hab ich noch nicht SO viel blut gesehen... da hatte ich lange keinen hunger mehr ...

noch kurz ne frage... wo finde ich ne übersicht über die strings von FOR ? ich verwende immer %i du hast bei deinem letzten tipp %k verwendet... wo liegt der unterschied?
Bitte warten ..
Mitglied: kkboy94
12.06.2010 um 22:16 Uhr
Hallo connecthor
Herzlichen Glückwunsch auch von mir


noch kurz ne frage... wo finde ich ne übersicht über die strings von FOR ? ich verwende immer %i du hast bei deinem
letzten tipp %k verwendet... wo liegt der unterschied?
Ich persönlich kenn den Unterschied zwar jetzt nicht aber ich vermute mal, dass du bei der kommandozeilenhilfe fündig wirst.
also cmd aufrufen for /? eingeben
und dann sollte da vielleicht ne Liste kommen.

Aber wie gesagt, ich bin mir nicht sicher.

Mit freundlichen Grüßen Karsten
Bitte warten ..
Mitglied: Biber
13.06.2010 um 15:39 Uhr
Moin connecthor,

Zitat von connecthor:
guten tag, morgen, abend oder was auch immer gerade ist...
Das wird für dich als junger Vater in der Einarbeitung auch die nächsten paar Monate keinen grossen Unterschied machen...*gg

noch kurz ne frage... wo finde ich ne übersicht über die strings von FOR ?
Hat kkboy94 treffsicher beantwortet..
ich verwende immer %i du hast bei deinem letzten tipp %k verwendet... wo liegt der unterschied?
Wie du die Laufvariable nennst, ist im Rahmen der 58 möglichen Zeichen vollkommen beliebig.
Erlaubt und dokumentiert sind a-z und A-Z.

Einige Batch-Schroter lassen die Zählvariablen mit %a, %b %c.. beginnen für das erste, zweite, dritte... Token.
Andere haben Präferenzen für %x, %y, %z
Andere verwenden Grossbuchstaben %A, %B, %C ..
Andere (so wie ich) verwenden %i, %j .... weil Zähler in anderen Skript-Sprachen meist so benamst werden.
Bei einem Variablennamen "i" weiss jeder Coder: "Aha, ist eine FOR/LOOP/Whatever-Zählvariable".

Dass ich hier mal %k fürs erste anzusprechende Token verwendet habe --> hatte keine tiefer gehende Bedeutung.

Grüße
Biber
Bitte warten ..
Mitglied: LotPings
14.06.2010 um 13:44 Uhr
Zitat von Biber:
@connecthor: Auch von mir einen herzlichen Glückwunsch und ich wünsche dir gute Nerven

Wie du die Laufvariable nennst, ist im Rahmen der 58 möglichen Zeichen vollkommen beliebig.
Erlaubt und dokumentiert sind a-z und A-Z.
Möglich sind darüber hinaus etliche weitere (Sonder-)Zeichen und auch alle Ziffern - empfehlen kann man deren Verwendung aber nur wenn man die (meiner Erfahrung nach) längst mögliche Sequenz von 31 tokens bei einem for /f auswerten möchte.
Ohne Verrenkungen wie Escapen gibt es nur diese eine Folge: ?@ABC...XYZ[\] die das ermöglicht.

Diese Datei Test.txt
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32 
101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132
Ausgewertet mit dieser Batch
01.
@Echo off 
02.
for /f "tokens=1-31 delims=," %%? in (test.txt) do ( 
03.
Echo %%? %%@ %%A %%B %%C 
04.
Echo %%D %%E %%F %%G %%H 
05.
Echo %%I %%J %%K %%L %%M 
06.
Echo %%N %%O %%P %%Q %%R 
07.
Echo %%S %%T %%U %%V %%W 
08.
Echo %%X %%Y %%Z %%[ %%\ 
09.
Echo %%] 
10.
Echo ==============================)
erzeugt diese Ausgabe:
>For-Tokens.cmd 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 25 
26 27 28 29 30 
31 
============================== 
101 102 103 104 105 
106 107 108 109 110 
111 112 113 114 115 
116 117 118 119 120 
121 122 123 124 125 
126 127 128 129 130 
131 
==============================
Gruß
LotPings
Bitte warten ..
Mitglied: Biber
14.06.2010 um 15:48 Uhr
Moin Lotpings,

in der Tat, es snd dann mehr als 58 mögliche Zeichen - die Variante mit den Ziffern kannte ich auch noch nicht.

Also sind ohne Maskierung möglich
  • A-Z, a-Z ---------> 2x26 = 52 Zeichen
  • 0-9 ---------> 10 Zeichen
  • @, !, ?, _, ], [ , }, {, /, \ ----> 10 Zeichen
  • + ein paar Exoten/Maskierte

....roundabout 75 mögliche Zeichen.
Aber eben maximal 31 Token pro Zeile.

Grüße
Biber
Bitte warten ..
Mitglied: connecthor
21.06.2010 um 07:22 Uhr
guten morgen,

vielen dank für eure glückwünsche.
die nerven habe ich mir schon im laufe der jahre mit meinen "schäfchen" gestärkt. da sind die paar nächtlichen schreiattacken die reinste erholung...

eure erklärungen sind sehr umfang und aufschlussreich. dafür auch noch mal danke.

ich werde mich dann mal heute nach fast 2 wochen "babypause" wieder dem tagesgeschäft zuwenden und testen testen testen.

grüße

Connecthor
Bitte warten ..
Mitglied: connecthor
26.06.2010 um 10:13 Uhr
hallo, also nach umfangreichen tests...

es geht nicht

die INI datei sieht so aus:

01.
einstellungen 
02.
wo 
03.
das mail liegt 
04.
path=C:\email\xxxxx.default 
05.
 
06.
einstellungen 
07.
wo 
08.
das mail2 liegt 
09.
path=d:\email\yyyyyy.default 
10.
 
11.
einstellungen 
12.
wo 
13.
das mail3 liegt 
14.
path=e:\email\zzzzzzz.default
pfad sieht folgendermaßen aus:

Email
|_ xxxxxx.default
| |_ prefs.js
|
|_ yyyyyy.default
|_ prefs.js ....

ich möchte die pfade aus der INI datei auslesen und in ALLEN gefundenen pfaden, in den prefs.js dateien den wert %von% nach %nach% setzten.

also in jeder.

nicht nur in der ersten oder letzten.

bitte um hilfe!!!
Bitte warten ..
Mitglied: LotPings
29.06.2010 um 21:01 Uhr
Hallo,

mit Verspätung, versuch mal dies (ungetestet)
01.
@Echo off 
02.
Setlocal EnableDelayedExpansion 
03.
Set IniFile="d:\test\test.ini" 
04.
For /f "UseBackQ Tokens=1,* Delims==" %%A in (%IniFile%) Do Call :ProcessFile "%%B\prefs.js" 
05.
Goto :Eof 
06.
:ProcessFile 
07.
If Not Exist %1 Echo Nicht gefunden: %1 & Goto :Eof 
08.
Set "PrefNew=%~dpn1.NEW" 
09.
Type NUL >"%PrefNEW%" 
10.
for /f "usebackq delims=" %%k in (%1 
11.
 ) do set "L=%%k" & set "L=!L:%Von%=%Nach%!"& >>"%PrefNEW%" echo.!L! 
12.
 
Gruß
LotPings
einige Fehlerchen inzwischen beseitigt
PS: Von und Nach musst du natürlich noch Irgendwo definieren
Bitte warten ..
Mitglied: connecthor
05.07.2010 um 07:18 Uhr
guten morgen.

ähmm... geht nicht. und aufgrund der länge und übersichtlichkeit fange ich mal einen neuen thread an.

danke bis hierher

connecthor
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

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

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...