+ C:
+ Box
+ Pen.txt
+ Eraser.html
とあるとき、
+ C:
+ PenCase
+ Pen.txt
+ Eraser.html
と別のディレクトリーに丸ごとコピーしたいときがあるだろ。試した結果から言ってしまうと、ここでやることは
copy.ps1
# コピー先ディレクトリの存在確認。
if (Test-Path "C:\PenCase") {
# あれば中身を全部消す。
Remove-Item "C:\PenCase\*" -Recurse
} else {
# なければ作る。
New-Item -ItemType Directory -Path "C:\PenCase"
}
# コピー元の中身をすべて指定し、コピー先はディレクトリを指定する。(ややこし……)
Copy-Item "C:\Box\*" "C:\PenCase"
ディレクトリーなんてものは 看板で書かれた住所みたいなもので存在せず、あくまで ファイルをコピーする、
という物の見方をすればいいらしい。
変数を使ってみよう。
copy.ps1
# Trailing NOT slash.
$origin = "C:\Box"
$clone = "C:\PenCase"
# コピー先ディレクトリの存在確認。
if (Test-Path $clone) {
# あれば中身を全部消す。
$dst = $clone + "\*"
Remove-Item $dst -Recurse
} else {
# なければ作る。
New-Item -ItemType Directory -Path $clone
}
# コピー元の中身をすべて指定し、コピー先はディレクトリを指定する。(ややこし……)
$src = $origin + "\*"
Copy-Item $src $clone
ファイルの冒頭で Path を一覧しておき、その後は 親ディレクトリには戻るなだぜ。
よく オリジン の中身を消したり、
自分を自分の中にコピーして 再帰的にファイルが増えて 3000個のファイルをゴミ箱に送るはめになったりする。
そういう不注意をなるべく減らそうぜ。