Как сжать все файлы, измененные в указанный c год в каждой подпапке папки, в один ZIP-файл для каждой подпапки? - PullRequest
0 голосов
/ 13 января 2020

Ранее я задавал следующий вопрос, и мне помогло отличное решение.

Как сжать все файлы, за исключением самого нового файла в каждой подпапке папки, в один ZIP-файл для каждой подпапки ?

Теперь в конце года я хотел бы изменить это решение, чтобы оно архивировало все оставшиеся файлы прошлого года в существующий zip-файл.

Структура каталогов: как это:

Directory-Parent
 ---Sub-Directory-1
 --------File1
 --------File2
 --------File3
 ---Sub-Directory-2
 --------File1
 --------File2

Как упоминалось и упоминалось в моем предыдущем вопросе, у меня есть пакет на уровне Directory-Parent, который создаст zip в каждом подкаталоге всех файлов, кроме самого последнего файла (или сумму, которую я указываю). Он также добавляет год к концу имени zip-файла.

Таким образом, получается:

Directory-Parent
 -Sub-Directory-1
 --------File1
 --------Sub-Directory-12019.zip
 ---Sub-Directory-2
 --------File1
 --------Sub-Directory-22019.zip

Ниже приведено решение для пакетного файла, которое я получил из моего предыдущего вопроса. Он упаковывает все файлы в каждом подкаталоге (игнорируя указанные мной папки) в zip-файл с именем каталога, к которому добавляется текущий год.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FilesToIgnore=2"
set "theYear=%DATE:~-4%"
set "ListFile=%Temp%\%~n0.lst"
set "Move2=-sdel"      & rem // (set this to `-sdel` if you want the files to be moved into the archive)
set "FoldersToExclude=FoldersToExclude.txt"
del "%ListFile%" 2>nul
REM for /D %%I in (*) do call :CompressFiles "%%I"
for /F "eol=| delims=" %%I in ('dir /AD-H /B /ON 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R /V /X /G:"%FoldersToExclude%"') do call :CompressFiles "%%I"
goto EndBatch

:CompressFiles
pushd %1
set "ZipFile=%~nx1%theYear%.zip"
for /F "skip=%FilesToIgnore% eol=| delims=" %%J in ('dir /A-D /B /O-D /TW 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /L /V /X /C:"%ZipFile%"') do >>"%ListFile%" echo %%J
if exist "%ListFile%" (
    echo Compressing files in directory %1 ...
    echo 7z a %Move2% -bso0 -i"@%ListFile%" -mx5 -scsDOS "%ZipFile%"
    7z a %Move2% -bso0 -i"@%ListFile%" -mx5 -scsDOS "%ZipFile%"
    del "%ListFile%"
)
popd
goto :EOF

:EndBatch
pause
endlocal

Я не могу понять, как это изменить вместо этого архивировать все файлы с указанным (или предыдущим) годом. Я полагаю, что ответ находится во втором for l oop в команде dir. Есть ли в команде dir способ фильтрации по дате.
Есть ли способ использовать команду forfiles вместо @fdate?

Спасибо за помощь.

...