🤐
PowerShellで、ZIPファイルのフォルダ構造のみをコピーする
ZIP内のフォルダ構造と同じ構造を持つフォルダが欲しいが、ファイルの部分は要らない・・・というケースが発生したため、ファイルを無視してフォルダ構造のみをコピーする処理をPowerShellで雑に書いてみました。
実行イメージ
↓例えばこういう構造のZIPファイルを対象に実行すると
contents
├─Picture
│ picture1.jpg
├─Music
│ ├─teckno
│ │ teckno1.mp3
│ │ teckno2.mp3
│ └─classic
│ classic1.mp3
└─Videos
↓こういう構造のフォルダが得られる。
contents
├─Picture
├─Music
│ ├─teckno
│ └─classic
└─Videos
コード
unzipOnlyDir.ps
# zipのパスを入力してもらう
Write-Host("zipファイルのパスを入力してください。")
$zipPath = Read-Host
# zipの存在確認
$isExt = (Test-Path $zipPath)
if (!$isExt) {
Write-Host("対象のzipファイルが見つかりませんでした。終了します")
Read-Host
exit
}
# アセンブリを読み込む
add-type -assemblyname system.io.compression.filesystem
# フォルダリストを作る
$line = [io.compression.zipfile]::openread($zipPath).entries | Where-Object{ $_.name.length -eq 0} | Sort-Object
$folderList = $line -split "\\ "
# zipの親フォルダを特定
$zipParent = Split-Path $zipPath -Parent
# 親フォルダ直下に、行ごとにフォルダを生成
foreach($folder in $folderList){
$target = $zipParent + "\" + $folder
New-Item $target -itemType Directory -Force
}
Write-Host("フォルダの出力が完了しました。")
# 出力先のディレクトリを開く
$pathObject = [IO.FileInfo]$zipParent
Invoke-Item $pathObject
作っておいてなんですが、この程度の操作なら、わざわざコードを書かなくてもできる気がしてなりません・・・よりベターな方法を知っている方はコメントで情報を頂けると幸いです。
Discussion