銀河鉄道

PowerShell|copy-item でフォルダ•ファイルをコピーする

サムネイル
copy-item$src -destination$dst -recurse
クリックせずに
コピーする

たとえば
こんなとき

  • フォルダごとデスクトップにコピーしたい
    • 元のデータを壊したくない
    • ネットワークフォルダからデスクトップに移動したい

copy-item $src -destination $dst -recurse

パスを分割するのは
最後に開くため

# パス準備
$src1 = "folder_path1"
$src2 = "folder_path2"
$src3 = "folder_path3"

$src = "$src1¥$src2¥$src3"
$dst = [System.Environment]::GetFolderPath('Desktop')

$isFolder = test-path $src -pathtype container
copy-item $src -destination $dst -recurse:$isFolder

# 開く
if ($isFolder) {
    start-process explorer.exe "$dst\$src3" # フォルダの場合
} else {
    start-process "$dst\$src3" # フォルダ以外(ファイル)の場合
}

テキストファイルに保存し
一気にコピペ
Enterは一回だけでOK

パスを分割するメリット
  • 最初のパスは同じで、最後のフォルダ名だけ変えるのに便利
  • 最後に開く場合、ピンポイントで指定できる

-destination(目的地)

目的地はここだよ

$src -destination $dst
  • $src の目的地は $dst だよ

-recurse

中身丸ごと、まとめて持っていってね

copy-item $src -destination $dst -recurse
  • $src の目的地は $dst だよ
  • そして、中身も丸ごと持っていってね

\project
─ data\
│ └─ log.txt
└─ aaa.xlsx

↓ コピーした先:

\desktop\project
├─ data\
│ └─ log.txt
└─ aaa.xlsx

recurse なしの場合:空フォルダとしてコピー

copy-item $src -destination $dst
  • $src の目的地は $dst だよ
  • フォルダだけ(中身なしで)持っていって

\project
─ data\
│ └─ log.txt
└─ aaa.xlsx

↓ コピーした先:

\desktop\project
(中身なし)

test-path $src -pathtype container

$src の最後の要素を調べる|-pathtype container

test-pathで
パスをテストする

-pathtype container|フォルダか?
  • ファイルか?の場合は -pathtype leaf

-recurse:$isFolder

:変数名|ON・OFF を動的に切り替えられる

フォルダのときだけ
recurseする

$isFolder
  • $isFolderTrue
    • -Recurse:$true → 再帰してコピー
  • $isFolderFalse
    • -Recurse:$false → 再帰なしでコピー(中身なし)

start-process で開く

start-process
  • 最初のパスは同じで、最後のフォルダ名だけ変えるのに便利
  • 最後に開く場合、ピンポイントで指定できる

必要なコマンドを

テキストファイルで保管

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。