nagus
Goto Top

Zeilen in einer Batch überspringen

Hi Zusammen,

ich stehe mal wieder auf dem Schlauch! Ich bastel gerade ein Skript um einen User Migration zu erleichtern.
Dazu lese ich per net use die gemappten Laufwerke aus und möchte diese weiter verarbeiten.
Beim suchen habe ich nix passendes gefunden (under der Schei... IE zeigt die Sseite nicht richtig an)

Ausgabe von net use:

New connections will be remembered.

Status       Local     Remote                    Network

-------------------------------------------------------------------------------
             H:        \\xxxx\yyyyy\zzzzz\userid 
                                                 Microsoft Windows Network
             K:        \\dddddd\gggggggg\hhhhhhh\SHARED 
                                                 Microsoft Windows Network
             P:        \\cccccccc\lllllll\uuuuuuu\shared
                                                 Microsoft Windows Network
             S:        \\cccccccc\lllllll\ooooooooooo\shared 
                                                 Microsoft Windows Network
             T:        \\cccccccc\lllllll\ooooooooooo\shared 
                                                 Microsoft Windows Network
The command completed successfully.

Mein Schnipsel sieht bisher so aus
set "pfad=c:\%username_alt%"  
net use > %pfad%\drives.tmp
FOR /F "skip=5 usebackq tokens=1,2,3,4* delims=\ " %%i in (%pfad%\drives.tmp) do echo %%i %%j %%k %%l %%m >>%pfad%\drives.txt  

so sieht die Ausgabe aus

H: xxxx yyyyy zzzzz userid  
Microsoft Windows Network   
K: dddddd gggggggg hhhhhhh SHARED  
Microsoft Windows Network   
P: cccccccc lllllll uuuuuuu shared   
Microsoft Windows Network   
S: cccccccc lllllll ooooooooooo shared  
Microsoft Windows Network   
T: cccccccc lllllll ooooooooooo shared 
Microsoft Windows Network   
The command completed successfully.  

Aber ich will die Zeilen die mit Microsoft anfangen und die letzte überspringen. wie bekomme ich das hin?

Schon mal danke für alle Tipps
Nagus - der auf dem Schlauch steht ....

Content-ID: 230268

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

Ausgedruckt am: 05.11.2024 um 04:11 Uhr

Biber
Biber 18.02.2014 aktualisiert um 13:19:01 Uhr
Goto Top
Moin Nagus,

du könntest (theoretisch, do not use) Ausgabe von NET USE sofort filtern mit
net use|findstr "\\"

Probier bitte am CMD-Prompt aus - aber verwenden wollen wir es nicht.

Denn dann hast du das Problem, dass mal 3, mal 4 Tokens rüberkommen, denn das erste Token "Status", das bei deinem Test immer leer ist, kann manchmal einen Wert (zB "OK") enthalten.
-> Folge: in dem Auswerten der Textdatei weiss du nie, ob das erste Token (in der Ergebniszeile) nun wirklich ein Laufwerksbuchstabe ist oder der Status.
Macht es unnötig komplex, wenn du da auch wieder Fallunterscheidungen einbauen musst.

Verwende lier eine gezielte WMIC-Abfrage auf exakt die Infos, die du brauchst.
wmic netuse get localname, remotename
...statt des NET USE... probier es am CMD-Prompt.

-> diese Ausgabe kannst du noch nachbehandeln mit | findstr "\\", um die Titelzeile wegzufiltern.

Grüße
Biber
Nagus
Nagus 18.02.2014 um 13:46:07 Uhr
Goto Top
Moin Biber,
danke, aber da habe ich keinen Zugriff drauf ...

Habe eine eigene Lösung gefunden die funktioniert

FOR /F "eol=M skip=6 usebackq tokens=1,2,3,4* delims=\ " %%i in (%pfad%\drives.tmp) do echo %%i;\\%%j\%%k\%%l\%%m >>%pfad%\drives.t1p  
FOR /F "tokens=1,2 delims=;" %%i in (%pfad%\drives.t1p) do if %%i EQU The (echo.>nul) else echo %%i %%j>>%pfad%\drives.txt  

was nur merkwürdig ist: die erste Zeile der Datei drives.txt ist leer - in den temp Dateien macht er es rcihtig .. Oo

Gruß
Nagus
Biber
Lösung Biber 18.02.2014 aktualisiert um 21:02:25 Uhr
Goto Top
Moin Nagus,

na, ein bsschen schlanker bekomme ich das auch mit net use hin.
Demo am CMD
FOR /F "tokens=1,2,3,4* " %i in ('net use^|findstr "\\"') do @if [%k]== (echo %i %j) else echo %j %k

Als Batch dann mit jeweils zwei Prozentzeichen vermutlich (ungetestet):
:: Batch SammleAlleNetUses.cmd
FOR /F "tokens=1,2,3,4* " %%i in ('net use^|findstr "\\"') do @if [%%k]== (echo %%i %%j) else echo  %%j %%k  

Glattgebügelt wird nur der Fall, dass im ersten Token "Status" etwas steht (also etwas wie "OK"/"Getrennt".)
Was passiert, wenn ein Netzlaufwerk OHNE Laufwerksangabe verbunden ist, das habe ich nicht ver- bzw. untersucht.

Grüße
Biber