Não sou um programador e agradeceria qualquer ajuda.
Preciso de um arquivo em lote que consulte um local NAS e produza uma saída dos diretórios de nível superior (e talvez do segundo nível inferior). A estrutura do arquivo é a seguinte:
\\NAS-ip\home\user1
\\NAS-ip\home\user2
\\NAS-ip\home\user3
\\NAS-ip\home\user4
︙
\\NAS-ip\home\user99
A saída do lote precisaria ser:
\\NAS-ip\home\user1,\\NAS-ip\home\user2,\\NAS-ip\home\user3,\\NAS-ip\home\user4 … etc.
Responder1
Concha de energia:
Legível por humanos:
(@{Path = '\\NAS-ip\home' ; Levels = '2'} |
ForEach-Object {
Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) |
Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName
}) -join ','
Uma linha:
(@{Path = '\\NAS-ip\home' ; Levels = '2'} | ForEach-Object {Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) | Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName}) -join ','
Compactar:
(@{Path = '\\NAS-ip\home' ; Levels = '2'} | % {gci ($_.Path + ((@('\*') * $_.Levels) -join '')) | ? {$_.PsIsContainer} | select -Exp FullName}) -join ','
Mude Path
e Levels
como achar melhor. E eu aconselho você a alterar o separador de ,
para algo como |
, porque a vírgula é permitida em nomes de arquivos e pode causar ambiguidade. Para alterar o separador, edite o último -join ','
para -join '|'
.
Bônus: para obter uma lista de subdiretórios em vários caminhos iniciais, separe as tabelas hash no início com vírgula:
(@{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 ','