![]() |
Пробел вместо нуля в разряде десятков часов
При добавлении текущего времени к имени файла (или папки), при создании папки с текущим временем в имени и многих других случаях, где используется %time:~0,2% , имеем пробел вместо нуля в разряде десятков часов, если часы не перевалили за 10: Err-123- 8.06.53.log и FOLDER- 8.07.49 вместо желаемых Err-123-08.06.53.log и FOLDER-08.07.49 , что неудобно (в т.ч. при сортировке по имени). Это исправимо? Знатоки! Откликнитесь!
Код:
for %%i in (Err-*.log) do ren "%%i" "%%~ni-%time:~0,2%.%time:~3,2%.%time:~6,2%%%~xi" Код:
[HKEY_CURRENT_USER\Control Panel\International] |
Я себе дату беру для имени папки по другому. так удобней:
Код:
rem взять дату заменить точки на подчеркивание, развернуть сначала год_месяц_день ... тоже самое и с временем, чуть изменив: Код:
rem взять время заменить точки на подчеркивание. |
qaaqasqad, вот Ваш код без пробела
Код:
Set "time1=%time: =0%" |
Код:
@echo off |
greg zakharov
Спасибо. Постараюсь осилить (см. P.S.) x0r Спасибо. С %date% все прошло гладко. О %time% : ну не заработал у меня этот и еще пара-тройка подобных ему сценариев, пока вручную не поставил точки в качестве разделителей компонентов системного времени (а это меня не устраивает). А когда извлеченное из системы время все же вставилось куда нужно, то при HH<10 вместо нуля в разряде десятков часов обнаружился все тот же пробел... И все равно было очень познавательно. Еще раз спасибо. megaloman Спасибо. Очень компактно и эффективно. Все заработало как положено, и нужные нули - в нужных местах без мороки (да Вы и сами знаете). Добавил (по аналогии) вставку даты, разумный твик реестра (чтобы без сюрпризов), подобрал компактные разделители (дело вкуса). И вот что вышло: Код:
Reg.exe add "HKCU\Control Panel\International" /v "s1159" /t REG_SZ /d "" /f А вот и желаемый продукт: Err-123_2017'03'02`06'12'19.log и FOLDER_2017'03'02`06'12'19 ! Всем большое спасибо! P.S. До этого на тему CMD/BAT не заморачивался... |
Цитата:
Код:
rem взять время заменить точки на подчеркивание. |
x0r
Спасибо. "Обнулился" :) (в хорошем смысле). Наилучший вариант, т. к. (это я уже о %date% и о методе в целом) нормально вставляет дату при любых системных настройках ее краткого формата типа dd.MM.yyyy или d.M.yy (конечно, о сортировке по имени речь уже не будет идти, но все равно приятно). А от "зкзотических" разделителей компонентов даты и времени (моя вчерашняя загвоздка) :biggrin: спасет delims=.:,;-_`/|\ (с перебором, но на всякий случай). В итоге пришел к такому: Код:
::Reg.exe add "HKCU\Control Panel\International" /v "sShortDate" /t REG_SZ /d "yyyy.MM.dd" /f На выходе (при yyyy/MM/dd в системе) получается: FLDR`2017'03'04`06'55'56 :up Еще раз всем спасибо! |
qaaqasqad, А что если так:
Код:
FOR /F "tokens=1,2,3,4,5,6 delims=.:,;-_`/|\" %%i IN ("%date%-%time: =0%") DO Set "Dtime=%%i'%%j'%%k`%%l'%%m'%%n" Код:
FOR /F "tokens=1,2,3,4,5,6 delims=.:,;-_`/|\" %%i IN ("%date%-%time: =0%") DO md "FLDR`%%i'%%j'%%k`%%l'%%m'%%n" |
Цитата:
|
по моему, так:
Код:
@echo off |
alpap
Это дает результат, пригодный для сортировки по имени (типа FLDR`2017'03'04`04'06'17 ), только при системном формате даты dd.MM.yyyy . Попробуйте это же запустить при yyyy.MM.dd или при d/M/yy ... megaloman Ваши методы отлично копируют системные последовательности компонентов датывремени при любых разумных разделителях, однако результат типа FLDR`2017'03'04`04'06'17 получается только при yyyy/MM/dd (хоть и с любыми разделителями). qaaqasqad (сам себе) Или результат типа FLDR`2017'03'04`04'06'17 не гарантирован, или твик реестра "sShortDate"="yyyy.MM.dd" так и останется в системе... А что, если так (и результат абсолютно не зависит от системного формата датывремени, и сам этот формат в итоге возвращается в систему): Код:
reg copy "HKCU\Control Panel\International" "HKCU\0" /s /f | reg add "HKCU\Control Panel\International" /v "sShortDate" /t REG_SZ /d "yyyy.MM.dd" /f |
Цитата:
|
Цитата:
Цитата:
Код:
@echo off |
alpap
Спасибо! Идеально! Не к чему придраться! Лучше и быть не может! :laiel: |
alpap
А можно ли подобным образом добавить к имени файла дату-время его создания (изменения), т.е., например, file.ext -> file`1988'09'24`21'55'51.ext ? |
dassen,
для такого случая достаточно: Код:
@echo off |
Если не думать о формате даты в системе, то wmic
Код:
@Echo Off |
Тоже столкнулся с таким поведением командной строки, когда хотел, чтобы логи robocopy назывались по датам.
В результате самым простым методом стало просто перевести всё в Powershell. Код:
$t = get-date -UFormat "%Y-%m-%d_%H-%M-%S" |
megaloman, спасибо.
А если нужно добавить дату-время изменения к имени файла file.ext , лежащего в одной папке с этим батником? ( Call :WRen "file.ext" не прокатывает... ) |
dassen,
Код:
Call :WRen "%~dp0file.ext" 'Creation Date' на 'Last Modified' |
megaloman,
а как добавить дату-время к множеству файлов (например, *.iso)? Пробовал так: Код:
@Echo Off |
Powershell:
Код:
dir C:\temp\*.iso |Rename-Item -NewName {$_.BaseName + $_.CreationTime.ToString("yyyy-MM-dd_HH-mm-ss") + $_.extension} -WhatIf |
Код:
@Echo Off |
Торможу, пока въехал в смысл кода, можно было процедуру и не менять
Код:
@Echo Off |
megaloman, спасибо.
1. Код2 компактнее, но... Если использовать Код2 в составе другого батника (но не в его конце!), то последняя строка Exit /B 0, естественно, недопустима. А если ее нет (а далее идут другие строки!), то обрабатывается только один iso-файл (первый по имени). При тех же условиях: Код1 обрабатывает все файлы даже без своей последней строки Exit /B . Для иллюстрации: запустите оба Кода в их теперешнем виде, заменив только их последние строки на, например, notepad или pause. 2. Апостроф (или английская одиночная кавычка) в имени файла недопустим (т.к. уже используется в Коде), поэтому обработка файлов по второму кругу заканчивается ошибками. Учту... 3. В составе большого батника уже успешно использую Код1 в таком несколько сокращенном виде: Код:
if exist "*.iso" ( 4. На текущий момент главная задача Вашими усилиями уже решена, но все же: вот бы так же применить Код2... |
dassen, Не сильно понял, что Вы хотите и чем Вас мой код не устроил, то ли с процедурой :WRenMask то ли :WRen
Поговорим о структуре скрипта:
Код:
@Echo Off Код:
@Echo Off Если хотите что-то делать после её отработки - продолжайте развивать главный код. Код:
@Echo Off Код:
@Echo Off Цитата:
Код:
:NameMyProcedure Код:
@Echo Off Код:
@Echo Off |
megaloman, еще раз спасибо.
Цитата:
В теории CMD/BAT я не силен (мягко сказано!) :lamer: , просто мне иногда бывает нужно с помощью CMD/BAT решить конкретную задачу (в простых случаях справляюсь сам). Ваше сегодняшнее сообщение попытаюсь осилить и еще задам вопросы. :bow: |
Переходите на Powershell, там меньше текста осиливать надо.
|
Время: 22:39. |
Время: 22:39.
© OSzone.net 2001-