2

今日、私は Windows PowerShell でスクリプトを書き始めました。

ドライブ G: の各「ルートフォルダー」のサブフォルダーの名前で txt ファイルを作成したいと考えています。G:\ には、次のフォルダーがあります。

1_data
2_IT_area
3_personal
4_apprenticeship
7_backup
8_archives
9_user_profile

だから私はこのスクリプトを書いた:

get-childitem G:\ | ForEach-Object -process {gci $_.fullName -R} | WHERE {$_.PSIsContainer} > T:\listing\fileListing+$_.Name+.txt

しかし、スクリプトは私が望んでいることをしていません.1つのテキストファイルしか作成していません..助けてもらえますか? ここで説明されているように、すでに試しました >> http://www.powershellpro.com/powershell-tutorial-introduction/variables-arrays-hashes/ "T:\listing\$_.Name.txt" - としては機能しません良い...

どうもありがとうございました!

-パトリック

4

1 に答える 1

3

これはあなたが望むことをするはずです:

Get-ChildItem G:\ | Where {$_.PSIsContainer} | 
    Foreach {$filename = "T:\fileListing_$($_.Name).txt"; 
             Get-ChildItem $_ -Recurse > $filename} 

これをインタラクティブに入力する場合 (エイリアスを使用):

gci G:\ | ?{$_.PSIsContainer} | %{$fn = "T:\fileListing_$($_.Name).txt"; 
                                  gci $_ -r > $fn} 

通常、$_特別な変数は{ ... }、Foreach-Object、Where-Object、またはその他のパイプライン関連のスクリプト ブロックのスクリプト ブロック内でのみ有効です。したがって、次のファイル名の構成T:\listing\fileListing+$_.Name+.txtは正しくありません。通常、次のように文字列内の変数を展開します。

$name = "John"
"His name is $name"

ただし、 with のようにオブジェクトのメンバーにアクセスする場合は$_.Name、文字列内で式を実行できる必要があります。部分式演算子を使用してそれを行うことができます$()

"T:\listing\fileListing_$($_.Name).txt"

$_ファイル名文字列の構成はさておき、スクリプトブロックの外では使用できません。したがって、ファイル名の構成を Foreach スクリプト ブロック内に移動するだけです。次に、関連するディレクトリの内容をそのファイル名にリダイレクトして、そのファイルを作成します。これにより、ファイルが作成されます。

于 2010-10-17T16:30:40.850 に答える