2017年4月7日

【PowerShell】フォルダ構成のみをコピーする


今日仕事でフォルダ構成のみをコピーしたいといったことがあって、ネットでいろいろ調べたのですが、どうもPowerShellではうまいやり方がないみたいなんですよね。

xcopyでは、「xcopy /t /e [コピー元パス] [コピー先パス]」という簡単な記述で出来てしまうのですが、PowerShellではこういう簡潔に書ける方法は無いみたいなんです。

それで、何かいい方法はないかといろいろ試行錯誤した結果、次のようなやり方を考えました。

PS C:\work> Copy-Item .\folder1\* .\folder2\ -Recurse; Get-ChildItem -Recurse .\folder2\* | ? { ! $_.PSIsContainer } | Remove-Item

この例では、C:\workフォルダの直下にfolder1とfolder2というフォルダがあって、folder1にはサブフォルダがあって、さらにファイルも存在しています。
treeコマンドで見るとこんな感じです。
PS C:\work\folder1> tree /f
フォルダー パスの一覧
ボリューム シリアル番号は 000000C1 A0A4:0DBD です
C:.
├─aaa
│  ├─111
│  │      12345.txt
│  │
│  └─222
├─bbb
└─ccc

このfolder1配下の構成をファイル無し、つまりフォルダ構成のみをfolder2配下にコピーします。

結果はこのようになります。
PS C:\work\folder2> tree /f
フォルダー パスの一覧
ボリューム シリアル番号は 00000077 A0A4:0DBD です
C:.
├─aaa
│  ├─111
│  └─222
├─bbb
└─ccc


実際には、一度ファイルも含めてすべてコピーして、そしてコピー先からファイルだけを削除するといったことを行っています。
また2つの処理を「;」セミコロンを使って1行に記述しています。

ですのでファイル数が多くなってくると処理に時間が掛かってくるような気がします。

まあ、ちょっとあまりいい方法とはいえないかもしれませんが、苦肉の策ということで許してください。



スポンサーリンク