Zeilen aus Datei auf einem Netzwerkspeicher einlesen und NUMMERIERT auflisten in BATCH
Hallo,
Ich möchte mithilfe einer Batchdatei verschiedene Netzwerkfreigaben eines Benutzers nummeriert auflisten. Diese sind in einer Datei auf dem gleichen Server abgespeichert, worauf das Programm Zugriff hat, und die eingelesen wird und dann eben nummeriert aufgelistet werden sollte. Daraufhin darf der Benutzer entscheiden welche er öffnen will und die jeweilige Netzwerk Freigabe wird dann im Explorer geöffnet. Das ganze habe ich so versucht:
Die ersten beiden Freigaben stehen dabei nicht in dieser Datei, da sie für jeden Benutzer existieren und in der Datei nur die individuellen Freigaben des Benutzers aufgelistet sind.
Dabei klappt alles super, jedoch werden außer der "1" und der "2" keine Nummern vor den aufgelisteten Freigaben angezeigt. Gibt der Benutzer aber die Nummer ein, die eigentlich dort stehen sollte öffnet das Programm auch die richtige Freigabe im Explorer.
Dementsprechend wäre meine Frage, wie die Auflistung klappen kann, liegt der Fehler vielleicht in der FOR-Schleife?
Vielen Dank im Voraus
Fabian Haas
Ich möchte mithilfe einer Batchdatei verschiedene Netzwerkfreigaben eines Benutzers nummeriert auflisten. Diese sind in einer Datei auf dem gleichen Server abgespeichert, worauf das Programm Zugriff hat, und die eingelesen wird und dann eben nummeriert aufgelistet werden sollte. Daraufhin darf der Benutzer entscheiden welche er öffnen will und die jeweilige Netzwerk Freigabe wird dann im Explorer geöffnet. Das ganze habe ich so versucht:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
:: Sprungmarke, zu der nach dem Auswählen und Öffnen einer Freigabe zurückgekehrt wird
:shares
:: legt den Titel als "Ihre Ordner" fest
title="Ihre Ordner"
:: löscht den Bildschirminhalt
cls
:: gestaltet das Layout und listet die Freigaben "home" und "share" auf
echo.
echo -------------------
echo - -
echo - Ihre Ordner -
echo - -
echo -------------------
echo.
echo 1 --- Eigener Ordner
echo.
echo 2 --- Gemeinsamer Ordner
echo.
:: liest die Datei des Benutzers zeilenweise ein und listet dessen Freigaben auf
echo 2 > "%USERPROFILE%\NLTEMP.txt"
for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
set /p NLTEMP=<"%USERPROFILE%\NLTEMP.txt"
set /a NL=%NLTEMP%+1
echo %NL% --- %%i Ordner
echo.
echo %NL% > "%USERPROFILE%\NLTEMP.txt"
)
:: legt die zu öffnende Freigabe fest
echo Bitte geben Sie die Nummer des zu oeffnenden Ordners an
echo und bestaetigen Sie diese mit ENTER:
echo.
set /p NS=
if "%NS%" == "1" goto home
if "%NS%" == "2" goto share
set /a NSTEMP=%NS%-3
for /f "usebackq skip=%NSTEMP%" %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
echo %%i> "%USERPROFILE%\share.txt"
)
:: öffnet die ausgewählte Freigabe (ausgenommen "home" und "share") und kehrt zur Sprungmarke "shares" zurück
set /p SHARE=<"%USERPROFILE%\share.txt"
start explorer.exe "\\%SERVERIP%\%SHARE%"
goto shares
:: Sprungmarke, um das Homeverzeichnis des Benutzers zu öffnen und dann zur Sprungmarke "shares" zurückzukehren
:home
start explorer.exe "\\%SERVERIP%\%USERNAME%"
goto shares
:: Sprungmarke, um die Freigabe "share" zu öffnen und dann zur Sprungmarke "shares" zurückzukehren
:share
start explorer.exe "\\%SERVERIP%\share"
goto shares
:: kehrt zur Sprungmarke "shares" zurück
goto shares
Die ersten beiden Freigaben stehen dabei nicht in dieser Datei, da sie für jeden Benutzer existieren und in der Datei nur die individuellen Freigaben des Benutzers aufgelistet sind.
Dabei klappt alles super, jedoch werden außer der "1" und der "2" keine Nummern vor den aufgelisteten Freigaben angezeigt. Gibt der Benutzer aber die Nummer ein, die eigentlich dort stehen sollte öffnet das Programm auch die richtige Freigabe im Explorer.
Dementsprechend wäre meine Frage, wie die Auflistung klappen kann, liegt der Fehler vielleicht in der FOR-Schleife?
Vielen Dank im Voraus
Fabian Haas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 229219
Url: https://administrator.de/forum/zeilen-aus-datei-auf-einem-netzwerkspeicher-einlesen-und-nummeriert-auflisten-in-batch-229219.html
Ausgedruckt am: 15.04.2025 um 17:04 Uhr
10 Kommentare
Neuester Kommentar
Hallo Fabian-Haas und willkommen im Forum!
Wenn Du innerhalb einer Klammer Variablenwerte änderst, brauchst Du "
und dann
Das Zwischenspeichern des Zählers in einer Datei wäre übrigens nicht nötig - Du könntest das auch einfach so lösen:
Damit es auch mit der Eingabe 3 klappt, könntest Du noch den Auswahlteil etwa so ändern:
Grüße
bastla
P.S.: "Code"-Blöcke müssen mit einem Ende-Tag </code> beendet werden ...
Wenn Du innerhalb einer Klammer Variablenwerte änderst, brauchst Du "
delayedExpansion
", um diese geänderten Werte gleich verwenden zu können - daher vorweg (noch vor der Sprungmarke ":shares")setlocal enabledelayedexpansion
1
2
3
4
2
3
4
set /a NL=!NLTEMP!+1
echo !NL! --- %%i Ordner
echo.
echo !NL! > "%USERPROFILE%\NLTEMP.txt
1
2
3
4
5
6
2
3
4
5
6
set /a NL=2
for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
set /a NL+=1
echo !NL! --- %%i Ordner
echo.
)
1
2
3
4
5
6
2
3
4
5
6
set /p NS=
if "%NS%" == "1" goto home
if "%NS%" == "2" goto share
set /a NSTEMP=%NS%-3
set "SHARE="
for /f %%i in ('more +%NSTEMP% \\%SERVERIP%\shares\%USERNAME%.txt') do if not defined SHARE set "SHARE=%%i"
bastla
P.S.: "Code"-Blöcke müssen mit einem Ende-Tag </code> beendet werden ...