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-Key: 230268

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

Printed on: April 20, 2024 at 01:04 o'clock

Member: Biber
Biber Feb 18, 2014 updated at 12:19:01 (UTC)
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
Member: Nagus
Nagus Feb 18, 2014 at 12:46:07 (UTC)
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
Member: Biber
Solution Biber Feb 18, 2014 updated at 20:02:25 (UTC)
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