Top-Themen

Aktuelle Themen (A bis Z)

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 Zeilen aus Datei auf einem Netzwerkspeicher einlesen und NUMMERIERT auflisten in BATCH

Mitglied: Fabian-Haas

Fabian-Haas (Level 1) - Jetzt verbinden

09.02.2014, aktualisiert 11.02.2014, 1430 Aufrufe, 10 Kommentare, 4 Danke

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:

01.
:: Sprungmarke, zu der nach dem Auswählen und Öffnen einer Freigabe zurückgekehrt wird
02.
   :shares
03.

04.
:: legt den Titel als "Ihre Ordner" fest
05.
   title="Ihre Ordner"
06.

07.
:: löscht den Bildschirminhalt 
08.
   cls
09.

10.
:: gestaltet das Layout und listet die Freigaben "home" und "share" auf
11.
   echo.
12.
   echo           -------------------
13.
   echo           -                 -
14.
   echo           -   Ihre Ordner   -
15.
   echo           -                 -
16.
   echo           -------------------
17.
   echo.
18.
   echo   1 --- Eigener Ordner
19.
   echo.
20.
   echo   2 --- Gemeinsamer Ordner
21.
   echo.
22.

23.
:: liest die Datei des Benutzers zeilenweise ein und listet dessen Freigaben auf
24.
   echo 2 > "%USERPROFILE%\NLTEMP.txt"
25.
   for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
26.
       set /p NLTEMP=<"%USERPROFILE%\NLTEMP.txt"
27.
       set /a NL=%NLTEMP%+1
28.
       echo   %NL% --- %%i Ordner
29.
       echo.
30.
       echo %NL% > "%USERPROFILE%\NLTEMP.txt"
31.
       )
32.

33.
:: legt die zu öffnende Freigabe fest
34.
   echo Bitte geben Sie die Nummer des zu oeffnenden Ordners an
35.
   echo und bestaetigen Sie diese mit ENTER:
36.
   echo.
37.
   set /p NS=
38.
   if "%NS%" == "1" goto home
39.
   if "%NS%" == "2" goto share
40.
   set /a NSTEMP=%NS%-3
41.
   for /f "usebackq skip=%NSTEMP%" %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
42.
       echo %%i> "%USERPROFILE%\share.txt"
43.
       )
44.

45.
:: öffnet die ausgewählte Freigabe (ausgenommen "home" und "share") und kehrt zur Sprungmarke "shares" zurück
46.
   set /p SHARE=<"%USERPROFILE%\share.txt"
47.
   start explorer.exe "\\%SERVERIP%\%SHARE%"
48.
   goto shares
49.

50.
:: Sprungmarke, um das Homeverzeichnis des Benutzers zu öffnen und dann zur Sprungmarke "shares" zurückzukehren 
51.
   :home
52.
   start explorer.exe "\\%SERVERIP%\%USERNAME%"
53.
   goto shares
54.

55.
:: Sprungmarke, um die Freigabe "share" zu öffnen und dann zur Sprungmarke "shares" zurückzukehren 
56.
   :share
57.
   start explorer.exe "\\%SERVERIP%\share"
58.
   goto shares
59.

60.
:: kehrt zur Sprungmarke "shares" zurück
61.
   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
Mitglied: bastla
LÖSUNG 09.02.2014, aktualisiert 11.02.2014
Hallo Fabian-Haas und willkommen im Forum!

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
und dann
01.
set /a NL=!NLTEMP!+1
02.
echo !NL! --- %%i Ordner
03.
echo.
04.
echo !NL! > "%USERPROFILE%\NLTEMP.txt
Das Zwischenspeichern des Zählers in einer Datei wäre übrigens nicht nötig - Du könntest das auch einfach so lösen:
01.
set /a NL=2
02.
for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
03.
    set /a NL+=1
04.
    echo !NL! --- %%i Ordner
05.
    echo.
06.
)
Damit es auch mit der Eingabe 3 klappt, könntest Du noch den Auswahlteil etwa so ändern:
01.
set /p NS=
02.
if "%NS%" == "1" goto home
03.
if "%NS%" == "2" goto share
04.
set /a NSTEMP=%NS%-3
05.
set "SHARE="
06.
for /f %%i in ('more +%NSTEMP% \\%SERVERIP%\shares\%USERNAME%.txt') do if not defined SHARE set "SHARE=%%i"
Grüße
bastla

P.S.: "Code"-Blöcke müssen mit einem Ende-Tag </code> beendet werden ...
Bitte warten ..
Mitglied: Fabian-Haas
09.02.2014 um 21:00 Uhr
Hallo bastla,

