robocopyでデータコピーするバッチ

バックアップやデータ移行とかで使用するスクリプトを.batで作ったよ。
Windows2000~2008用。
実際、データ移行の時に使ったけど、今なら素直にPowershell使いましょう。
・sourceとdestinationはプロンプト入力形式
・ループ処理で繰り返しsourceとdestinationを変えてコピー処理可能
・データコピーにはrobocopyコマンドを使用

@echo off
rem  File name:	robocp_Interactive_Lite_vxxx.bat - Data Copy by Using Robocopy(for v1.96&vXP010$vXP027)
rem  Version 003
rem  Owner:	takoyaki_pa
rem  Date:	2019/12/23

rem !v1.96の場合、ファイルの所有者情報、監査情報がコピーされません!
rem !v1.96の場合、ログ出力するとコンソール出力されません!

setlocal
rem set PATH=%PATH%;C:\Program Files\Windows Resource Kits\Tools\
echo.
echo %date%%time%
echo.
:CP_PROC
rem 現在日時を取得
for /F "tokens=1,2,3 delims=/, " %%i in ('date /T') do set SYSDATE=%%i%%j%%k
for /F "tokens=1,2 delims=:" %%i in ('time /T') do set SYSTIME=%%i%%j
set SYSTIME=%SYSTIME:~0,4%
set SYSTIME=%SYSTIME: =0%
set SYSDATETIME=%SYSDATE%%SYSTIME%

rem パラメータをセットする
set /P PFLAG="Copy Start: 1 Copy End:2 "
if "%PFLAG%"=="1" (goto NEXT) else if "%PFLAG%"=="2" (goto END) else (echo not expected '%PFLAG%' !... && goto CP_PROC)
:NEXT
set /P SRC="Please Input Sorce Place: "
set /P DST="Please Input Destination Place: "
set /P ACT="1:MIRROR 2:COPY ONLY 3:TEST "
rem set LOGFILE="%~dp0robocp_log-%SYSDATETIME%.log"
echo.
echo *************************************************************************
if "%ACT%"=="1" (echo ### MIRRORING ####) else if "%ACT%"=="2" (
	echo ### COPYING ###) else if "%ACT%"=="3" (echo ### TEST ###) else (echo not expected '%ACT%' !... && goto END)
echo Source is %SRC%
echo Destination is %DST%
rem echo Logfile is %LOGFILE%
echo *************************************************************************
echo Is it OK? It is stopped when Ctl+c.
echo.
pause

rem コピーを実行する
echo Process Start!
echo =========================================================================
rem 差分確認用(v.1.96)
rem robocopy %SRC% %DST% /V /Z /S /TIMFIX /SEC /R:3 /W:5 /LOG+:%LOGFILE% /L
rem 実際のコピー用(v.1.96)
rem robocopy %SRC% %DST%  /V /X /Z /X /MIR /TIMFIX /SEC /R:3 /W:5 /LOG+:%LOGFILE%
rem ミラーコピーorコピーのみ(Extraを消さない)orコピーテスト(v.XP010)ログファイル生成+全属性コピー版
rem if "%ACT%"=="1" (
rem 	robocopy %SRC% %DST% /V /X /TEE /ZB /MIR /NP /COPYALL /R:3 /W:5 /LOG+:%LOGFILE%) else if "%ACT%"=="2" (
rem 	robocopy %SRC% %DST% /V /X /TEE /ZB /E /NP /COPYALL /R:3 /W:5 /LOG+:%LOGFILE%) else if "%ACT%"=="3" (
rem 	robocopy %SRC% %DST% /V /X /TEE /S /ZB /NP /COPYALL /R:3 /W:5 /LOG+:%LOGFILE% /NOCOPY) else (goto CP_PROC)

rem 
rem XP010版(Windows2003 ResourceKit)
rem if "%ACT%"=="1" (
rem 	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE /ZB /MIR /COPYALL /R:3 /W:2 /LOG+:%LOGFILE% ) else if "%ACT%"=="2" (
rem 	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE  /ZB /E /COPYALL /R:3 /W:2  /LOG+:%LOGFILE% ) else if "%ACT%"=="3" (
rem 	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE /ZB /S /COPYALL /R:3 /W:2 /LOG+:%LOGFILE% /NOCOPY ) else (goto CP_PROC)

rem XP027版(Windows7/2008) 簡易版(ログなし)
if "%ACT%"=="1" (
	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE  /MIR /R:3 /W:2 /MT:2 ) else if "%ACT%"=="2" (
	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE  /E /R:3 /W:2 /MT:2 ) else if "%ACT%"=="3" (
	robocopy %SRC% %DST% /V /X /DCOPY:T /TEE  /S /R:3 /W:2 /MT:2 /NOCOPY ) else (goto CP_PROC)

echo =========================================================================
echo Process End!!
rem	echo Log file is %LOGFILE%
echo %date%-%time%
echo.
goto CP_PROC

:END
endlocal

ファイルもアップしておくよ。

以上。

この記事が気に入ったらサポートをしてみませんか?