Пакетный файл, необходимый для запроса определенного местоположения

Пакетный файл, необходимый для запроса определенного местоположения

Я не программист и буду признателен за любую помощь.

Мне нужен пакетный файл, который будет запрашивать местоположение NAS и выдавать вывод каталогов верхнего уровня (и, возможно, второго уровня ниже). Структура файла следующая:

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

Выходные данные партии должны быть:

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

решение1

Powershell:

Человек читаемый:

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

Один лайнер:

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

Компактный:

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

Измените Pathи Levelsтак, как считаете нужным. И я советую вам изменить разделитель с ,на что-то вроде |, потому что запятая разрешена в именах файлов и может привести к неоднозначности. Чтобы изменить разделитель, измените last -join ','на -join '|'.

Бонус: чтобы получить список подкаталогов в нескольких начальных путях, разделите хеш-таблицы в начале запятой:

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

Связанный контент