@echo off
setlocal
set "source=u:\sourcedir\t w o"
set "destination=u:\destdir"
SET "project=rename this folder"
set "year=2019"
SET /a var=10000
FOR /f "tokens=2delims=- " %%a IN ('dir /ad /on /b "%destination%\%year%-*" 2^>nul') DO set /a Var=1%%a + 1
set "final_destination=%destination%\%year%-%Var:~1% - %project%"
echo xcopy /s "%source%" "%final_destination%\" /O /X /E /H /K
ECHO icacls "%final_destination%" /grant "MACStaff:(OI)(CI)(W)"
GOTO :EOF
Я использовал имена каталогов, которые подходят для моей системы.
Я также принудительно ввел новый суффикс ввода каталогов для целей тестирования
Синтаксис SET "var=value"
(где значение может быть пустым) используется для гарантии того, что любые заданные пробелы НЕ включаются в назначенное значение.
Присвоение строк в кавычках переменным затрудняет их логическое объединение.Вставка кавычек по мере необходимости гораздо проще.
Обратите внимание, что для этой процедуры не требуется delayedexpansion
(что, по-видимому, вы не использовали в любом случае)
Итак, принцип заключается в чтении каталогаперечисление в /b
базовом режиме /ad
только имен каталогов /on
в порядке имен с использованием маски %year%-*
, то есть всех имен каталогов за рассматриваемый год.
Использование разделителей -
и Пробел , в результате %%a
получает каждый серийный номер по очереди (Ваш формат: гггг - серийный Пробел текст, так что второй токенсодержит серийный номер), поэтому var
отображается с последним найденным значением, с добавлением 1
и добавлением 1.
Если нет подходящих имен каталогов, то 2^>nul
подавляет уродливое сообщение об ошибке (то есть отправляет сообщения об ошибках на устройство nul
, чтобы избавиться от них, а символ вставки (^
) сообщает * 1035)* что перенаправитель является частью команды dir
, которую нужно выполнить, а не for
. var
останется неизменным, поэтому он сохранит значение 10000
.
Тогда создайте final_destination
По-меккански и приготовь себе чашку кофе.