2016-11-10 4 views
0

Я пытаюсь получить отсутствующие имена файлов с моего ПК, содержащие файлы резюме эпизодов ТВ.Найти отсутствующие последовательные файлы

Есть более 200 (ТВ-шоу) каталогов, и у каждого шоу есть подпапки для каждого сезона, а каждая подпапка сезона содержит файл сперты для каждого эпизода. Ex .:

G:\TV_Shows\The BlackList\02\The.Blacklist.Season02Episode05.properties 

Можно ли с помощью SQL и пакетный файл, чтобы посмотреть в каждом каталоге и найти максимальное количество эпизодов и выход любой эпизод под этим номером, который не найден?
Я знаю, что это не безупречно, и если макс. эпизод отсутствует, он будет неправильным, но я думаю, что это будет приемлемый риск.

Любая помощь с этим была бы оценена.

+3

как это нужно сделать с SQL Server? вам нужна база данных для использования sql. – Hogan

+0

Извините, но я не мог решить эту проблему, как указано. Я мог бы, однако, решить это, используя чистый пакетный файл, с _no_ SQL ** ';-)' ** – Aacini

+0

У меня установлен SQL и я могу использовать xp_cmdshell, если использовать SQL для выполнения логики было бы проще. какой будет подход с использованием чистой партии? – user3718449

ответ

0

Нет, SQL не поможет вам найти отсутствующие файлы, если у вас нет какой-либо информации в базе данных SQL.

Если у вас есть список имен файлов в плоском файле, вы можете загрузить их в таблицу базы данных SQL.

А затем написать SQL-запрос к этой таблице. Но манипуляция строк - это не forte SQL.

0

Попробуйте следующий сценарий (см комментарии для справки):

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

::/* Facts/Restrictions: 
::files must be named like `<show-name>.Season<season-num>Episode<episode-num>.properties`; 
::the `<show-name>` portion must not contain `.Season` on its own, 
::the `Episode` portion must follow the `.Season<season-num>` part; 
::`<season-num>` and `<episode-num>` must begin at 1 and must not hold more than nine figures; 
::`<season-num>` portion is checked against name of parent directory for numeric equality; 
::`<show-name>` portion is not checked against name of parent directory of parent directory; 
::`INFO:` outputs are returned at STDOUT and show number of shows/seasons/episodes; 
::`ERROR:` outputs are returned at STDERR and indicate missing seasons/episodes; 
::the desired numbers of seasons/episodes are unknown, so the last ones missing are undetected; */ 

rem // Define constants here: 
set "_ROOTDIR=G:\TV_Shows" & rem // (root directory containing all TV shows) 
set "_PATTERN=*.properties" & rem // (file pattern to search in season directories) 
set "_SEASONS=.Season"  & rem // (file name portion preceding season number) 
set "_EPISODE=Episode"  & rem // (file name portion preceding episode number) 

rem // Clear arrays: 
for /F "delims==" %%F in ('2^> nul set SIZE[') do set "%%F=" 
for /F "delims==" %%F in ('2^> nul set NAME[') do set "%%F=" 

rem // Accumulate TV show information: 
set /A "SIZE=0" 
for /D %%C in ("%_ROOTDIR%\*") do (
    set /A "SIZE+=1" 
    setlocal EnableDelayedExpansion 
    for %%I in ("!SIZE!") do (
     endlocal 
     set "SHOW=%%~nxC" 
     for /D %%D in ("%%~C\*") do (
      set "SEASON1=%%~nxD" 
      setlocal EnableDelayedExpansion 
      for /F "tokens=* delims=0" %%E in ("!SEASON1!") do set "SEASON1=%%E" 
      set /A "SEASON1+=0" 
      for %%J in ("!SEASON1!") do (
       endlocal 
       set /A "SIZE[%%~I_%%~J]=0" 
       for %%F in ("%%~D\%_PATTERN%") do (
        set "FILE=%%~nxF" 
        setlocal EnableDelayedExpansion 
        set "SEASON2=!FILE:*%_SEASONS%=1!" 
        set "SEASON2=!SEASON2:*%_SEASONS%=1!" 
        set "EPISODE=!SEASON2:*%_EPISODE%=1!" 
        set /A "SEASON2+=0, EPISODE+=0" 
        for /F "tokens=* delims=0" %%E in ("!SEASON2:~1!") do set "SEASON2=%%E" 
        for /F "tokens=* delims=0" %%E in ("!EPISODE:~1!") do set "EPISODE=%%E" 
        set /A "SEASON2+=0, EPISODE+=0" 
        for %%K in ("!EPISODE!") do (
         if !SEASON2! NEQ %%~J (
          >&2 echo ERROR: Show %%~I, "!SHOW!": season %%~J folder contains season !SEASON2! file^^! 
         ) else (
          endlocal 
          set "NAME[%%~I_%%~J_%%~K]=%%~nxC" 
          setlocal EnableDelayedExpansion 
          if !SIZE[%%~I_%%~J]! LSS %%~K (
           endlocal 
           set /A "SIZE[%%~I_%%~J]=%%~K" 
           setlocal EnableDelayedExpansion 
          ) 
         ) 
        ) 
        endlocal 
       ) 
       setlocal EnableDelayedExpansion 
       if !SIZE[%%~I]! LSS %%~J (
        endlocal 
        set /A "SIZE[%%~I]=%%~J" 
       ) else endlocal 
      ) 
     ) 
     set "NAME[%%~I]=%%~nxC" 
    ) 
) 

rem // Validate TV show information: 
setlocal EnableDelayedExpansion 
echo(INFO: %SIZE% shows in total. 
for /L %%I in (1,1,%SIZE%) do (
    if defined SIZE[%%I] (
     echo(INFO: Show %%I, "!NAME[%%I]!": !SIZE[%%I]! seasons. 
     for /L %%J in (1,1,!SIZE[%%I]!) do (
      if defined SIZE[%%I_%%J] (
       if !SIZE[%%I_%%J]! GTR 0 (
        echo(INFO: Show %%I, "!NAME[%%I]!"; season %%J: !SIZE[%%I_%%J]! episodes. 
        for /L %%K in (1,1,!SIZE[%%I_%%J]!) do (
         if not defined NAME[%%I_%%J_%%K] (
          >&2 echo(ERROR: Show %%I, "!NAME[%%I]!"; season %%J: episode %%K missing^^! 
         ) 
        ) 
       ) else (
        >&2 echo(ERROR: Show %%I, "!NAME[%%I]!"; season %%J: no episodes defined^^! 
       ) 
      ) else (
       >&2 echo(ERROR: Show %%I, "!NAME[%%I]!": season %%J missing^^! 
      ) 
     ) 
    ) else (
     >&2 echo(ERROR: Show %%I, "!NAME[%%I]!": no seasons defined^^! 
    ) 
) 
endlocal 

endlocal 
exit /B 
Смежные вопросы