我有一个批处理脚本,该脚本检查文件的以下内容:
1.如果文件存在
2.如果文件为空
3.如果文件是最新的(与当前日期相比)
每当我运行该批处理并且我正在使用的文件夹中存在一个文件时,我都能获得所有条件的结果。但是,当我删除文件然后运行脚本以测试条件#1时,它将退出。
我注意到用于检查文件是否存在的条件的ELSE语句没有被执行。下面是代码:
@echo off
setlocal
set strpath="C:\SAMPLE.txt"
set $strErrorMessage="No Error"
set datenow=%DATE:~4,13%
FOR %%A IN (%strpath%) DO set filelastmodifieddate=%%~tA
FOR %%A IN (%strpath%) DO set filesize=%%~zA
set filelastmodifieddate=%filelastmodifieddate:~0,10%
IF EXIST %strpath% (
IF %filesize% NEQ 0 (
IF %filelastmodifieddate% EQU %datenow% (rem do something
) ELSE (SET strErrorMessage=FILE IS NOT UDPATED)
) ELSE (SET strErrorMessage=ZERO BYTE FILE)
) ELSE (SET strErrorMessage=FILE DOES NOT EXIST)
echo %strErrorMessage%
答案 0 :(得分:1)
以此替换整个if
语句块。这是一种更简单,更易读的方式来完成您想要的事情:
if not exist %strpath% (
set "strErrorMessage=File does not exist!"
goto :end
)
if %filesize% equ 0 (
set "strErrorMessage=Zero Byte file!"
goto :end
)
if %filelastmodifieddate% neq %datenow% (
set "strErrorMessage=File not updated!"
goto :end
)
rem If we get to this pint, we have met all the requirements and we DO SOMETHING here
set "strErrorMessage=Success!"
:end
echo %strErrorMessage%
答案 1 :(得分:0)
@echo off
setlocal
set "strpath=C:\SAMPLE.txt"
set "strErrorMessage=No Error"
set "datenow=%DATE:~4,13%"
if not exist "%strpath%" (
set "strErrorMessage=FILE DOES NOT EXIST"
goto :end
)
for %%A in ("%strpath%") do set "filelastmodifieddate=%%~tA"
for %%A in ("%strpath%") do set "filesize=%%~zA"
set "filelastmodifieddate=%filelastmodifieddate:~0,10%"
if %filesize% EQU 0 (
set "strErrorMessage=ZERO BYTE FILE"
) else if %filelastmodifieddate% NEQ %datenow% (
set "strErrorMessage=FILE IS NOT UDPATED"
)
:end
echo(%strErrorMessage%
似乎不合逻辑地执行for
循环或如果文件不存在则进行其他任何操作。
因此,如果文件存在,请执行for
循环以获取文件的时间戳和大小,
否则设置FILE DOES NOT EXIST
和goto :end
。
现在,如果文件存在并被视为有效,则其余代码可以继续。
如果您不考虑不首先检查文件是否存在,则可能会遇到if
比较等语法错误以及未定义变量的情况。
答案 2 :(得分:0)
即使使用缩进,嵌套条件也不太方便阅读和理解逻辑。如果您重新考虑条件,则可以简化以下逻辑:
set "strErrorMessage=NO ERROR"
for %%a in ( %strpath% ) do if not exist "%%~a" (
SET "strErrorMessage=FILE DOES NOT EXIST"
) else if %%~za equ 0 (
SET "strErrorMessage=ZERO BYTE FILE"
) else if %%~ta neq %datenow% (
SET "strErrorMessage=FILE IS NOT UDPATED"
)