ThreadCopy.bat
REM REM@echo off
REM 排他制御・多重度制御をしていないので、端末フリーズに気を付けたし
REM 「一つのフォルダにほぼ同時に複数データがセットされた場合のフォルダ監視機能」の仕様調査目的で作成。
SETLOCAL ENABLEDELAYEDEXPANSION
REM ### ログファイルに出力する各種メッセージを定義(開始、処理中、終了)
set Message_START=Logging task START.
set Message_ProcessStart=Process END
set Message_ProcessEnd=Process END
set Message_END=Logging task END.
REM 文字がコマンドとして扱われないように全角に
set Message_Copy=―>
REM 確認対象フォルダをここにセットする
set C_MOTO=.\copy_moto
set C_TARGET=..\copy_saki
REM ログディレクトリ定義
set LOGDIR=.\work\log\
REM ログディレクトリの作成
mkdir %LOGDIR%
REM cd %LOGDIR%
REM %HOSTN%へホスト名を定義する
set HOSTN=%COMPUTERNAME%
REM 日付をyyymmdd形式で取得する。
set yyyyMMdd=%date:/=%
set hhmmss=%time::=%
set hhmmss=%hhmmss:~0,6%
set logfile=%LOGDIR%%HOSTN%_%yyyyMMdd%_%hhmmss%.log
REM 「C:\work\log\ホスト名_yyyymmdd_hhmmss.log」にコマンド結果を出力する。
REM ### 開始ログ出力
echo %date:/=-% %time:.=,%0 %Message_START% >> "%logfile%" 2>&1
REM ### 処理ログ出力
echo %date:/=-% %time:.=,%0 %Message_ProcessStart% >> "%logfile%" 2>&1
REM cd %C_MOTO%
for /R %C_MOTO% %%f in ("*") do (
REM for内は都度日付を取らないと同じ値がセットされるので記載方法を変えている
echo %date:/=-% %time:.=,%0 %%f %Message_Copy% %C_TARGET% >> "%logfile%" 2>&1
start xcopy /D /I /Y "%%f" %C_TARGET%
)
REM ### 処理結果ログ出力
REM echo 'Result of Process': %Message_Processing% >> "%logfile%" 2>&1
echo %date:/=-% %time:.=,%0 %Message_ProcessEnd% >> "%logfile%" 2>&1
REM ### 終了ログ出力
echo %date:/=-% %time:.=,%0 %Message_END% >> "%logfile%" 2>&1
pause