如何找到每个子目录中丢失的文件?

如何找到每个子目录中丢失的文件?

对于音乐合集 (D:\Music),我正在寻找特定的文件名以查看它们是否存在。它们是:artist.jpg、front.jpg、back.jpg、CD.jpg、icon.jpg。对于每个专辑文件夹,这些文件应该存在。如果不存在,我想列出它们,期望输出如下所示:

Artist - Album
artist.jpg
back.jpg

换句话说,在这个特定的专辑文件夹中,存在“CD.jpg”、“icon.jpg”和“front.jpg”文件,因此不应该列出它们。

我计划直接从 D:\Music 驱动器本身运行这个批处理文件,但我也希望能够将它放在我的桌面上(因此 D:\Music 必须进行硬编码)。

我找到了一个可以在本地运行的批处理文件(在相册文件夹中),另一个可以列出所有目录甚至子目录。我找到的批处理文件也列出了子目录,首先列出第一级目录,然后列出所有子目录。我不确定如何以这种方式创建我想要的输出,我认为它必须是一个双循环,可以这么说。

列出所有目录/子目录:

@echo off
for /F "delims=" %%a in ('dir /s /b /o:n /a:d') do (
   echo %%a
)

列出缺失的文件:

for %%I in (.) do echo %%~nxI if NOT EXIST front.jpg ECHO front.jpg if NOT EXIST back.jpg ECHO back.jpg if NOT EXIST CD.jpg ECHO CD.jpg if NOT EXIST artists.jpg ECHO artist.jpg if NOT EXIST icon.jpg ECHO icon.jpg

我该如何将这两个代码段放在一起以获得我想要的内容,或者是否有不同/更好的方法?

答案1

您不能将多个命令排在一行中。每个命令都if ... echo ...必须单独一行:

for %%I in (.) do (
  echo %%~nxI 
  if NOT EXIST "%%~I\front.jpg" ECHO front.jpg
  if NOT EXIST "%%~I\back.jpg"  ECHO back.jpg
  ... etc.
)

但无论如何还有更好的方法:

for /r "D:\Music" /d %%I in (*) do (
  echo Folder: %%~nxI
  for %%N in (front back cd artists icon) do (
    if not exist "%%~I\%%~N.jpg" echo   missing: %%N.jpg
  )
)

for /R {startfolder} /D进程教区牧师R递归地。
for %%N in (string1 string2 "string with spaces" string3)对每个字符串运行循环。

答案2

这是最终的代码。我添加了一些计数器,但它们最终并不相关。

@echo off
set /A artist = 1
set /A album = 1
set /A missing = 1
set /A AlbumInfo = 0
SETLOCAL EnableDelayedExpansion
pushd "D:\Music"

for /d %%A in (*) do (
    set /a artist += 1
    for /d %%B in ("%%A\*") do (
        for %%C in (front back cd artist icon) do  (
            if not exist "%%~B\%%~C.jpg" (
                if !AlbumInfo! == 0 (
                    echo %%~nxA - %%~nxB
                    set /A album += 1
                    set "Albuminfo=1"
REM                 echo AlbumInfo: !AlbumInfo!
                )
            echo   Missing: %%C.jpg
            set /A missing += 1
            )
        )
        set "Albuminfo=0"
    )
)

echo Artists: %artist%
echo Albums: %album%
echo Missing: %missing%
REM    echo AlbumInfo: %AlbumInfo%
PAUSE

相关内容