フォルダバックアップタスクの自動化(zip、移動、命名規則に従って名前を変更)


1

Windows 2003 R2サーバー上のフォルダーのバックアップを自動化しようとしています(現在は手動プロセス)。

このタスクには3つのコンポーネントがあります。

1)サードパーティのソフトウェアを使用せずに、同じディレクトリに次のフォルダーのzipファイルを生成します。

d:\source\folder_to_back_up

それは私たちに与えます:

d:\source\folder_to_back_up.zip

2)新しく作成したzipファイルを次の場所に移動します。

d:\destination

3)次の命名規則に従ってzipファイルの名前を変更します。

Backup_YYYYMMDD.zip

たとえば、今日の日付を使用すると、名前は次のようになります。

Backup_20150516.zip

これまでに、ステップ2を自動化する方法を見つけました。

robocopy /mov d:\source d:\destination folder_to_back_up.zip

...ただし、zipファイルの作成と名前変更の手順を自動化するための支援が必要です。

どんなアイデアでも大歓迎です!

回答:


1

他の回答のコメントで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未満になるように実行することをお勧めします。

ソース


7zaとは何ですか?私はそれを7zaから7zに変更し、それからうまくいきました。
ボドフ

0

バッチファイルからzipファイルを作成できます。これは、Microsoft WindowsのShell.Applicationソフトウェアコードを使用して実行でき、コマンドラインを使用して実行できますが、追加のコードがいくつか必要です。たとえば、user2868186の質問に対するAnsgar Wiechersの回答には、しっかりと見えるコード(下部近く)が含まれています。別の方法として、VBSに関するRob Vanderwoudeのページも解決策を示しています。

この8〜12行(推定量)のVBScriptが必要になるという考えは気に入らないかもしれません。まあ、それは、MS Windowsに追加されたコードの最小量に依存しながら物事を自動化するために私が見つけた最高の利用可能な方法です。MS Windows(少なくともあなたが求めているバージョンではない)がより少ないコードでそれを行う方法を提供したとは思わない。

ただし、そのコードを定期的に追加する場合は、複数回入力するのではなく、ダウンロードすることをお勧めします。また、ダウンロードする場合は、7-ZipやInfo-Zipなどの他のコードをダウンロードすることもお勧めします。7-Zipはコマンドラインから使用する方法を学ぶのにもう少し時間がかかるかもしれませんが、私はそれで成功しました。そして、これを複数回やるつもりがないなら、それはおそらくソフトウェアを一度追加することがおそらく長期的には良い解決策になることの別の理由でしょう(最小限の時間投資、長期的な見返り)。そのようなソフトウェアを使用することは、あなたが尋ねたものと正確に一致しないことを理解していますが、それが最善の解決策になるかどうかを本当に検討することをお勧めするので、とにかくそれを取り上げています。

3番目のステップに関して、以下をバッチファイルに配置します。
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b) echo %mydate% 表示されているFORコマンドは、バッチファイルから実行されることを意図していることに注意してください。バッチファイル以外でまったく同じコマンドを実行しようとしても機能しません。Win7 SP1でテストしました。それをテストするのに便利な2003 R2サーバーはありませんが、このアプローチはあなたにとってうまくいくと思います。

このアプローチの根拠となる時間についてのロリーの質問に対するジェイの答えに、私はここで感謝します。


7-Zip(または同様の)の使用を避けたい理由の1つは、これが完全に自己完結型であることを望むためです。さらに別の管理者が、サーバーから依存しているサードパーティアプリケーションをアンインストールすると、この自動バックアップが破損します。むしろ、そのリスクよりも多くのVBScriptのラインが必要です。
オースティン「危険」パワーズ

@ Austin''Danger''Powers 7zipにはポータブルバージョンがあるため、選択したフォルダーのどこかに7z.exeを残しておくことができます。他の管理者は、それを削除するために7z実行可能ファイルがどこにあるかを正確に知る必要があります(その情報はもちろんバッチスクリプト内にありますが、必要になったら削除することはできません)。プログラムや機能のリストから誤ってアンインストールすることはできません。
ダリウス

7-Zipのポータブルバージョンでこれを試してみます。それは非常に堅牢なソリューションのように聞こえます。日付とタイムスタンプを使用した名前変更の自動化に関する3番目のセクションに感謝します。必要な処理を行うように修正しました。これが非常に早く一緒に来るのを見て興奮しました!7-Zipのポータブルバージョンを使用して自動化する方法を理解する必要があります(これは非常に簡単です)。
オースティン「危険」パワーズ

オースティン:7-Zipはzipファイルを作成できることを指摘したいと思います。zipファイルは、オペレーティングシステム内からスクリプトなどの手段で抽出できます。たとえば、zipファイルをダブルクリックするだけで「開く」ことができます。Info-Zipは、jsut単一の実行可能ファイル/ファイルを使用できるソリューションでもあります。最後に確認したところ、Win32コンソールバージョンにはWindowsインストーラーも付属していないため、デフォルトのディストリビューションは「ポータブル」バージョンです。
TOOGAM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.