各ファイルのコピー時間を計測時間をも求めるバッチを作成しているのですが、
なかなかうまく行きません。
<仕様>
C:\work\01_学習資料\01_Windows\bat\tmp
にある01-1G.dat、02-1M.dat、03-5M.datファイルを
C:\work\01_学習資料\01_Windows\bat\tmp1
へ1つ1つコピーしてコピー時間を秒単位で求めます。
bat
1@echo off 2 3set LogPath=C:\work\01_学習資料\01_Windows\bat\tmp\ 4set SrcPath=C:\work\01_学習資料\01_Windows\bat\tmp\ 5set DstPath=C:\work\01_学習資料\01_Windows\bat\tmp1\ 6 7rem 1Gファイルコピー時間計測 8set S_time_tmp=%time: =0% 9set hh=%S_time_tmp:~0,2% 10set mi=%S_time_tmp:~3,2% 11set ss=%S_time_tmp:~6,2% 12set sss=%S_time_tmp:~9,2% 13set S_datetime=%hh%%mi%%ss% 14 15echo 開始:%S_datetime% > %LogPath%01_%S_datetime%.log 16copy %SrcPath%01-1G.dat %DstPath% 17 18rem 終了時刻設定 19set E_time_tmp=%time: =0% 20set hh=%E_time_tmp:~0,2% 21set mi=%E_time_tmp:~3,2% 22set ss=%E_time_tmp:~6,2% 23set sss=%E_time_tmp:~9,2% 24set E_datetime=%hh%%mi%%ss% 25 26echo 終了:%E_datetime% >> %LogPath%01_%S_datetime%.log 27 28timeout 2 > null 29 30 31rem 1Mファイルコピー時間計測 32set S_time_tmp=%time: =0% 33set hh=%S_time_tmp:~0,2% 34set mi=%S_time_tmp:~3,2% 35set ss=%S_time_tmp:~6,2% 36set sss=%S_time_tmp:~9,2% 37set S_datetime=%hh%%mi%%ss% 38 39echo 開始:%S_datetime% > %LogPath%02_%S_datetime%.log 40copy %SrcPath%02-1M.dat %DstPath% 41 42rem 終了時刻設定 43set E_time_tmp=%time: =0% 44set hh=%E_time_tmp:~0,2% 45set mi=%E_time_tmp:~3,2% 46set ss=%E_time_tmp:~6,2% 47set sss=%E_time_tmp:~9,2% 48set E_datetime=%hh%%mi%%ss% 49 50echo 終了:%E_datetime% >> %LogPath%02_%S_datetime%.log 51 52timeout 2 > null 53 54rem 5Mファイルコピー時間計測 55set S_time_tmp=%time: =0% 56set hh=%S_time_tmp:~0,2% 57set mi=%S_time_tmp:~3,2% 58set ss=%S_time_tmp:~6,2% 59set sss=%S_time_tmp:~9,2% 60set S_datetime=%hh%%mi%%ss% 61 62echo 開始:%S_datetime% > %LogPath%03_%S_datetime%.log 63copy %SrcPath%03-5M.dat %DstPath% 64 65rem 終了時刻設定 66set E_time_tmp=%time: =0% 67set hh=%E_time_tmp:~0,2% 68set mi=%E_time_tmp:~3,2% 69set ss=%E_time_tmp:~6,2% 70set sss=%E_time_tmp:~9,2% 71set E_datetime=%hh%%mi%%ss% 72 73echo 終了:%E_datetime% >> %LogPath%03_%S_datetime%.log 74
上記コードでは、100ファイルあったっら非常に非効率になってしまうことは重々承知です。
ループを使ってなんとしたいのですが・・・・
一応、一つ一つ分解し簡略化した動作を確認しています。
まずは、コピー元フォルダ内のファイルが取得できるか確認。↓
@echo off cd C:\work\01_学習資料\01_Windows\bat\tmp for %%i in (*.dat) do ( echo %%i )
そして、以下のようにループで取得したファイル名をパスに連結すると
エラーとなってしまいます。%%1には、ファイル名が入っているので、
copy %SrcPath%%%i % DstPath%
としても大丈夫なような気もするのですが・・・・
@echo off set LogPath=C:\work\01_学習資料\01_Windows\bat\tmp\ set SrcPath=C:\work\01_学習資料\01_Windows\bat\tmp\ set DstPath=C:\work\01_学習資料\01_Windows\bat\tmp1\ cd %SrcPath% for %%i in (*.dat) do ( rem echo %%i copy %SrcPath%%%i % DstPath% ) pause
11:24 追記↓
試行錯誤して下記の様に変更したら、1ファイルずつコピーできるようになりましたが、
logファイルがうまく生成されません。
logファイルは、log-YYYYMMDDSS.logという形式で出力させたいのですが、なぜか、
log-.logというファイルが1ファイルしか出来上がりません。
bat
1@echo off 2 3set LogPath=C:\work\01_学習資料\01_Windows\bat\tmp\ 4set SrcPath=C:\work\01_学習資料\01_Windows\bat\tmp\ 5set DstPath=C:\work\01_学習資料\01_Windows\bat\tmp1\ 6 7cd %SrcPath% 8 9 10for %%i in (*.dat) do ( 11 rem echo %%i 12 13 set S_time_tmp=%time: =0% 14 set hh=%S_time_tmp:~0,2% 15 set mi=%S_time_tmp:~3,2% 16 set ss=%S_time_tmp:~6,2% 17 set S_datetime=%hh%%mi%%ss% 18 19rem logファイル生成 20 echo PC→XXServer > %LogPath%log-%S_datetime%.log 21 echo CopyFileName: %%i >> %LogPath%log-%S_datetime%.log 22 echo 開始時刻:%S_datetime% >> %LogPath%log-%S_datetime%.log 23 24 copy %%i %DstPath% 25 26 set E_time_tmp=%time: =0% 27 set hh=%E_time_tmp:~0,2% 28 set mi=%E_time_tmp:~3,2% 29 set ss=%E_time_tmp:~6,2% 30 set E_datetime=%hh%%mi%%ss% 31 32 echo 終了時刻:%E_datetime% >> %LogPath%log-%S_datetime%.log 33 34 timeout /T 2 > null 35) 36 37pause
アドバイスの程、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。