É mais fácil contar quantos dias ocorreram no 'tempo do UNIX' e depois alterar esse número, como mostrei nesta resposta - Como obter valor de data na linha de comando
Eu preciso procurar a data de uma sexta-feira em um nome de arquivo quando o dia da semana é segunda-feira. Todos os dias restantes apenas procuram a data anterior, mas segunda-feira precisa procurar a data de sexta-feira no nome do arquivo. Eu sei que provavelmente não é difícil. Estou usando apenas um arquivo em lote. Você pode me ajudar?
O nome do arquivo para os arquivos de hoje é: BELLCO070811A.TXT
, (data de sexta-feira), o nome do arquivo de amanhã será BELLCO071111A.TXT
(data de hoje). Na pasta há duas semanas de arquivos e eu só preciso copiar os não processados que são os arquivos do dia útil anterior.
Aqui está o script que estou usando:
@echo off
REM this sets the date
for /F "tokens=2-4 delims=/ " %%f in ('date /t') do (
set mm=%%f
set dd=%%g
set yy=%%h
)
set fullyear=%yy%
Rem next line grabs the last two digits of the year
set yy=%yy:~-2%
REM *****************************************************
REM * The next line is the number of days from TODAY
REM * you want to match. 100 - 1 would be yesterday.
REM * 100 - 2 would be two days ago, etc
REM *****************************************************
REM set /A dd=1%dd% - 100 - 0 !!!! Changed by Brien. This line must be "-1" to grab yesterday
set /A dd=1%dd% - 100 - 1
set /A mm=1%mm% - 100 + 0
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A fullyear=%fullyear% - 1
:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31
goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE
:SET30
set /A dd=30 + %dd%
goto DONE
:LEAPCHK
set /A tt=%fullyear% %% 4
if not %tt%==0 goto SET28
set /A tt=%fullyear% %% 100
if not %tt%==0 goto SET29
set /A tt=%fullyear% %% 400
if %tt%==0 goto SET29
:SET28
set /A dd=28 + %dd%
goto DONE
:SET29
set /A dd=29 + %dd%
:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
set _Cutoff2=%mm%%dd%%yy%
É mais fácil contar quantos dias ocorreram no 'tempo do UNIX' e depois alterar esse número, como mostrei nesta resposta - Como obter valor de data na linha de comando