速度改善を行いました。以前の7倍から9倍早くなりました。


「backup.bat」を引数指定で呼び出すバッチの内容です。

@echo off
rem backup.bat arc.bat lha32.exe srcBackUp.bat を backup.batの第3引数で指定したディレクトリに置いてください。
rem 引数説明はbackup.batを見てください。
call backup.bat "C" "\Program Files\Microsoft Visual Studio\MyProjects" "\backup" parts


------------------------------------------------------------------------------------------------------------------------------
backup.batの内容

@echo off

echo/*** win2k ntshellによるbackupツール
echo/*** created 2000/12/06
echo/*** last modefied 2001/03/30
echo/*** created by takeomi morozumi

rem !!!Caution!!!
rem ディレクトリ名、ファイル名に2バイト文字列は通りません(制御コードの判定ができないため)
rem ディレクトリ名、ファイル名にスペースや特殊記号文字は通りません

rem 改版履歴
rem 2001/03/30
rem 環境依存部分を減らした。引数で指定できるようにした。

rem %~1:ドライブ名(%~2,%~3のドライブ)
rem %~2:バックアップ対象ディレクトリ
rem %~3:バックアップしたファイルを保管するパス&batとlha32の置いてあるパス(同じパスに置いてください)
rem %~4: parts:指定ディレクトリの子ディレクトリ配下のファイルバックアップ
rem    : alls :指定ディレクトリ配下まるごとバックアップ

rem 引数確認
if "%~1" == "" goto ERROR
if "%~2" == "" goto ERROR
if "%~3" == "" goto ERROR
if "%~4" == "" goto ERROR

echo ディレクトリ構造取得
%~1:
cd %~2
DIR /A:D /B > dir.txt
move dir.txt %1:%~3\dir.txt

rem バッチファイルの存在パスをカレントにする
cd %~3

rem 日付と時刻を取得
date /t > date.txt
time /t > time.txt
FOR /F "tokens=1-3* delims=/ " %%d IN (date.txt) DO FOR /F "tokens=1-2* delims=: " %%g IN (time.txt) DO echo %%d%%e%%f%%g%%h > datetime.txt
rem メッセージエコー
FOR /F "tokens=1-3* delims=/ " %%d IN (date.txt) DO FOR /F "tokens=1-2* delims=: " %%g IN (time.txt) DO @echo %%d年%%e月%%f日%%g時%%h分 バックアップを開始します・・・
rem メッセージエコー
FOR /F "tokens=1* delims= " %%d IN (datetime.txt) DO if not exist %%d @echo %%d ディレクトリ作成・・・
echo カレントパスにディレクトリ作成(YYMMDDHHMMSS)
FOR /F "tokens=1* delims= " %%d IN (datetime.txt) DO if not exist %%d mkdir %%d
rem ディレクトリ移動
FOR /F "tokens=1* delims= " %%d IN (datetime.txt) DO if exist %%d cd %%d
echo 配下に同一構造ディレクトリ作成
FOR /f %%z IN (%~1:%~3\dir.txt) DO mkdir %%z

rem バックアップするディレクトリパスをカレントにする
cd %~2

echo arc.batを起動します・・・
call %~1:%~3\arc.bat %~1 %~3 %~4
echo arc.bat終了!

rem バッチファイルの存在パスをカレントにする
cd %~3

rem 日付と時刻を取得
date /t > date.txt
time /t > time.txt

rem メッセージエコー
FOR /F "tokens=1-3* delims=/ " %%d IN (date.txt) DO FOR /F "tokens=1-2* delims=: " %%g IN (time.txt) DO @echo %%d年%%e月%%f日%%g時%%h分 バックアップを終了します・・・
GOTO END

:ERROR
echo 引数説明
echo "%%~1:ドライブ名(%%~2,%%~3のドライブ)"
echo "%%~2:バックアップ対象ディレクトリ"
echo "%%~3:バックアップしたファイルを保管するパス&bat&lha32の置いてあるパス"
echo "%%~4: parts:指定ディレクトリの子ディレクトリ配下のファイルバックアップ"
echo "   : alls :指定ディレクトリ配下まるごとバックアップ"

:END
PAUSE

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

arc.bat の中身
@echo off

if "%~1" == "" goto ERROR
if "%~2" == "" goto ERROR
if "%~3" == "" goto ERROR

echo backupを開始します・・・
rem カレントの子ディレクトリ配下まるごとバックアップ
IF %~3 == parts FOR /f %%z IN ('DIR /A:D /B') DO FOR /F "tokens=1* delims= " %%d IN (%~1:%~2\datetime.txt)  DO FOR /F %%x IN ('DIR /A:-D /B %%z') DO %~1:%~2\lha32.exe a /n /p %%d%%z.LZH %%z\%%x > nul
rem カレントディレクトリ配下まるごとバックアップ
IF %~3 == alls FOR /R %%z IN (.) DO FOR /F "tokens=1* delims= " %%d IN (%~1:%~2\datetime.txt)  DO %~1:%~2\lha32.exe a /n %%d.LZH %%z > nul

echo backup終了!ファイル移動を開始します・・・
rem カレントの子ディレクトリ配下まるごとバックアップのMOVE処理
IF %~3 == parts FOR /f %%z IN ('DIR /A:D /B') DO FOR /F "tokens=1* delims= " %%d IN (%~1:%~2\datetime.txt)  DO move %%d%%z.LZH %~1:%~2\%%d\%%z\%%d%%z.LZH > nul
rem カレントディレクトリ配下まるごとバックアップのMOVE処理未検証
IF %~3 == alls FOR /R %%z IN (.) DO FOR /F "tokens=1* delims= " %%d IN (%~1:%~2\datetime.txt)  DO move %%d%%z.LZH %~1:%~2\%%d\%%z\%%d%%z.LZH > nul

echo ファイル移動終了!
GOTO END

:ERROR
echo 引数説明
echo "%%~1:ドライブ名(%%~2,%%~3のドライブ)"
echo "%%~2:バックアップしたファイルを保管するパス&bat&lha32の置いてあるパス"
echo "%%~3: parts:指定ディレクトリの子ディレクトリ配下のファイルバックアップ"
echo "   : alls :指定ディレクトリ配下まるごとバックアップ"
pause

:END