他の回答のコメントで7-zipの検討を開始したので、次のようにしました。
set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination
rem # a: Add, -mx: compression level 0-9, -tzip use ZIP format, -ssc: case sensitive, -ssw: add files opened for writing, -r: recursive
pushd "%SOURCE%" && 7za a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd
source変数とdest変数をインライン化する場合、これは本質的に1ライナーであることに注意してください。pushd
/ popd
コンテキストを使用すると、1つのバッチで複数のバックアップを行っている場合には変更されないようにペアがあります。%date%
組み込みです。
適切なツールなしで特別なファイル形式(zip)を作成するのは合理的ではないと思います。これは、JDKなしでJavaソースコードをjarにコンパイルしたいようなものです。
依存関係
あなたは上記のコード持っていることによってツールを削除する問題を回避することができbackup_stuff.bat
、コピー7za.exe
という名前のそのファイルの横にbackup_stuff.bat-7za.exe
して、あなただけ交換する必要がある7za
と%~dp0\backup_stuff.bat-7za
正確にそのファイルを参照すること。これにより、ここに外部依存関係があるというメッセージが表示されます...
あるいは、本当に妄想的になりたい場合は、バッチファイルに7zipを埋め込むだけです:)
set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination
goto deps
:exec
pushd "%SOURCE%" && "%TEMP%\7za" a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd
goto end
:deps
@(
rem This is the Base64 enconded version of 7za.exe
rem To create this section execute the following commands:
rem certutil -encode 7za.exe 7za.exe.b64
rem echo @echo off>7za.exe.b64.bat && for /F "tokens=*" %L in (7za.exe.b64) do @echo echo %L>>7za.exe.b64.bat
echo -----BEGIN CERTIFICATE-----
echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo AAAAAAAAAAAAAAAA+AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
echo dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAB9EXJSOXAcATlwHAE5cBwB
echo QmwQATtwHAG6bBIBIHAcAQ9WFgFbcBwBt3hDAThwHAE5cB0BlnAcAbp4QQE+cBwB
rem ... lot of lines ommitted for sake of stackoverflow
echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo -----END CERTIFICATE-----
)>%TEMP%\7za.exe.b64
certutil -decode -f %TEMP%\7za.exe.b64 %TEMP%\7za.exe >NUL
goto exec
:end
元の7-zip v9.20 exeファイルでこれを実行しようとすると、cmdがクラッシュしました。ブロック長(...)
に制限があるように見えますが、約370kB(b64の約5000行)であることがわかりました。7-zipの元のbase64は800kBでした@(...)>>target.file
が、制限以下の複数のブロックに分割できるため、それは大したことではありません。しかしupx --brute 7za.exe
、exeファイルのサイズが300kB未満になるように実行することをお勧めします。
ソース