batchfile检查目录是否有新文件

时间:2018-08-08 19:57:44

标签: batch-file

在下面的batch文件中,我试图检查一个目录,该目录仅包含文本文件(不包含子目录),以查找添加的新文件。下面的脚本执行,但始终显示New file detected。最终,我将其添加到启动菜单中,以便在登录时检查目录。也许有更好的方法,但是我对batchfiles不太熟悉。谢谢:)。

批处理

@echo off
:START
cls
set /a Old = 0
set /a New = 0
echo Checking for new annotated files...
for /f "tokens=*" %%P IN ('dir "path/to/directory" /A /b') do (set /a Old += 1)
set Old
echo Checking for new files..
for /f "tokens=*" %%P IN ('dir "path/to/directory" /A /b') do (set /a New += 1)
set New
goto COMPARE

:COMPARE
if %New% gtr %Old% goto NEWF (
goto NEWF
)
else (
goto OLDF
)

:NEWF
echo New File Detected.
echo.
pause

:OLDF
echo Nothing New.
echo.
pause

2 个答案:

答案 0 :(得分:1)

将值存储在文件old.txt中。如果该文件存在,则在其中获取值并循环执行所有.txt文件并测试该值。这是经过修改的代码:

@echo off&cls
setlocal enabledelayedexpansion

:: Default value

set "New=0"
set "old=0"

:: If exist old.txt get the real value 

if exist old.txt set /p Old=<old.txt


echo Checking for new annotated files...

::Count of the txt files

for /f %%$ IN ('dir *.txt') do set /a New+=1

:: Update the value of the old.txt for the next check

echo !New!>old.txt

:: Testing the 2 values

if !New! gtr %Old% (goto NEWF) else (goto OLDF)

:NEWF
echo New File Detected.
echo.
pause
exit/b

:OLDF
echo Nothing New.
echo.
pause
exit/b

答案 1 :(得分:1)

由于您要查看是否在目录中创建了任何新文件,因此可以使用xcopy检查x日期之前的文件。由于您没有在帖子中发布日期或时间,因此我认为这是当前日期。

您不需要检查指定日期之前的文件,因为您不需要比较它们。您需要做的就是检查返回为“ New”的文件是否少于1。这可以通过以下操作完成:

if %New% gtr 0 (goto NEWF) else (goto OLDF)

如果以后希望搜索子目录,可以将/S开关与 xcopy /L /S /D:一起使用。

对于您拥有的pause语句,如果脚本继续运行,您将遇到问题(因为它无处可去)。要解决此问题,您只需使用goto :eof退出脚本即可。使用echo(代替echo.

@ECHO OFF
set /a New = 0

:: Gather & edit the date for xcopy.
SET CurrentDate=%date%
SET CurrentDate=%CurrentDate:/=-%
SET CurrentDate=%CurrentDate:* =% 

:: Check for files created today.
for /f "delims=" %%i in ('xcopy "path/to/directory" /L /I /D:%CurrentDate%') do (set /a New+=1)
set /a New-=1

goto COMPARE

:COMPARE
if %New% gtr 0 (goto NEWF) else (goto OLDF)

:NEWF
echo New File Detected.
echo(
pause
goto :eof

:OLDF
echo Nothing New.
echo(
pause
goto :eof