1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バッチファイルでzip解凍する(PowerShellを使用)

Last updated at Posted at 2021-05-04

Y子です。
以前、ファイルをzip圧縮するコードを書きましたが、今回は解凍のバッチファイルを作ってみました。
確認環境:Windows 10 Home (Bld. 19042.928)

仕様

  • PowerShellを使って、zipファイルを解凍する。
  • 解凍先として、対象ファイルがあるフォルダにサブフォルダを作成する。
  • 複数の引数に対応する。10個以上にも対応する。
  • 引数にzipファイル以外があるときは、飛ばす。
  • 拡張子は、大文字でも小文字でも対応する。

使い方

  • バッチファイルに、ファイル名やフォルダ名を引数で与えることで動作する。
  • バッチファイルに、ファイルやフォルダをマウスでドロップしてもよい。
  • バッチファイルのショートカットを「sendto」に置き、右クリック「送る」から選択してもよい。
  • 上記を、複数ファイル同時に行ってもよい。

コード

expand_file.bat
@echo off
setlocal

:label_top

  rem 引数がない場合は最後に飛んで終了する
  if "%~1"=="" (
    goto :label_end
  )

  rem zipファイルでない場合は処理しない(大文字小文字区別しない)
  if /i not "%~x1"==".zip" (
    echo "%~1":zipファイルではありません
    goto :label_bottom
  )

  rem ファイルが存在しない
  if not exist "%~1" (
    echo "%~1":ファイルが存在しません
    goto :label_bottom
  )

  rem 日付「20210402」形式
  set str_date=%date:~0,4%%date:~5,2%%date:~8%

  rem 時刻「094617」形式
  set str_time=%time: =0%
  set str_time=%str_time:~0,2%%str_time:~3,2%%str_time:~6,2%

  rem 上位フォルダのフルパス「C:\work dir\」
  set str_dir=%~dp1

  rem 解凍先サブフォルダ名「dirname_yyyymmdd_hhmmss」
  set str_subdir=%~n1_%str_date%_%str_time%

  if not exist "%str_dir%%str_subdir%" (
    mkdir "%str_dir%%str_subdir%"
  )

  rem zip解凍実行
  powershell expand-archive -Path '%~1' -DestinationPath '%str_dir%%str_subdir%'
  echo "%~1":解凍先 %str_dir%%str_subdir%

  :label_bottom
  rem 引数をシフトし、最初に戻る
  shift
  goto :label_top

:label_end

echo 処理を終了しました
endlocal
pause

説明

サブフォルダを作り、その中に解凍するようにしました。
フォルダ無しで解凍すると、ファイルが既存のファイルと混ざって行方不明になったり、既存のファイルを上書きしたりするので、それを防ぐためです。

zipファイルかどうかの判定のために拡張子を確認していますが、その際、if文に/iオプションを付けて、大文字小文字を区別しないようにしました。

実行結果

実行結果
> expand_file.bat "C:\work dir\test01.zip" "C:\work dir\test02.ZIP" "C:\work dir\test03.txt" "C:\work dir\test04.zip"
"C:\work dir\test01.zip":解凍先 C:\work dir\test01_20210504_183151
"C:\work dir\test02.ZIP":解凍先 C:\work dir\test02_20210504_183152
"C:\work dir\test03.txt":zipファイルではありません
"C:\work dir\test04.zip":ファイルが存在しません
処理を終了しました
続行するには何かキーを押してください . . .

おわりに

解凍先フォルダの設計が、どうもオシャレじゃない気がしています。
とは言え、あまりコードの行数も増やしたくないし。
なんてことを考えてたら、圧縮のコードを書いてから1週間以上経ってしまいました。笑
いろいろな正解があると思いますので、これはこれでいいか、と思うことにしました。

では!明日は雨らしいですね!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?