Двойной процент абсолютно ничего не значит. Это просто результат наличия двух переменных расширений, таких как:
echo %firstname%%lastname%
\_________/\________/
Two separate expansions.
Тильда дает вам подстроку. В вашем случае %date:~10,4%
дает четыре символа со смещением десять переменной среды date
(в данном случае это год, поскольку формат, скорее всего, Thu 29/12/2011
, смещения начинаются с нуля).
Если вы введете set /?
в командной строке Windows, он объяснит все варианты для вас, включая хитрый прием использования отрицательных смещений для извлечения из end строки.
Однако вы должны иметь в виду, что формат переменной среды date
зависит от локали, поэтому такое упрощенное извлечение строк вряд ли будет работать во всех международных версиях Windows (это несколько лет назад).
Лучшее решение - использовать WMI для получения компонентов даты, таких как Прекрасные страницы сценариев Роба ван дер Вуде , скопированные здесь для полноты:
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Dayˆ,Hourˆ,Minuteˆ,Monthˆ,Secondˆ,Year /Format:table') DO (
IF NOT "%%~F"=="" (
SET /A SortDate = 10000 * %%F + 100 * %%D + %%A
SET /A SortTime = 10000 * %%B + 100 * %%C + %%E
SET SortTime=0000000!SortTime!
SET SortTime=!SortTime:~-6!
)
)