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, 1374 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

Nummerierte dateien lücke finden .batch

Frage von franky89Batch & Shell2 Kommentare

hallo zusammen :) ich habe eine Vielzahl an Dateien mit Messwerten die folgender maßen aussehen: xxxx0001_000.txt xxxx0002_000.txt xxxx0003_000.txt xxxx0004_000.txt ...

Batch & Shell

BATCH - Zeile(n) aus Log-Datei in eine Archiv-Datei nur wenn nicht vorhanden einlesen

gelöst Frage von BlattlausOGBatch & Shell18 Kommentare

Hallo, dieser Einzeiler fügt mir Zeile für Zeile den Inhalt von d:\log in d:\archiv.txt untereinander ein. Was muss geändert ...

Batch & Shell

Batch - Datei aus Ordner einlesen mit Ausnahmen!

gelöst Frage von DaedrafactionBatch & Shell4 Kommentare

Hallo! Ich bin halb am verzweifeln Ich möchte bestimmte Datei aus einem Ordner auslesen und in eine Datei speichern. ...

Batch & Shell

Mehrere txt Dateien einlesen und letzte Zeile löschen

gelöst Frage von THRILLERBatch & Shell1 Kommentar

Hallo Gemeinde, ich beschäftige mich mit folgendem Problem. Und zwar will ich aus einem Ordner mehrere Dateien einlesen und ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 2 TagenAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 2 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

Grafikkarten & Monitore
4k EIZO Monitor, Fernseher und Splitter
Frage von LerxxeyGrafikkarten & Monitore9 Kommentare

Hallo Zusammen, vielleicht könnt ihr mir bei einem Problem helfen wo ich einfach nicht mehr weiterkomme Und zwar haben ...

Router & Routing
WRT keine Verbindung zum Web Interface
Frage von ILeonardRouter & Routing9 Kommentare

Hallo, Ich habe einen TP-Link WR841n mit wrt geflasht, das Problem ist ich kann mich mit 192.168.1.1 nicht verbinden. ...

Humor (lol)
Nerd Zeitschrift gesucht
Frage von 2SeitenHumor (lol)6 Kommentare

Hey Zusammen, Ich suche eine Zeitschrift bei der es ums technische Basteln geht. Pc zusammenschrauben, Arduino Projekte, Server Tipps ...