我有如下檔案,我需要確定是否有任何員工在兩個時間列中“缺席或未知”或遲到超過 1 分鐘。
Col1 col2 col3 HH MM SS HH MM SS
sales Present George 01:02:00 04:05:00
sales absent Linda 00:00:03 00:00:00
Marketing unknown James 00:00:00 00:00:00
我成功洗掉了“:”,但不確定如果條件管道回顯如何放置
(for /f "delims=" %%i in (%files%) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line::= !"
echo(!line!
endlocal
))
試圖獲得像這樣的輸出
George is more than 1 hr and 2 min late
Linda is absent
任何幫助是極大的贊賞。
uj5u.com熱心網友回復:
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "filename1=q72007068.txt"
(
FOR /f "skip=1delims=" %%e IN (%filename1%) DO (
SET "reason="
set "outfile=absorunk"
FOR %%y IN (%%e) DO (
FOR %%o IN (absent unknown) DO IF %%o==%%y SET "reason=%%o"
FOR /f "tokens=1-3delims=:" %%u IN ("%%y") DO (
IF "%%w"=="" (
SET "person=%%y"
) ELSE (
SET /a late=1%%u%%v%%w
IF NOT DEFINED reason IF !late! gtr 1000100 SET "reason=late %%u:%%v:%%w"&set "outfile=late"
)
)
)
IF DEFINED reason ECHO !person! is !reason!>>"report_!outfile!.txt"
)
)
GOTO :EOF
%%e從檔案中接收每一整行,跳過第一行。
reason用作標志來記錄生成報告行的原因 - 如果生成的話。
%%y依次接收該行的每個元素。
如果一個元素恰好是absentor unknown,則設定reason為該值。
嘗試將元素標記為..%%u用作分隔符。%%w:
如果%%w未設定,則這不是時間元素,因此person將設定為元素值,因此將包含第一個時間
元素之前的元素,即人名。
如果%%w已設定,則將 hh:mm:ss 格式為 1hhmmss,這是一個沒有前導的十進制數0。比較1000100在相同基礎上計算的 1 分鐘。如果更大,則設定reason為“延遲 實際時間延遲。
如果在處理完所有元素后,reason已設定,則生成詳細說明人員和原因的報告行。
對于那些感興趣的人,我會將時間的格式留作練習。
--- 修正
根據評論,發送給report_absorunk.txt缺席或未知和report_late.txt遲到的報告。
請注意,如果報告檔案已經存在,資料將被附加到報告檔案中。變數outfile只是為每一行初始化,如果生成的是absorunk,則更改為。由于僅在有理由報告當前資料行時才定義,因此未報告的行仍然未報告。latereasonlatereason
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/466105.html
上一篇:k8s入門之PV和PVC(八)
