indolenz
Goto Top

Zeilenweises Auslesen einer Txt und Schreiben der einzelnen Zeilen in fortlaufende Variablen

Hallo ans Forum,

ich habe eine Frage zum zeilenweisen Auslesen einer Txt, die ich dann in der gleichen Batch-Datei, aus der der Befehl aufgerufen wird, wieder deklarieren will
- leider bekomme ich nur die letzte Zeile ausgegeben und ohne fortlaufende Nummerierung.

Ausgangspunkt:

Ich lese mit folgendem Befehl in der AD vorhandene OUs aus und schreibe sie in eine Datei

dsquery ou OU=111,OU=222,DC=333,DC=444,DC=com -o rdn -scope onelevel > ouresult.txt

Inhalt ouresult.txt=
"Ou1"
"Ou2"
"Ou3"
"Ou4"
...
"OuX"

Diese Txt versuche ich mit folgendem Batch-Befehl auszulesen:

for /f "usebackq delims=" %%i in ("Pfad:\ouresult.txt") do (for /L %%N IN (1 1 %%N) DO echo set %%N+1=)%%i > Ausgabe

Als Ergebnis bekommen ich aber nur die letzte Zeile der Ergebnis.txt:

set +=1 "OuX")

Nach Suche hier im Forum bin ich auf folgenden Befehl gestoßen, den ich aber nicht angepaßt bekomme:

for /f "usebackq delims=" %%i in (' findstr /n $ "Pfad:\ouresult.txt" ') do @(for /L %%a in (1,1,x) do @if %%i==%%a @echo %%j)

Mein angestrebtes Ergebnis sollte so aussehen, daß ich in der gleichen Batch-Datei, die über die Batch ausgelesenen
und in die ouresult.txt geschrieben Werte wieder einlese und als deklarierte Variablen verwenden kann:

Set 1="ou1"
Set 2="Ou2"
Set 3="Ou3"
...
Set X="OuX"

Bitte geben Sie die entsprechende Ziffer fuer die Ou ein:

Set /p account=


netdom join %computername% /Domain:123.com\adc.123.com /OU:OU=Workstations,OU=%account%,OU=111,OU=222,DC=333,DC=444,DC=com

Ich hoffe, ich konnte verständlich machen, was ich meine face-smile


Vielen Dank im Voraus für Eure Hilfe und Mühe
Gruß
Indolenz

Content-Key: 137277

Url: https://administrator.de/contentid/137277

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: Biber
Biber 03.03.2010 um 11:38:17 Uhr
Goto Top
Moin indolenz,

ohne deiner Frage ausweichen zu wollen - ich würde die Strategie geringfügig ändern.

Mit dem FindStr-/n-befehl oben hast du doch schon eine "durchnummerierte Liste aller OUs".

Brauchst du doch nicht nochmal clonen.
Beispiel am CMD-Prompt ("das führnde ">" gehört zu meinem Prompt, nicht mit eingeben):
>findstr /n . e:\schnipsel\OuResults.txt
1:"Ou1"
2:"Ou2"
3:"Ou3"
4:"Ou4"
5:...
6:"OuX"

>REM nachdem u z.B. als %account% die "4" abgefragt hast:
>for /f "delims=: tokens=1,*" %i in ('findstr /n . e:\schnipsel\OuResults.txt') do @If "%i"=="4" @echo %j
"Ou4"

Da, wo jetzt in der Demo steht If "%i"=="4" wäre es entsprechend If "%i"=="%account%" im "richtigen" Ablauf.

Anm.:Im Batch jeweils %%i und %%j statt %i und %j am Cmd-Prompt.

Grüße
Biber
Mitglied: H41mSh1C0R
H41mSh1C0R 03.03.2010, aktualisiert am 18.10.2012 um 18:41:19 Uhr
Goto Top
Mitglied: Indolenz
Indolenz 03.03.2010 um 13:21:23 Uhr
Goto Top
Moin Biber,

vielen Dank für die schnelle Antwort.

Mir raucht gerade ein wenig der Kopf und ich glaube die Lösung ist ganz einfach, aber ich komm partout nicht drauf.


Ich möchte ja quasi das "echo %%j" , das in deinem Beispiel "4" sprich "Ou4" ist, gleich weiter deklarieren als Variable über:

for /f "delims=: tokens=1,*" %%i in ('findstr /n . %systemroot%\adresult.txt') do @if "%%i"=="%account%" @set %%j=client

Bekomme jedoch die Fehlermeldung: "Die Umgebungsvariable "Ou4" ist nicht definiert."

Kann ich nicht einfach das "@echo %j " weglassen und gleich weiter "set=" verwenden?

Und die dann gesetzte Variable %client% möchte ich in einem folgenden Befehl dann aufgreifen ...

Vielen Dank
Indolenz
Mitglied: Indolenz
Indolenz 03.03.2010 um 14:07:23 Uhr
Goto Top
Problem gelöst ...

Übergabe des Echos als Variable mit:

for /f "delims=: tokens=1,*" %%i in ('findstr /n . %systemroot%\adresult.txt') do @if "%%i"=="%account%" (
echo %%j
set "client=%%j"
)

Vielen Dank noch mal ...