FURUやんのScript忘備録

自分で作ったり調べたり踊ったりしてカスタマイズしたりどこかから引用したりしたScriptや手順の忘備録です  このサイトに掲載のスクリプト・手順など全ての情報については、一切の保証とサポートが無いものとしてご利用下さい。PCの不具合、動作、データの破損などについて責任を負うことはできません。あくまでも自己責任となります。

超危険注意:汎用圧縮保存バッチ

@echo off

rem 任意のフォルダもしくはファイルを同階層の任意名のフォルダの直下に年月日時分秒フォルダを作り任意のファイル名で圧縮保存する
rem 2018-10-01 Created
rem 2018-10-02 ダブルクオーテーション/\を削除/ファイル・フォルダ判定を追加


echo.
echo 任意のフォルダもしくはファイルを同階層の任意名のフォルダを作成し
echo その直下に年月日時分秒フォルダを作り任意のファイル名で圧縮保存する
echo フォルダ分けルールは好みで改変していただいて結構です
echo 処理をやめたい場合は黒い窓を閉じて下さい
echo 圧縮対象のファイルは開いたままだとエラーになるので終了させてください
echo 引数を与えて実行することも可能です
echo.
echo 引数1:圧縮元フォルダもしくはファイルのフルパス 引数2:圧縮フォルダ名 引数3:圧縮ファイル名(拡張子不要)
echo.


rem 変数を初期化する
set A=
set TARGET_FOLDER_NAME=
set TARGET_FOLDER_NAME2=
set BACKUP_FOLDER_NAME=
set ZIP_NAME=
set len=0
set TARGET_FOLDER_NAME=%1
set BACKUP_FOLDER_NAME=%2
set ZIP_NAME=%3


rem 引数がなければ取得する
:CHECK_FOLDER_NAME
if "%1" == "" (goto INPUT_TARGET_FOLDER_NAME) else goto CHECK_SAVE_FOLDER_EXIT


rem 引数がなければ取得する
:INPUT_TARGET_FOLDER_NAME
echo.
echo 引数1(圧縮元フォルダもしくはファイルのフルパス)が無いので取得します


rem 引数がなければ取得する
:SET_FOLDER_NAME
echo.
set TARGET_FOLDER_NAME=
set /p TARGET_FOLDER_NAME=圧縮元フォルダもしくはファイルのフルパスを指定して下さい:=
if "%TARGET_FOLDER_NAME%" == "" (goto INPUT_TARGET_FOLDER_NAME) else goto CHECK_SAVE_FOLDER_EXIT


rem ファイル名にダブルクォーテーションが有ったら外す
:CHECK_SAVE_FOLDER_EXIT
set TARGET_FOLDER_NAME2=%TARGET_FOLDER_NAME:~0,-1%
set TARGET_FOLDER_NAME2=%TARGET_FOLDER_NAME2:~1%
IF  EXIST %TARGET_FOLDER_NAME2% SET TARGET_FOLDER_NAME=%TARGET_FOLDER_NAME2%

rem 圧縮元の文字数チェック
set str=%TARGET_FOLDER_NAME%


rem 文字数カウント 3文字未満は仕様によりエラー
:LOOP
if not "%str%"=="" (
    set str=%str:~1%
    set /a len=%len%+1
    goto :LOOP
)
IF %LEN% LSS 4 GOTO SHORT_ERROR

rem そもそもフォルダやファイルが存在しなかったらエラー
IF NOT EXIST %TARGET_FOLDER_NAME% GOTO ERROR

rem 同階層のディレクトリを調査
set A=%TARGET_FOLDER_NAME%
set A=%A:~0,-2%
for %%A in (%A%) do set A=%%~dpA


rem フォルダ名末尾に¥マークがついていたら削除する \が無ければ引数2を確認する
:CHECK_YENMARK
IF %A:~-1,1% EQU \ GOTO DELETE_YEN
GOTO CHECK_BACKUP_FOLDER_NAME


rem \マークを削除する
:DELETE_YEN
set A=%A:~0,-1%
GOTO CHECK_BACKUP_FOLDER_NAME


rem 引数がなければ取得する
:CHECK_BACKUP_FOLDER_NAME
if "%2"=="" (goto INPUT_BACKUP_FOLDER_NAME) else goto CHECK_ZIP_NAME


rem 引数がなければ取得する
:INPUT_BACKUP_FOLDER_NAME
echo.
echo 引数2(圧縮先フォルダ名…圧縮元と同階層に作成します)が無いので取得します


