Я работаю с вложенным оператором if для удаления каталогов, если они соответствуют определенным критериям. Это часть для l oop, чтобы проверить все каталоги в данном месте. Переменная %JDcalc%
представляет разницу между сегодняшним юлианским днем и юлианским днем каталога. Переменная %fdate%
- это имя каталога. Уровень ошибки определяется следующим образом:
echo.%fdate% | findstr /C:"OE"
Этот вложенный оператор if работает:
if %errorlevel% EQU 0 (if %JDcalc% GEQ 31 (echo DELETE) else (echo KEEP)) else (if %JDcalc% GEQ 14 echo DELETE)
Как только я переключаю echo DELETE
на rd %fdate%
, выводится пакетный скрипт " Система не может найти указанный файл. "
if %errorlevel% EQU 0 (if %JDcalc% GEQ 31 (rd %fdate%) else (echo KEEP)) else (if %JDcalc% GEQ 14 rd %fdate%)
Если я использую более простой оператор if, такой как if %JDcalc% GEQ 14 (rd %fdate%)
, он работает нормально.
РЕДАКТИРОВАТЬ: Ниже приведен сценарий.
@echo off
cd /d C:\Batch\Maximus\Dailies
:TODAYS_JULIAN_DAY
set /a JD=2458939
::a calculation that determines this number is usually here
::above is the julian day for 3.30.2020
:FOR_LOOP_FOLDER_NAME
for /f "delims=" %%a in ('dir /a:d /b') do (
SETLOCAL EnableDelayedExpansion
set fdate=%%a
::fdate is set to the date in the directory name
::with a naming convention of yymmdd
call :SUBROUTINE
ENDLOCAL
)
GOTO END_BATCH
:SUBROUTINE
set folyy=%fdate:~0,2%
set folmm=%fdate:~2,2%
set foldd=%fdate:~4,2%
set /a "folyy=1000020%folyy% %%10000,folmm=100%folmm% %% 100,foldd=100%foldd% %% 100"
set /a folJD=foldd-32075+1461*(folyy+4800+(folmm-14)/12)/4+367*(folmm-2-(folmm-14)/12*12)/12-3*((folyy+4900+(folmm-14)/12)/100)/4
set /a JDcalc=JD-folJD
echo.%fdate% | findstr /C:"OE"
if %errorlevel% EQU 0 (if %JDcalc% GEQ 31 (rd %fdate%) else (echo KEEP)) else (if %JDcalc% GEQ 14 rd %fdate%)
GOTO :eof
:END_BATCH
ENDLOCAL