web-dev-qa-db-ja.com

Powershellはフォルダーをループし、各フォルダーにファイルを作成します

ディレクトリ内のすべてのフォルダーを再帰的にループしてから、各ディレクトリ内で何かを実行しようとしています。たとえば、テキストファイルを作成します。

すべてのサブフォルダーを次のように変数に入れることができます。

$folders = Get-ChildItem -Recurse | ?{ $_.PSIsContainer }

ただし、各サブディレクトリ内にファイルを作成することはできません。ファイルは代わりに最上位ディレクトリに作成されます。これは機能しません:

$folders | ForEach-Object { New-Item -ItemType file -Name "$_.txt" -path $_}

これにより、ディレクトリが見つからないか、パスが長すぎるというエラーがスローされます。

ネストされたフォルダの各サブディレクトリで何かを行うにはどうすればよいですか?

11
Adeimantus

これを試して:

Get-ChildItem -Recurse -Directory | ForEach-Object {New-Item -ItemType file -Path "$($_.FullName)" -Name "$($_.Name).txt" }

基本的に、Get-ChildItemコマンドは、一連のDirectoryInfoオブジェクトを返します。 FullNameプロパティにはフルパスが含まれ、Nameにはリーフディレクトリの名前のみが含まれます。

20
Sean