批处理文件,用于检查文件是否存在于文件列表中不存在的目录中

时间:2016-07-11 16:34:38

标签: batch-file

我有一个批处理文件,可以根据文件列表递归我的文件夹,基本上可以创建两个报告。一个文件存在,一个文件不存在。 我现在要做的是查明目录中是否存在文件但文件列表中是否存在(即我是否有额外的文件)。

这是我当前的档案..

FOR /F "usebackqdelims=" %%f IN ("filelist.txt") DO (IF EXIST "%%f" (ECHO %%f exists >> "%~dp0\Exists.txt" ) ELSE (ECHO %%f doesn't exist >> "%~dp0\doesntexist.txt" ))

2 个答案:

答案 0 :(得分:1)

标准的Windows控制台应用程序 FINDSTR 绝对是一个非常好的选择,因为它可以通过下面的代码看到。

@echo off
setlocal
set "ListFiles=%~dp0FileList.txt"
set "ListExist=%~dp0Exist.txt"
set "ListMissing=%~dp0NotExist.txt"
set "ListExtra=%~dp0Extra.txt"
set "ListCurrent=%TEMP%\ListCurrent.tmp"

rem Get list of all files in current directory and its subdirectories with
rem full path into a temporary list file. If the current directory tree
rem contains no file, delete empty list file and exit batch processing.
dir /A-D /B /ON /S >"%ListCurrent%" 2>nul

if errorlevel 1 (
    copy "%ListFiles%" "%ListMissing%" >nul
    if exist "%ListExist%" del "%ListExist%"
    if exist "%ListExtra%" del "%ListExtra%"
    goto EndBatch
)

%SystemRoot%\System32\findstr.exe /I /L /X    /G:"%ListFiles%" "%ListCurrent%" >"%ListExist%"
%SystemRoot%\System32\findstr.exe /I /L /X /V /G:"%ListExist%" "%ListFiles%"   >"%ListMissing%"
%SystemRoot%\System32\findstr.exe /I /L /X /V /G:"%ListExist%" "%ListCurrent%" >"%ListExtra%"

:EndBatch
del "%ListCurrent%"
endlocal

此批处理代码要求批处理文件目录中的FileList.txt包含具有完整路径的文件名。

注意: %~dp0扩展为已使用反斜杠结束的批处理文件的路径。因此,请不要在文件名之前指定额外的反斜杠。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • copy /?
  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • findstr /? ...了解过滤列表的工作方式非常重要。
  • goto /?
  • if /?
  • rem /?
  • set /?
  • setlocal /?

有关>>nul2>nul的说明,另请参阅有关Using command redirection operators的Microsoft文章。

答案 1 :(得分:0)

@echo off
setlocal

rem Load the list of filenames in *the subscripts* of an array
FOR /F "usebackq delims=" %%f IN ("filelist.txt") DO set "name["%%f"]=1"

rem Process files, remove elements of existent files from array
for %%f in (*.*) do (
   IF defined name["%%f"] (
      ECHO %%f exists >> "%~dp0Exists.txt"
      set "name["%%f"]="
   ) ELSE (
      ECHO %%f is extra >> "%~dp0ExtraFiles.txt"
   )
)

rem Report remaining elements in the array
for /F "tokens=2 delims=[]" %%f in ('set name[') do (
   ECHO %%~f doesn't exist >> "%~dp0doesntexist.txt"
)