查詢特定位置所需的批次文件

查詢特定位置所需的批次文件

我不是編碼員,希望得到任何幫助。

我需要一個批次文件,它將查詢 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 ','

改變PathLevels按照你認為合適的方式進行。我建議您將分隔符號變更為,類似 的內容|,因為檔案名稱中允許使用逗號,並且可能會導致歧義。若要變更分隔符,請將 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 ','

相關內容