Пакетен скрипт: Изброяване на липсващи файлове

Опитвам се да създам пакетен скрипт, който ще премине през множество файлове и ще добави имената на липсващите файлове в текстов файл, наречен „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