質問

今日、私はWindows Powershellでスクリプトを始めました - だから私の「愚かさ」を許してください...

ドライブG:に各「ルートフォルダー」のサブフォルダーの名前を付けてTXT-FILEを作成したい。 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" - もうまくいきません...

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

- パトリック

役に立ちましたか?

解決

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

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} 

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

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

ただし、次のようなオブジェクトのメンバーにアクセスするとき $_.Name 次に、文字列内で式を実行できる必要があります。サブエクスペッション演算子を使用してそれを行うことができます $() 例えば:

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top