Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 批处理文件以读取文本文件行_File_Batch File - Fatal编程技术网

File 批处理文件以读取文本文件行

File 批处理文件以读取文本文件行,file,batch-file,File,Batch File,我正在编写一个批处理文件来读取AML_handshake.txt date并将该日期与昨天的日期进行比较。如果匹配且最后一行=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\lo

我正在编写一个批处理文件来读取AML_handshake.txt date并将该日期与昨天的日期进行比较。如果匹配且最后一行=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) 如何将文本文件日期与日期-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

至于将文本文件日期与昨天的日期进行比较,问题是。

在您的系统上,
%date%
返回的日期格式是什么?我猜它不包含像
JUN
这样的字母中的月份,对吗?那么,如果“%CURRENTDATE%”NEQ“%firstLine%”匹配,您为什么期望