Archivo por lotes necesario para consultar una ubicación específica

Archivo por lotes necesario para consultar una ubicación específica

No soy codificador y agradecería cualquier ayuda.

Necesito un archivo por lotes que consulte una ubicación NAS y produzca una salida de los directorios del nivel superior (y tal vez del segundo nivel inferior). La estructura del archivo es la siguiente:

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

La salida por lotes debería ser:

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

Respuesta1

Potencia Shell:

Legible por humanos:

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

Un trazador de líneas:

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

Compacto:

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

Cambia Pathy Levelscomo mejor te parezca. Y le aconsejo que cambie el separador de ,a algo como |, porque la coma está permitida en los nombres de archivos y podría generar ambigüedad. Para cambiar el separador, edite el último -join ','a -join '|'.

Bonificación: para obtener una lista de subdirectorios en múltiples rutas iniciales, separe las tablas hash al principio con una coma:

(@{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 ','

información relacionada