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

0

Eu não sou um programador e gostaria de receber ajuda.

Eu preciso de um arquivo em lote que irá consultar uma localização do NAS e produzir uma saída dos diretórios de nível superior (e talvez o segundo nível abaixo). 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 em lote precisaria ser:

\NAS-ip\home\user1,\NAS-ip\home\user2,\NAS-ip\home\user3,\NAS-ip\home\user4 … etc.
    
por Hondo 12.08.2014 / 14:23

1 resposta

0

Powershell:

legível:

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

One-liner:

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

Compact:

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

Altere Path e Levels como achar melhor. E eu aconselho você a mudar o separador de , para algo como | , porque vírgula é permitida em nomes de arquivos e pode levar a ambigüidade. Para alterar o separador, edite a última -join ',' para -join '|' .

Bônus: para obter uma lista de subdiretórios em vários caminhos iniciais, separe as hashtabes 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 ','
    
por 13.02.2015 / 15:15