Пакетный файл день / месяц / год синтаксис? - PullRequest
5 голосов
/ 29 декабря 2011

Я не могу найти простую разбивку синтаксиса командного файла для извлечения текущего дня / месяца / года.

У меня есть следующий синтаксис для объявления переменной, используемой в качестве имени каталога;

set folder=%date:~10,4%%date:~7,2%%date:~4,2%

Может ли кто-нибудь пролить свет (или опубликовать ссылку) на то, что означает тильда, двойной процент? Кажется, я не могу полностью расшифровать это только от интуиции.

Ответы [ 3 ]

7 голосов
/ 29 декабря 2011

Двойной процент абсолютно ничего не значит. Это просто результат наличия двух переменных расширений, таких как:

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!
    )
)
2 голосов
/ 29 декабря 2011

@ paxdiablo победил меня в этом. Вот ссылка на сайт, которая объясняет, как он работает , с множеством примеров.

2 голосов
/ 29 декабря 2011

~ и %% s разделяют строку (если вы просто введете в команду дату, она покажет вам полную строку).

% date: ~ 10,4% означает получение следующих 4 символов от 10-го символа.

Также следите за разными компьютерами, использующими разные региональные настройки, так как они меняют порядок этих символов в строке.

...