erstmal vielen Dank für die schnelle Antwort.
Wenn ich jetzt weiterhin die Variable zwischenspeichere (der Gewohnheit halber und weil mir vorher gesagt wurde, dass das sonst nicht mit der FOR-Schleife funktionieren würde), muss der Code dann so aussehen:
01.
   echo 2 > "%USERPROFILE%\NLTEMP.txt"
02.
   for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
03.
       set /p NLTEMP=<"%USERPROFILE%\NLTEMP.txt"
04.
       set /a NL=!NLTEMP!+1
05.
       echo   !NL! --- %%i Ordner
06.
       echo.
07.
       echo !NL! > "%USERPROFILE%\NLTEMP.txt"
08.
       )
oder müsste ich nicht eigentlich ebenfalls die Variable "USERPROFILE" mit Ausrufezeichen umgeben?, also so:
01.
   echo 2 > "%USERPROFILE%\NLTEMP.txt"
02.
   for /f %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
03.
       set /p NLTEMP=<"!USERPROFILE!\NLTEMP.txt"
04.
       set /a NL=!NLTEMP!+1
05.
       echo   !NL! --- %%i Ordner
06.
       echo.
07.
       echo !NL! > "%USERPROFILE%\NLTEMP.txt"
08.
       )
Schon mal danke
Fabian Haas
Bitte warten ..
Mitglied: Fabian-Haas
09.02.2014 um 22:49 Uhr
Okay ich habs verstanden, es geht ja nur um die variablen, die in Klammern GEÄNDERT werden. ;) Es hat also genau so geklappt, wie du es meintest.

Nochmals Danke
Fabian Haas
Bitte warten ..
Mitglied: Fabian-Haas
10.02.2014, aktualisiert um 21:48 Uhr
Jetzt tritt bei mir doch noch ein Problem auf leider :/. Ich habe die Hilfen so versucht umzusetzen, dass meine Batch-Datei jetzt so aussieht:
01.
:: erlaubt Variablen in Klammern zu ändern
02.
   setlocal enabledelayedexpansion
03.

04.
:: Sprungmarke, zu der nach dem Auswählen und Öffnen einer Freigabe zurückgekehrt wird
05.
   :shares
06.

07.
:: legt den Titel als "Ihre Ordner" fest
08.
   title="Ihre Ordner"
09.

10.
:: löscht den Bildschirminhalt 
11.
   cls
12.

13.
:: gestaltet das Layout und listet die Freigaben "home" und "share" auf
14.
   echo.
15.
   echo           -------------------
16.
   echo           -                 -
17.
   echo           -   Ihre Ordner   -
18.
   echo           -                 -
19.
   echo           -------------------
20.
   echo.
21.
   echo   1 --- Eigener Ordner
22.
   echo.
23.
   echo   2 --- Gemeinsamer Ordner
24.
   echo.
25.

26.
:: liest die Datei des Benutzers zeilenweise ein und listet dessen Freigaben auf
27.
   echo 2 > "%USERPROFILE%\NLTEMP.txt"
28.
   for /f "tokens=2 delims=:" %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
29.
       set /p NLTEMP=<"%USERPROFILE%\NLTEMP.txt"
30.
       set /a NL=!NLTEMP!+1
31.
       echo   !NL! --- %%i Ordner
32.
       echo.
33.
       echo !NL! > "%USERPROFILE%\NLTEMP.txt"
34.
       )
35.
       
36.
:: legt die zu öffnende Freigabe fest
37.
   echo Bitte geben Sie die Nummer des zu oeffnenden Ordners an
38.
   echo und bestaetigen Sie diese mit ENTER:
39.
   echo.
40.
   set /p NS=
41.
   if "%NS%" == "1" goto home
42.
   if "%NS%" == "2" goto share
43.
   set /a NSTEMP=%NS%-3
44.
   if NOT %NSTEMP% == "0" (
45.
       for /f "usebackq skip=%NSTEMP% tokens=2 delims=:" %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do (
46.
           echo %%i> "%USERPROFILE%\share.txt"
47.
           goto openshare1
48.
           )
49.
       ) else (
50.
         pause
51.
         for /f %%i in ('more +%NSTEMP% \\%SERVERIP%\shares\%USERNAME%.txt') do (
52.
             set SHARE=""
53.
             if not defined SHARE set SHARE=%%i
54.
             goto openshare2
55.
             )
56.
       )
57.

