Textdatei zeilenweise in Variable schreiben
Hallo,
mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User eine einzelne Batch machen, das finde ich aber ziemlich unübersichtlich.
Meine Idee ist nun die User in einer mit Trennzeichen versehene Textdatei zu erfassen und da die Laufwerke zuzuordnen.
Beispiel Textdatei:
Um in der Textdatei nach dem Namen des sich gerade anmeldenden Users zu suchen habe ich folgenden Ansatz:
Damit stoße ich auf die Zeile des richtigen Users. Nun müsste ich im Prinzip alles, was in dieser Zeile nach dem ersten Trennzeichen kommt in ein Array einlesen, oder immer kurz mittels
call :Sprungmarke %%i zu meinem net use %InhaltdesFeldes%: \\IP-Adresse gehen und das so abwickeln. Bei der Array-Variante halt in einer Schleife bis zum letzten Wert.
Momentan hatte ich zum Testen nur das echo %%i drin. Wie müsste ich da jetzt weiter machen?
Vielen Dank im Voraus!
Torsten
Ach ja, wenn der User noch nicht in der Liste existiert könnte man eigentlich mit %USERNAME% >> %UserList% erstmal ohne zugeordnete Laufwerke ans Ende der Liste geschrieben werden, das wäre ja auch eine Idee. Da vergisst man dann wenigstens keinen bei neuen Usern... Aber da müsste ich irgendwann mitbekommen wenn der Name nicht gefunden wurde...
mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User eine einzelne Batch machen, das finde ich aber ziemlich unübersichtlich.
Meine Idee ist nun die User in einer mit Trennzeichen versehene Textdatei zu erfassen und da die Laufwerke zuzuordnen.
Beispiel Textdatei:
andreas;H;I;J
maik;H;V
ralf;H;M;Q
linus;H;I:F
magnus;H;I;Q;M
Um in der Textdatei nach dem Namen des sich gerade anmeldenden Users zu suchen habe ich folgenden Ansatz:
SET UserList=D:\Test.txt
for /f %%i in (%UserList%) do (echo %%i | if /I "%%i" == %USERNAME% echo %%i)
Damit stoße ich auf die Zeile des richtigen Users. Nun müsste ich im Prinzip alles, was in dieser Zeile nach dem ersten Trennzeichen kommt in ein Array einlesen, oder immer kurz mittels
call :Sprungmarke %%i zu meinem net use %InhaltdesFeldes%: \\IP-Adresse gehen und das so abwickeln. Bei der Array-Variante halt in einer Schleife bis zum letzten Wert.
Momentan hatte ich zum Testen nur das echo %%i drin. Wie müsste ich da jetzt weiter machen?
Vielen Dank im Voraus!
Torsten
Ach ja, wenn der User noch nicht in der Liste existiert könnte man eigentlich mit %USERNAME% >> %UserList% erstmal ohne zugeordnete Laufwerke ans Ende der Liste geschrieben werden, das wäre ja auch eine Idee. Da vergisst man dann wenigstens keinen bei neuen Usern... Aber da müsste ich irgendwann mitbekommen wenn der Name nicht gefunden wurde...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 236682
Url: https://administrator.de/forum/textdatei-zeilenweise-in-variable-schreiben-236682.html
Ausgedruckt am: 22.12.2024 um 19:12 Uhr
20 Kommentare
Neuester Kommentar
Hallo TorstenB!
Mein Ansatz zum Suchen sähe eher so aus:
Mit
könntest Du vorweg kontrollieren, ob der User schon in die Liste aufgenommen wurde.
Grüße
bastla
Mein Ansatz zum Suchen sähe eher so aus:
for /f "tokens=1* delims=;" %%i in ('findstr /ib "%username%;" "%UserList%"') do for %%a in (%%j) do echo %%a
findstr /ib "%username%;" "%UserList%">nul || echo Aktueller User nicht in Liste
Grüße
bastla
Hallo TorstenB!
und dann nach dem gleichen Schema verwenden:
Grüße
bastla
weil ich ja eh schauen muss welcher Buchstabe gerade in %%a ist, um das entsprechende Laufwerk zuzuordnen.
Ließe sich aber natürlich, so wie von Xaero1982 angeregt, ebenfalls in eine Textdatei auslagern - zBH:;\\10.20.30.40\ShareH
I:;\\10.20.30.41\ShareI
J:;\\10.20.30.41\ShareJ
for /f "tokens=1* delims=;" %%i in ('findstr /ib "%username%;" "%UserList%"') do for %%a in (%%j) do (
for /f "tokens=2 delims=;" %%s in ('findstr /ib "%%a" "ShareList%"') do net use %%a %%s /p:no
)
bastla
Hallo TorstenB!
- hier ging es aber um die Parametervariablen, und diese (%0 bis %9) sind nur mit führendem Prozentzeichen zu schreiben - schau Dir mal
Grüße
bastla
Aber kannst du mir bitte erklären warum es hier dann nicht %1% ist?
Haben die Programmierer der CMD-Shell so festgelegt - tatsächlich könntest Du eine Variable %1% auf "normalem" Weg erzeugen und verwenden:set 1=eins
echo %1%
call /?
an ...Grüße
bastla
Hallo TorstenB!
Am einfachsten wäre das über eine Temp-Datei, die nur die Usernamen enthält, zu lösen - also schematisch etwa
Die letzte Schleife liefert dann in %%i den Namen und in %%j den Rest der Zeile für jeden in der Datei "%UserListAlt%" nicht enthaltenen Namen der "%UserList%" - ein Array sollte auch hier demnach nicht nötig sein ...
Grüße
bastla
Am einfachsten wäre das über eine Temp-Datei, die nur die Usernamen enthält, zu lösen - also schematisch etwa
set "UserNamesOnly=%temp%\usernamesonly.txt"
del %UserNamesOnly% 2>nul
for /f "delims=;" %%i in (%UserListAlt%) do >>%UserNamesOnly% echo %%i;
for /f "tokens=1* delims=;" %%i in ('findstr /ibvg:%UserNamesOnly% "%UserList%"') do echo %%i_%%j
Grüße
bastla