Этот командный файл можно использовать для этой задачи:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FilesToIgnore=1"
set "theYear=%DATE:~-4%"
set "ListFile=%Temp%\%~n0.lst"
del "%ListFile%" 2>nul
for /D %%I in (*) 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 ...
7z.exe a -bd -bso0 -i"@%ListFile%" -mx9 -scsDOS -- "%ZipFile%"
del "%ListFile%"
)
popd
goto :EOF
:EndBatch
endlocal
Пакетный файл устанавливает переменную среды theYear динамически из зависящей от региона строки даты динамической переменной среды DATE. Пожалуйста, выполните в окне командной строки echo %DATE:~-4% и проверьте, является ли вывод текущим годом, потому что echo %DATE% выводит текущую локальную дату с последними четырьмя символами, являющимися годом.
Пакетный файл игнорирует FilesToIgnore новейших файлов в каждом каталоге. Игнорируется также ZIP-файл, если он уже существует после предыдущего выполнения пакетного файла. ZIP-файл никогда не включается в число FilesToIgnore из-за того, что он уже отфильтрован findstr, который фильтрует выходные данные команды dir, которая выводит имена файлов без пути в текущем каталоге, упорядоченные по времени последней модификации, причем самые новые файлы выводятся первыми, а самые старые файлы выводятся последними.
Пожалуйста, прочтите справку по 7-Zip, чтобы узнать об используемых переключателях и параметрах.
Чтобы понять, какие команды используются и как они работают, откройте окно командной строки, выполните в нем следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
del /?
dir /?
echo /?
endlocal /?
findstr /?
for /?
goto /?
if /?
popd /?
pushd /?
set /?
setlocal /?
Прочтите статью Microsoft о Использование операторов перенаправления команд для объяснения 2>nul и |. Операторы перенаправления > и | должны быть экранированы символом вставки ^ в командной строке FOR, чтобы они интерпретировались как буквальные символы, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроенную командную строку в отдельном командном процессе, запущенном в фоновом режиме.
Обновление: 7-Zip версии 19.00.0.0 выводит предупреждение и создает пустой ZIP-файл в каждом подкаталоге при использовании командной строки, как описано ниже, и первоначально использовалось в пакетном файле. Сначала я подумал, что это ошибка 7-Zip версии 19.00.0.0, потому что эта версия должна также поддерживать -- согласно ее справке, а 7-Zip версия 16.04.0.0 работает. при использовании командной строки:
7z.exe a -bd -bso0 -mx9 -scsDOS -- "%ZipFile%" "@%ListFile%"
Необходимо было удалить -- из этой командной строки, чтобы заставить ее работать с 7-Zip версии 19.00.0.0.
Итак, я сообщил об этой проблеме, и автор 7-Zip быстро ответил, объяснив, почему использование -- приводит к поиску файла, имя которого начинается с @, начиная с 7-Zip версии 19.00.0.0:
Нам нужен какой-то способ добавить имена @file и -file из командной строки.
Таким образом, -- останавливает анализ @ и -, а 7-Zip ищет точные имена.
Вместо этого более безопасно использовать -i@listfile.
Поэтому я обновил код пакетного файла и указал файл списка с опцией -i, которая является наиболее безопасным методом для указания файла списка.
person
Mofi
schedule
22.08.2019
file1.HID, а затем использоватьfor /D %%d in (*.txt)...(просто пример) или придумать другой способ пропустить самый новый файл. Придумать способ программной идентификации этого файла - суть вашей проблемы. и вам было бы неплохо добавить информацию в свой вопрос, чтобы мы могли помочь.Все ИМХО, удачи! - person shellter   schedule 22.08.2019.batкодировании, но рад, что ошибся! Всем удачи. - person shellter   schedule 22.08.2019