ディレクトリ内のすべてのフォルダーを再帰的にループしてから、各ディレクトリ内で何かを実行しようとしています。たとえば、テキストファイルを作成します。
すべてのサブフォルダーを次のように変数に入れることができます。
$folders = Get-ChildItem -Recurse | ?{ $_.PSIsContainer }
ただし、各サブディレクトリ内にファイルを作成することはできません。ファイルは代わりに最上位ディレクトリに作成されます。これは機能しません:
$folders | ForEach-Object { New-Item -ItemType file -Name "$_.txt" -path $_}
これにより、ディレクトリが見つからないか、パスが長すぎるというエラーがスローされます。
ネストされたフォルダの各サブディレクトリで何かを行うにはどうすればよいですか?
これを試して:
Get-ChildItem -Recurse -Directory | ForEach-Object {New-Item -ItemType file -Path "$($_.FullName)" -Name "$($_.Name).txt" }
基本的に、Get-ChildItem
コマンドは、一連のDirectoryInfo
オブジェクトを返します。 FullName
プロパティにはフルパスが含まれ、Name
にはリーフディレクトリの名前のみが含まれます。