Skip to content

Instantly share code, notes, and snippets.

@libraplanet
Last active March 10, 2019 21:29
Show Gist options
  • Save libraplanet/50c987d672effb12481e68fc2ba1ea26 to your computer and use it in GitHub Desktop.
Save libraplanet/50c987d672effb12481e68fc2ba1ea26 to your computer and use it in GitHub Desktop.
---------------------------------------------------------------------------------------------------
-- Zip Combine and Repacker Doroplet
-- 2018/08/09 takumi
---------------------------------------------------------------------------------------------------
■ 概要
複数のZIPファイルをフォルダ階層なしで
展開・結合し、ファイルのみをZIPに再圧縮します。
■ 環境
・ 7za.exe (7zipのCUI版) ※CPUに合わせて自分で調達してください
■ 構成
[./]
├ [bin] 追加でパスを通るフォルダ
│ ├ 7za.dll system32などを汚したくない場合はbinの中に入れる。
│ ├ 7za.exe
│ ├ 7zxa.dll
│ ・
├ [temp] 実行時の作業用フォルダ。実行するたびにゴミがたまっていきます、
├ zicore_droplet.bat ドロップレット本体
├ zicore_c.bat テスト用のCMD起動バッチ(基本使いません)
└ readme.txt このファイル
■ インストール
任意のフォルダに展開してください。
7zaをパスの通ったフォルダにインストールしてください。
(./bin でも可)
■ 使い方
ZIPをまとめたフォルダを、
zicore_droplet.batにドラッグ & ドロップしてください。
そのフォルダのある階層に、結合して再圧縮されたZIPファイルが生成されます。
■ 注意事項
テスト不十分です。
フォルダ構成がなくなります。
実行するたびにゴミがたまっていきますので
./temp フォルダの定期的な掃除をお願いします。
■ 参考
・-m (Set compression Method) switch
https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#Zip
@SETLOCAL
@SET PARAM_COMP_LV=5
@SET TOOLS_DIR=%~dp0
@SET BIN_DIR=%TOOLS_DIR%bin
@SET PATH=%BIN_DIR%;%PATH%
@SET DATE_TIME_STR=%DATE%_%TIME:~0,8%
@SET DATE_TIME_STR=%DATE_TIME_STR:/=%
@SET DATE_TIME_STR=%DATE_TIME_STR::=%
@SET DATE_TIME_STR=%DATE_TIME_STR: =0%
@REM @SET WORK_DIR=%~nx0
@SET WORK_DIR=%~nx0_%RANDOM%
@SET WORK_DIR=%~nx0_%DATE_TIME_STR%
@SET WORK_PATH=%TOOLS_DIR%temp\%WORK_DIR%
@SET SRC_DIR=%~dpn1%
@SET OUT_PUTFILE=%SRC_DIR%_%DATE_TIME_STR%.zip
@GOTO :sub_main
@REM ----------------------------------------------------------------------------------------------
@REM sub_extract
@REM ----------------------------------------------------------------------------------------------
:sub_extract
@ECHO dir =%CD%
@ECHO in file =%~1
@ECHO (path) =%~pdnx1
@SET ZIP_FILE=%~pdnx1
@CALL CMD /C (
@SETLOCAL
cd /d "%WORK_PATH%"
7za e -y "%ZIP_FILE%"
@ENDLOCAL
)
@GOTO :EOF
@REM ----------------------------------------------------------------------------------------------
@REM sub_deldir
@REM ----------------------------------------------------------------------------------------------
:sub_deldir
@CALL CMD /C (
@SETLOCAL
cd /d "%WORK_PATH%"
rd /S /Q *
@ENDLOCAL
)
@GOTO :EOF
@REM ----------------------------------------------------------------------------------------------
@REM sub_compress
@REM ----------------------------------------------------------------------------------------------
:sub_compress
@ECHO dir =%CD%
@ECHO out file =%~1
@ECHO (path) =%~pdnx1
@SET OUT_FILE=%~pdnx1
@CALL CMD /C (
@SETLOCAL
cd /d "%WORK_PATH%"
7za a -tzip -mx=%PARAM_COMP_LV% -mcu=on "%OUT_FILE%" *.*
@ENDLOCAL
)
@GOTO :EOF
@REM ----------------------------------------------------------------------------------------------
@REM sub_proc
@REM ----------------------------------------------------------------------------------------------
:sub_proc
@ECHO [src]
@cd /d "%~dpn1%"
@ECHO CurrentDIR=%CD%
@ECHO.
@ECHO [init]
@mkdir "%WORK_PATH%"
@ECHO WORK DIR=%WORK_PATH%
@ECHO.
@ECHO [extract]
@FOR /r %%A IN (*.zip) DO @(
@CALL :sub_extract "%%A"
)
@ECHO.
@REM @ECHO [deldir]
@REM @CALL :sub_deldir
@REM @ECHO.
@ECHO [compress]
@CALL :sub_compress "%OUT_PUTFILE%"
@ECHO.
@ECHO [compress]
@ECHO ^ =^> %OUT_PUTFILE%
@ECHO.
@GOTO :EOF
@REM ----------------------------------------------------------------------------------------------
@REM sub_usage
@REM ----------------------------------------------------------------------------------------------
:sub_usage
@ECHO usage:
@ECHO ^ zicore_droplet.bat [DIR_PATH]
@ECHO.
@GOTO :EOF
@REM ----------------------------------------------------------------------------------------------
@REM sub_main
@REM ----------------------------------------------------------------------------------------------
:sub_main
@SET _ERROR=0
@IF "" == "%~1" @(
ECHO no arg
SET _ERROR=%_ERROR%1
)
@IF NOT EXIST "%1.\" @(
ECHO no dir
SET _ERROR=%_ERROR%1
)
@ECHO.
@IF "%_ERROR%" == "0" @(
@REM @ECHO main
@CALL :sub_proc "%~1"
) ELSE @(
@CALL :sub_usage
)
@ENDLOCAL
@PAUSE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment