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 Path
und Levels
nach 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 ','