2016-06-02 7 views
1

バッチファイルがあります。テキストファイルの複数のテキスト行を読み取るバッチファイル

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

call :extractDate firstLineDate firstLine 
<file set /p line= 
echo "%line%" 
for /f "tokens=2 delims=|" %%# in ("%line%") do set "_date=%%#" 
echo %_date% 

call :convertToJulianDay julianFirstLine firstLineDate 
REM GET MONTH, DAY, YEAR VALUES 
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%1") DO SET MM=%%A& SET DD=%%B& SET YY=%%C 
REM ELIMINATE LEFT ZEROS 
SET /A DD=10%DD% %% 100, MM=10%MM% %% 100 
REM CALCULATE JULIAN DAY NUMBER 
IF %MM% LSS 3 SET /A MM+=12, YY-=1 
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524 

set "today=%date%" 
call :convertToJulianDay julianToday today 
REM GET MONTH, DAY, YEAR VALUES 
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%1") DO SET MM=%%A& SET DD=%%B& SET YY=%%C 
REM ELIMINATE LEFT ZEROS 
SET /A DD=10%DD% %% 100, MM=10%MM% %% 100 
REM CALCULATE JULIAN DAY NUMBER 
IF %MM% LSS 3 SET /A MM+=12, YY-=1 
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524 

set /a diff=julianToday-julianFirstLine 
REM *** SECOND CHECK *** 
if %diff% NEQ 1 goto :fail 
exit /b 

:fail 
echo File doesn't fit 

と怒鳴る私がINPUT.TXTの最初の行を読んで、日付= SYSDATE-1と最後の場合に私のバッチファイルを変更したい

AML.DATA|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 

INPUT.TXTサンプルですline = EOFその後progを続けます。しかし、バットファイルは常に言う:

The system cannot find the batch label specified - extractDate 
The system cannot find the file specified. 
The system cannot find the batch label specified - convertToJulianDay 
The system cannot find the batch label specified - convertToJulianDay 
+0

これらのラベルは存在さえしていますか?だ

Stephan

+0

はい、存在します。 –

+0

あなたのエラーメッセージは明確に述べていますが、そうではありません。 – Stephan

答えて

0

最初の行を読むのは簡単です。

If not defined firstLine set firstLine=%%A 

ここで日付を抽出する必要があります。
次に、それをジュリアン日付に変換します。
システム日付をジュリアン日付にも変換します。
違いを比較してください。すべて

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

call :extractDate firstLineDate firstLine 
call :convertToJulianDay julianFirstLine firstLineDate 
set "today=%date%" 
call :convertToJulianDay julianToday today 

set /a diff=julianToday-julianFirstLine 
REM *** SECOND CHECK *** 
if %diff% NEQ 1 goto :fail 
exit /b 

:fail 
echo File doesn't fit 
+0

最後の行に日付とEOFフラグをチェックしてチェックします。しかし、私は両方の小切手をまとめるというアイデアはありません。あなたのコメントを楽しみにしています。 –

+0

@DeEDEe両方の小切手はすでにこの回答に組み込まれています。しかし、解決すべきより難しい問題は、ユリウス日を計算することです。あなたはそれが答えに与えられていないことに気付きましたか? –

+0

Googleで見つけやすいので、答えに入れなかった – jeb

関連する問題