Zum Abfragen eines bestimmten Standorts wird eine Batchdatei benötigt

Zum Abfragen eines bestimmten Standorts wird eine Batchdatei benötigt

Ich bin kein Programmierer und würde mich über jede Hilfe freuen.

Ich brauche eine Batchdatei, die einen NAS-Speicherort abfragt und eine Ausgabe der Verzeichnisse der oberen Ebene (und möglicherweise der zweiten Ebene darunter) erzeugt. Die Dateistruktur ist wie folgt:

\\NAS-ip\home\user1
\\NAS-ip\home\user2
\\NAS-ip\home\user3
\\NAS-ip\home\user4
\\NAS-ip\home\user99

Die Batchausgabe müsste wie folgt aussehen:

\\NAS-ip\home\user1,\\NAS-ip\home\user2,\\NAS-ip\home\user3,\\NAS-ip\home\user4 … etc.

Antwort1

Power Shell:

Für Menschen lesbar:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} |
    ForEach-Object {
        Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) |
            Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName
    }) -join ','

Einzeiler:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} | ForEach-Object {Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) | Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName}) -join ','

Kompakt:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} | % {gci ($_.Path + ((@('\*') * $_.Levels) -join '')) | ? {$_.PsIsContainer} | select -Exp FullName}) -join ','

Ändern Sie Pathund Levelsnach Belieben. Und ich rate Ihnen, das Trennzeichen von ,in etwas wie zu ändern |, da Kommas in Dateinamen zulässig sind und zu Mehrdeutigkeiten führen können. Um das Trennzeichen zu ändern, bearbeiten Sie zuletzt -join ','in -join '|'.

Bonus: Um eine Liste der Unterverzeichnisse in mehreren Anfangspfaden zu erhalten, trennen Sie die Hashtabellen am Anfang mit einem Komma:

(@{Path = '\\NAS-ip\home' ; Levels = '2'}, @{Path = '\\NAS2-ip\somedir' ; Levels = '3'} |
    ForEach-Object {
        Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) |
            Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName
    }) -join ','

verwandte Informationen