簡體   English   中英

批處理文件以讀取文本文件行

[英]Batch file to read text file lines

我正在編寫一個批處理文件以讀取AML_handshake.txt日期,並將該日期與昨天的日期進行比較。 如果匹配並且最后一行= EOF,則執行我的Java程序。 到目前為止,我已經吼叫。

@ECHO OFF 
SET CURRENTDATE=%DATE% 
SET LOGFILE_DATE=%DATE:~4,2%.%DATE:~7,2%.%DATE:~10,4% 
SET LOGFILE_TIME=%TIME:~0,2%.%TIME:~3,2% 
SET LOGFILE="C:\Extractor\log\AML_Data_Auto-%LOGFILE_DATE%-%LOGFILE_TIME%.log" 
call :Logit >> %LOGFILE% 
exit /b

:Logit 
set "firstLine" 
for /f "tokens=*" %%A in (C:\Extractor\AML_handshake.txt) do ( 
        If not defined firstLine set "firstLine=%%A" 
        set Lastline=%%A 
) 
REM *** FIRST CHECK *** 
if "EOF" NEQ "%Lastline%" goto fail 

REM *** SECOND CHECK *** 
IF "%CURRENTDATE%" NEQ "%firstLine%" goto fail 
exit /b 

goto prog 
:prog 
echo Incremental Data Extraction - Started 
sqlplus -s ***** @call_proc.sql 
echo Incremental Data Extraction - Ended 
echo Generating AML Files - Started 
start "C:\Extractor" TableExtractor.exe 
echo Generating AML Files - Ended 
echo Process Completed 

:fail 
echo Initial Check Failed, Process Terminated 

為了進行測試運行,我已經將txt文件的日期修改為當前日期並執行了批處理文件,但是在日志文件中,我總是看到“初始檢查失敗,進程已終止”。

波紋管是文本文件。

01-JUN-2016
PORT_DATA|560538
NDB_AML_AA|43063
NDB_AML_LD|12878
NDB_AML_REPO|496
NDB_AML_TRAN|84596
NDB_AML_JOINT_AC|219873
NDB_AML_CUS_REL_PRTY|43
NDB_AML_BICCODE|108292
CUSTOMER_MASTER|684124
CATEGORY.MASTER|3288
DEPT.MASTER|2527
COUNTRY.MASTER|251
CUSTOMER.STATUS.MASTER|26
INDUSTRY.MASTER|65
JOB.TITLE.MASTER|22
COMPANY.MASTER|121
TRANSACTION.MASTER|3133
RELATION.MASTER|56
NDB_AML_TBILL_TBOND|2845
EOF

我想知道兩件事。

1)如何將文本文件的日期與date-1(昨天的日期)進行比較,2)為什么即使我編輯文本文件的日期,批處理文件仍無法運行?

批處理文件中存在一些錯誤,包括一些難以檢測到的錯誤,例如將變量設置為最后帶有一些額外空格的值,這會導致您的條件進行比較,例如“ EOF”與“ EOF” 。 因此,請務必確保在任何SET var = value行的末尾刪除多余的空格。

此外,你需要使用延遲擴展,因為你正在設置FOR循環的變量值。 這是該批處理的修訂版,可以完成您要查找的內容,並記錄了更多信息。

@ECHO OFF 
setlocal EnableDelayedExpansion
SET CURRENTDATE=%DATE%
SET LOGFILE_DATE=%DATE:~4,2%.%DATE:~7,2%.%DATE:~10,4%
SET LOGFILE_TIME=%TIME:~0,2%.%TIME:~3,2%
SET LOGFILE=AML_Data_Auto-%LOGFILE_DATE%-%LOGFILE_TIME%.log

:Logit 
set firstLine=
set lastLine=
for /f "delims=" %%A in (handshake.txt) do ( 
  if "!firstLine!"=="" set firstLine=%%A
  set lastLine=%%A
) 
set err=
if "EOF" NEQ "!Lastline!" (
  set err=LastLine should not be equal to "!Lastline!"
  goto fail 
) else (
  if "%CURRENTDATE%" NEQ "!firstLine!" (
    set err=FirstLine is "!firstLine!" but today's date is "%CURRENTDATE%"
    goto fail 
  )
)
echo Incremental Data Extraction - Started >> %LOGFILE%
sqlplus -s ***** @call_proc.sql >> %LOGFILE%
echo Incremental Data Extraction - Ended >> %LOGFILE%
echo Generating AML Files - Started >> %LOGFILE%
start "C:\Extractor" TableExtractor.exe >> %LOGFILE%
echo Generating AML Files - Ended >> %LOGFILE%
echo Process Completed >> %LOGFILE%
goto :eof 

:fail 
echo Initial Check Failed, Process Terminated with error: %err% >> %LOGFILE%
exit /b

而就將文本文件日期與昨天的日期進行比較而言,該問題已得到解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM