私はプログラマーではないので、どんな助けでもいただければ幸いです。
NAS の場所を照会し、上位レベルのディレクトリ (およびおそらく 2 番目下のレベル) の出力を生成するバッチ ファイルが必要です。ファイル構造は次のとおりです。
\\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
を変更してください。また、ファイル名にはコンマが許可されており、あいまいさが生じる可能性があるため、区切り文字を などに変更することをお勧めします。区切り文字を変更するには、 lastを に編集します。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 ','