특정 위치를 쿼리하는 데 필요한 배치 파일

특정 위치를 쿼리하는 데 필요한 배치 파일

저는 코더가 아니며 도움을 주시면 감사하겠습니다.

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

파워셸:

사람이 읽을 수 있는 것:

(@{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. 그리고 파일 이름에 쉼표가 허용되어 모호해질 수 있으므로 구분 기호를 에서 ,와 같은 것으로 변경하는 것이 좋습니다 . |구분 기호를 변경하려면 마지막을 -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 ','

관련 정보