Arquivo em lote necessário para consultar um local específico

Arquivo em lote necessário para consultar um local específico

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 Pathe Levelscomo 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 ','

informação relacionada