LoginSignup
5
4

More than 5 years have passed since last update.

多くのディレクトリの中にある、それぞれのファイルを一つ上のディレクトリにコピーする

Posted at

レアな例の上に適切なタイトルかわかりませんが。
あるディレクトリの子として多くのディレクトリがあり、その子ディレクトリ内にあるファイルを親ディレクトリにコピーさせます。日本語難し。
例えば下記のような状態、埼玉県内にある市町村(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でやってみたかったんですよ…。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4