Показать полную графическую версию : [решено] формат даты для имени нового архива %date:~6,4%\%date:~3,2%\%~n1_%date:~0,2%
Задача - батник, для ежедневной плановой архивации данных при помощи 7-z
Найдено много примеров, справочник по командам... все есть все готово - работает.
В процессе, просто перенял конструкцию из примера, где вновь созданный архив именовался значением текущей даты,
но так как ":" или "/" в именах файлов использоваться не могут переменная %Date% в стандартном виде не могла быть использована,
Автор решил проблему таким образом...
присвоив переменной которая впоследствии выступает именем архива следующее значение
...%date:~6,4%_%date:~3,2%_%date:~0,2%
Очень много примеров в сети с использованием такой схемы, но нигде мне так и не удалось
получить обяснения этих загадочных "6,4" , "3,2" после унарного оператора "~" ....
Очень хотелось бы узнать, что это за значения, откуда они берутся, или как вычисляются?
хм... а set /? Вы не хотите попробовать? А еще прямо в начале радела по скриптам есть полезная ссылка... (http://forum.oszone.net/thread-130222.html)
А если в кратце, то Если вместо %переменная% взять %переменная:~начало,длина% - получим часть строки ;)
:o прозрение...
Спасибо.
Юзверь, хоть и опытный, - все равно юзверь :)
PS: А в справке так и не удалось найти ничего на этот счет...
Set /? тоже ничего особенного не дает - кажет, что "~" среди прочих - унарный оператор
(принцип - то изначально был понятен, я почему-то сразу не сообразил, что это позиция вхождения и кол-во символов через запете :dont-know )...
Так в каком разделе все таки можно почитать "Маркса" ?
RUVATA, а ежели читать внимательнее ;):
…
Подстановка переменной среды может быть расширена следующим образом:
%PATH:str1=str2%
расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в
расширенном результате на "str2". "str2" может быть пустой строкой для
эффективного удаления вхождений "str1" из расширенного вывода. "str1" может
начинаться со звездочки, и в этом случае это будет соответствовать любому
началу расширенного вывода до первого вхождения оставшейся части "str1".
Можно также использовать строки расширения.
%PATH:~10,5%
расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата. Если длина не указана, по умолчанию используется оставшееся
значение переменной. Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.
%PATH:~-10%
извлечет последние 10 символов переменной PATH.
%PATH:~0,-2%
извлечет все символы переменной PATH, за исключением 2-х последних.
…
Вместо «PATH» может быть использована любая переменная окружения.
Имея небольшой опыт объектно-ориентированного программирования, я почему-то был полностью уверен, что переменная %DATE% имеет соответствующий тип данных - "дата", а получается что %DATE% - это "строка"? :dont-know
В этой среде получается нет разделения на типы данных, они все строковые?
Небольшая памятка:@Echo Off
:: Кодировка файла 'Кирилица DOS' (866)
Set var=123456789
Echo.
Echo Запись Значение
Echo.
Echo Переменная полностью %%var%% %var%
Echo.
Echo Первые три символа %%var:~0,3%% %var:~0,3%
Echo Последние три символа %%var:~-3%% %var:~-3%
Echo Три символа начиная с шестого %%var:~5,3%% %var:~5,3%
Echo Без первых трех символов %%var:~3%% %var:~3%
Echo Без последних трех символов %%var:~0,-3%% %var:~0,-3%
Echo Без первых двух и последних трех %%var:~2,-3%% %var:~2,-3%
Echo.
Echo Замена части переменной (45 на abc) %%var:45=abc%% %var:45=abc%
Echo Замена части переменной и символов
Echo до нее (23, и все что до этого, на xyz) %%var:*23=xyz%% %var:*23=xyz%
Echo Удаление части переменной (567) %%var:567=%% %var:567=%
Pause>Nul
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.