rem 引数がなければ取得する
:SET_BACKUP_FOLDER_NAME
echo.
set BACKUP_FOLDER_NAME=
set /p BACKUP_FOLDER_NAME=圧縮先フォルダ名(圧縮元と同階層/以下年月日時分秒フォルダを作成)を指定して下さい:=
if "%BACKUP_FOLDER_NAME%" == "" (goto INPUT_BACKUP_FOLDER_NAME) else goto CHECK_ZIP_NAME


rem 引数がなければ取得する
:CHECK_ZIP_NAME
if "%3"=="" (goto INPUT_ZIP_NAME) else goto INPUT_DATA_OK


rem 引数がなければ取得する
:INPUT_ZIP_NAME
echo.
echo 引数3(圧縮ファイル名)が無いので取得します


rem 引数がなければ取得する
:SET_ZIP_NAME
echo.
set ZIP_NAME=
set /p ZIP_NAME=圧縮ファイル名(拡張子不要/zip)を指定して下さい:=
if "%ZIP_NAME%" == "" (goto INPUT_ZIP_NAME) else goto INPUT_DATA_OK


rem 日時のフォルダ名作成 必ずtime_tmpは数字8桁になるようにする このあたりがフォルダを深堀りする処理となる
:INPUT_DATA_OK
set time_tmp=%time: =0%
set time_tmp=%time_tmp:~0,2%-%time_tmp:~3,2%-%time_tmp:~6,2%
rem SET COPYDIR=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%_%time_tmp%
SET COPYDIR=%A%\%BACKUP_FOLDER_NAME%\%date:~0,4%\%date:~0,4%-%DATE:~-5,2%\%DATE:~-5,2%-%DATE:~-2%\%time_tmp%

rem 日時のフォルダ作成
MKDIR %COPYDIR%
rem 作業内容を表示
echo.
echo 圧縮元=%TARGET_FOLDER_NAME%
echo 圧縮先=%COPYDIR%\%ZIP_NAME%.zip
echo.

rem フォルダかファイルかチェック
echo.
echo コピー元がフォルダかファイルか判定します
pushd %TARGET_FOLDER_NAME%
IF %ERRORLEVEL% EQU 0 GOTO COMPRESSION_FOLDER
GOTO COMPRESSION_FILE 


rem フォルダから圧縮ファイルを作成してテンポラリに保存
:COMPRESSION_FOLDER
popd
echo フォルダと判定します
powershell set-executionpolicy Unrestricted
powershell Compress-Archive -Path %TARGET_FOLDER_NAME% -DestinationPath %TEMP%\%ZIP_NAME%.zip -Update
GOTO MOVE_FILE


rem ファイルから圧縮ファイルを作成してテンポラリに保存
:COMPRESSION_FILE 
echo ファイルと判定します
powershell set-executionpolicy Unrestricted
powershell Compress-Archive -LiteralPath %TARGET_FOLDER_NAME% -DestinationPath %TEMP%\%ZIP_NAME%.zip -Update
GOTO MOVE_FILE


rem テンポラリに保存した圧縮ファイルを設定先のフォルダに移動して終了
:MOVE_FILE
echo.
move /y %TEMP%\%ZIP_NAME%.zip %COPYDIR%\%ZIP_NAME%.zip > nul
IF %ERRORLEVEL% NEQ 0 GOTO ERROR2
echo.
echo %TARGET_FOLDER_NAME% を 
echo %COPYDIR%\%ZIP_NAME%.zip へ圧縮保存しました
echo.
cmd.exe /k


rem エラーメッセージを表示
:ERROR
echo.
echo 圧縮元のフォルダもしくはファイルが存在しませんでした
echo.
cmd.exe /k


rem エラーメッセージを表示
:ERROR2
echo.
echo フォルダもしくはファイルを圧縮保存できませんでした
echo.
rem 以前は自動で削除していたがファイルサーバ上で間違って必要なファイルやフォルダを削除してしまうと大変なので自動化はやめた
echo. %A%\%BACKUP_FOLDER_NAME% のフォルダが残っていて不要であれば手動で削除してください
echo.
cmd.exe /k


rem エラーメッセージを表示
:SHORT_ERROR
echo.
echo 既定の文字数以下につきフォルダもしくはファイルを圧縮保存できませんでした
echo.
cmd.exe /k

 

このサイトに掲載のスクリプト・手順など全ての情報については、一切の保証が無いものとしてご利用下さい。PCの不具合、動作、データの破損などについて責任を負うことはできません。あくまでも自己責任となります。