58.
:: öffnet die ausgewählte Freigabe (ausgenommen "home" und "share") und kehrt zur Sprungmarke "shares" zurück
59.
   :openshare1
60.
   set /p SHARE=<"%USERPROFILE%\share.txt"
61.
   :openshare2
62.
   start explorer.exe "\\%SERVERIP%\%SHARE%"
63.
   goto shares
64.

65.
:: Sprungmarke, um das Homeverzeichnis des Benutzers zu öffnen und dann zur Sprungmarke "shares" zurückzukehren 
66.
   :home
67.
   start explorer.exe "\\%SERVERIP%\%USERNAME%"
68.
   goto shares
69.

70.
:: Sprungmarke, um die Freigabe "share" zu öffnen und dann zur Sprungmarke "shares" zurückzukehren 
71.
   :share
72.
   start explorer.exe "\\%SERVERIP%\share"
73.
   goto shares
74.

75.
:: kehrt zur Sprungmarke "shares" zurück
76.
   goto shares
Dabei klappt das Aufrufen der dritten Freigabe jedoch immer noch nicht ;(. und mir fällt absolut keine Erklärung dazu ein. Weiß jemand da vielleicht Rat?

Vielen Dank im Vorraus
Fabian Haas

PS: Leider weiß ich nicht, wie man eine Frage wieder als ungelöst markieren kann.
Bitte warten ..
Mitglied: bastla
LÖSUNG 10.02.2014, aktualisiert 11.02.2014
Hallo Fabian-Haas!

Mit vertauschten Zeilen 51 und 52 (und der Angabe von tokens und delims wie in Zeile 45) sollte das klappen ...

Grüße
bastla
Bitte warten ..
Mitglied: Fabian-Haas
10.02.2014 um 23:05 Uhr
Hallo Bastler,

danke für die Antwort. Leider funktioniert es auch dann nicht. Außerdem komme ich nie bei einer Pause an (die Pause in Zeile 50). Funktioniert dann die If-Abfrage nicht?

Schon mal Danke
Fabian Haas
Bitte warten ..
Mitglied: bastla
LÖSUNG 10.02.2014, aktualisiert 11.02.2014
Hallo Fabian-Haas!

Die Anführungszeichen in der Zeile 44 hatte ich leider übersehen - entweder verwendest Du sie auf beiden Seiten oder auf keiner, daher zB
if NOT "%NSTEMP%"=="0" (
Grüße
bastla
Bitte warten ..
Mitglied: Fabian-Haas
11.02.2014 um 17:51 Uhr
Hallo Bastla,

das habe ich jetzt auch ausprobiert, leider ohne Erfolg :/. Allerdings wird mir jetzt die Pause in Zeile 50 angezeigt. Müsste der Fehler dann nicht in den Zeilen 51-56 liegen?

Viele Grüße
Fabian Haas
Bitte warten ..
Mitglied: bastla
LÖSUNG 11.02.2014, aktualisiert um 21:02 Uhr
Hallo Fabian-Haas!

Ersetze die Zeilen 51 - 54 durch
01.
set "SHARE="
02.
for /f "usebackq tokens=2 delims=:" %%i in (\\%SERVERIP%\shares\%USERNAME%.txt) do if not defined SHARE set "SHARE=%%i"
03.
goto openshare2
Grüße
bastla
Bitte warten ..
Mitglied: Fabian-Haas
11.02.2014 um 21:05 Uhr
Okay jetzt klappt alles genauso, wie ich es wollte. Perfekt!

Also nochmals Vielen Dank für die schnellen und aufschlussreichen Antworten (auf meine zum Teil vielleicht etwas dämlichen Fragen ) und aber auch für die herzliche Aufnahme ins Forum.

Nochmals Danke
Fabian Haas
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell
Batch Datei Ordnerüberwachung
Frage von Phant0xBatch & Shell1 Kommentar

Hallo zusammen, könntet ihr mir helfen eine Batch Datei zu schreiben, die einen bestimmten Ordner kontrolliert, ob sich Dateien ...

Batch & Shell
Batch-Datei erstellen
gelöst Frage von tocksickBatch & Shell2 Kommentare

Hallo liebe Gemeinde! Ich bin dabei eine Batch-Datei zu schreiben welche folgendes tun soll: Die Batch soll alle auf ...

Batch & Shell
Batch Datei Kopieren
gelöst Frage von FragerBatch & Shell17 Kommentare

Hallo Zusammen, ich bekomme es nicht hin ich muss aus einem Ordner (liegt auf einem Server) eine von vielen ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 4 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 5 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik11 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...