レアな例の上に適切なタイトルかわかりませんが。
あるディレクトリの子として多くのディレクトリがあり、その子ディレクトリ内にあるファイルを親ディレクトリにコピーさせます。日本語難し。
例えば下記のような状態、埼玉県内にある市町村(70個くらい)の名前が付いたディレクトリがあり、その中にファイルが格納されています。
D:\basepoint\さいたま市\さいたま市.csv
D:\basepoint\川越市\川越市改算.csv
D:\basepoint\川越市\点検図川越.pdf
D:\basepoint\熊谷市\熊谷市.csv
D:\basepoint\川口市\川口市変更.csv
・
・
・
D:\basepoint\蕨市\蕨市.csv
それをこんな感じにしたいわけです。
D:\basepoint\さいたま市.csv
D:\basepoint\川越市改算.csv
D:\basepoint\点検図川越.pdf
D:\basepoint\熊谷市.csv
D:\basepoint\川口市変更.csv
・
・
・
D:\basepoint\蕨市.csv
で、操作はD:\basepoint\
にcd
した後に下記のようなコマンドイッパツで。
Get-ChildItem -Recurse -Name | Where-Object { Test-Path $_ -PathType Leaf } | Where-Object { Copy-Item $_ ./ }
特定の拡張子、例えばCSVファイルだけ取りたければSelect-String "csv"
を追加して
Get-ChildItem -Recurse -Name | Where-Object { Test-Path $_ -PathType Leaf } | Select-String "csv" | Where-Object { Copy-Item $_ ./ }
こんな感じ。
Get-ChildItem -Recurse -Name
でカレントディレクトリ以下にあるファイルとディレクトリを再帰的に取得します。
パイプで繋いでWhere-Object { Test-Path $_ -PathType Leaf }
で取得したパスがファイルであるもののみを取得します。
最後にWhere-Object { Copy-Item $_ ./ }
でファイルをカレントディレクトリにコピーして終わり。
エクスプローラでD:\basepoint\
を開いてF3
キーを押した後に検索条件入れてコピペした方が楽で早いなんてご意見もあると思いますが、PoerShellでやってみたかったんですよ…。