果然沒有最糟,只有更糟。
這次是為了跑某著名程式跑分特別寫了兩段batch。我真的覺得我該轉行了。
##ReadMore## 第一段batch,負責執行跑指定次數
for /f "tokens=* USEBACKQ" %%F IN (`call powershell Get-Date -Format "yyyyMMdd_HHmmss"`) do (SET tmpt=%%F) set log_path=%~dp0TestResult_%tmpt% echo off If EXIST %log_path% (echo the path is exist) else (md %log_path%) echo on cd xxx3DM timeout 600 /nobreak SETLOCAL ENABLEDELAYEDEXPANSION for /l %%x in (1, 1, 6) do ( SET TEMP_NUM=00%%x SET TEMP_NUM=!TEMP_NUM:~-3! 3DM.exe --definition=%~dp0firestrike_no_demo.3dmdef --loop=1 --out=%log_path%\3DFS_Result_!TEMP_NUM!.3dmark-result --export=%log_path%\3DFS_Result_!TEMP_NUM!.xml ) ENDLOCAL :end pause
- 為了避免有人偷懶直接用,我故意修掉一些文字不能直接用
- 為了要把結果存起來,開folder把結果丟進去,以好整理。又怕互相覆蓋,需要增加時間碼
- 之前的經驗,由於command line下的用date去做日期碼會有地區造成的格式問題,臨時查到使用powershell回傳指定格式回傳時間,並用for/f做取出,這樣才不用開文件儲存。
- 由於該軟體的bug,參數下loop存成好開的xml格式會造成覆蓋,另外一種格式是只能用該軟體開,不利於數據收集,所以改用for/l去指定執行次數,不用內建的loop執行。
- 為了好整理格式,利用padding 0的方式
- 前幾天嘗試,發現裡面還是有空白的老bug...唉
第二段batch,用來收集分數資訊。
@echo off set log_path=_list_score.source.txt set res_path=_list_score.result.csv dir /a /b *.xml > %log_path% echo filename,overall score,graphic score,phisics score,combined score > %res_path% SET em=! SET pp=%% SETLOCAL ENABLEDELAYEDEXPANSION for /f "usebackq delims=" %%a in ( %log_path% ) do ( echo a=%%a SET score_g=-1 SET score_p=-1 SET score_c=-1 SET score_o=-1 SET score_text=???graphicsscorepforpass FOR /F "tokens=* USEBACKQ" %%g IN (`findstr /c:"!score_text!" "%%a"`) do ( SET tmp_value=%%g SET tmp_value=!tmp_value:/=! call SET tmp_value=!pp!tmp_value:^=!pp! ) SET score_g=!tmp_value! SET score_text=???physicsscorepforpass FOR /F "tokens=* USEBACKQ" %%g IN (`findstr /c:"!score_text!" "%%a"`) do ( SET tmp_value=%%g SET tmp_value=!tmp_value:/=! call SET tmp_value=!pp!tmp_value:^=!pp! ) SET score_p=!tmp_value! SET score_text=???combinedscorepforpass FOR /F "tokens=* USEBACKQ" %%g IN (`findstr /c:"!score_text!" "%%a"`) do ( SET tmp_value=%%g SET tmp_value=!tmp_value:/=! call SET tmp_value=!pp!tmp_value:^=!pp! ) SET score_c=!tmp_value! SET score_text=???overallscorepforpass FOR /F "tokens=* USEBACKQ" %%g IN (`findstr /c:"!score_text!" "%%a"`) do ( SET tmp_value=%%g SET tmp_value=!tmp_value:/=! call SET tmp_value=!pp!tmp_value:^=!pp! ) SET score_o=!tmp_value! echo %%a,!score_o!,!score_g!,!score_p!,!score_c! >> %res_path% ) pause ENDLOCAL
- 一樣拔掉幾個關鍵字,沒辦法直接跑。
- 很久沒看到setlocal了,這次還是要用setlocal才能把東西存起來
- 有試過上一段換成loop指令執行,用cmd把result轉xml,但發現之後會更麻煩而作罷
沒有留言:
張貼留言