Пакетный скрипт: список отсутствующих файлов

Я пытаюсь создать пакетный скрипт, который будет просматривать загрузку файлов и добавлять имена отсутствующих файлов в текстовый файл с именем ''doesnotexist''. Файлы имеют формат:

13050122, 13050216 (гг, мм, дд, чч), и мне интересно выбрать пропущенные дни.

Итак, вот сценарий, который у меня есть:

@echo on
setlocal enableDelayedExpansion
set year=13
set "ext=.edt
pause
for /l %%a in (*501*,1,*531*) do ( 
    pause
    IF EXIST "%%a" (
        ECHO "%%a" exists
    ) ELSE (
        ECHO %%b doesn't exist >> file_pathway\doesnotexist.txt
    )
)

Скрипт запускается, но заполняет файл donotexist.txt:

0 doesn't exist  
%b doesn't exist

Кто-нибудь знает, как я буду перечислять пропущенные дни. Я надеюсь, что в этом есть смысл.

Спасибо заранее.


person T Bar    schedule 20.09.2017    source источник
comment
Не пытаясь внедрить метод определения количества дней в любом конкретном месяце, в том числе в возможные високосные годы, ваш вопрос - это просто запрос сценария.   -  person Compo    schedule 20.09.2017
comment
Для чистого пакета я предлагаю использовать функции даты и времени, особенно DateToMJD и MJDToDate итерация от даты начала до даты окончания и дополнительный цикл for /l для часов.   -  person    schedule 20.09.2017


Ответы (1)


Это очень простой способ решить эту проблему:

@echo off
setlocal EnableDelayedExpansion

set /A "year=13, feb=28+^!(year%%4)"
set i=0
for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
   set /A i+=1
   set "dpm[!i!]=%%a"
)
set i=100
for /L %%m in (1,1,12) do (
   set /A i+=1
   for /L %%d in (1,1,!dpm[%%m]!) do (
      IF EXIST "%year%!i:~1!%%d*" (
         ECHO "%year%!i:~1!%%d" exists
      ) ELSE (
         ECHO %year%!i:~1!%%d doesn't exist >> file_pathway\doesnotexist.txt
      )
   )
)

Но будьте осторожны! Этот метод не сработает в феврале 2400 года! ;)

person Aacini    schedule 20.09.2017
comment
2400 (также 2000) — это нормально, остальные сотни множителей потерпят неудачу. Используйте set /A "year=%%f, feb=28+(^!(year%%4)^&(^!(^!(year%%100)))^|(^!(year%%400)))" для правильной обработки високосного года (мне нравится тратить время на мелочи :)). - person CristiFati; 20.09.2017