Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Пробел вместо нуля в разряде десятков часов

Ответить
Настройки темы
CMD/BAT - Пробел вместо нуля в разряде десятков часов

Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: qaaqasqad
Дата: 06-03-2017
Описание: оптимизация
При добавлении текущего времени к имени файла (или папки), при создании папки с текущим временем в имени и многих других случаях, где используется %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"
md "FOLDER-%time:~0,2%.%time:~3,2%.%time:~6,2%"
Подробности: ось - WinXP SP3 Pro, в реестре:
Код: Выделить весь код
[HKEY_CURRENT_USER\Control Panel\International]
"iTLZero"="1"
"sTimeFormat"="HH:mm:ss"
Системное время во всех местах отображается подходяще - с нулем...

Отправлено: 18:29, 02-03-2017

 

Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


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
for /f "tokens=1,2,3,4,5,6 delims=.:,;-_`/|\" %%i in ("%date%-%time: =0%") do set "datetime=%%i'%%j'%%k`%%l'%%m'%%n"
reg copy "HKCU\0" "HKCU\Control Panel\International" /s /f | reg delete "HKCU\0" /f
md "FLDR`%datetime%"
Есть идеи, как без сильного разрастания кода и без ущерба функциональности вернуть delims к неизвращенному состоянию (и есть ли в этом смысл)?

Последний раз редактировалось qaaqasqad, 05-03-2017 в 14:29.


Отправлено: 13:57, 05-03-2017 | #11



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

x0r x0r вне форума

Забанен


Сообщения: 795
Благодарности: 137

Профиль | Цитировать


Цитата qaaqasqad:
вернуть delims к неизвращенному состоянию (и есть ли в этом смысл)? »
никакого изврата нету. этот перебор, это пол такта проца ;-) Ежлиб были в консоли регулярки, былоб \W и все. но т.к. их нету, то набор символов и это норм.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:21, 05-03-2017 | #12


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата qaaqasqad:
и есть ли в этом смысл »
Цитата qaaqasqad:
при yyyy.MM.dd или при d/M/yy ... »
если уж хотите точно быть уверены чтобы поставить в нужном порядке при любом формате и разделителе, то:
Код: Выделить весь код
@echo off
for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year,Hour,Minute,Second /value|find "^=""') do set "%%a=0%%b"
md "FLDR`%Year:~-5%'%Month:~-3%'%Day:~-3%`%Hour:~-3%'%Minute:~-3%'%Second:~-3%"
pause
этот же class и в PS, там еще проще и короче.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:54, 06-03-2017 | #13


Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


alpap
Спасибо! Идеально! Не к чему придраться! Лучше и быть не может!

Отправлено: 14:48, 07-03-2017 | #14


Новый участник


Сообщения: 30
Благодарности: 1

Профиль | Отправить PM | Цитировать


alpap
А можно ли подобным образом добавить к имени файла дату-время его создания (изменения), т.е., например,
file.ext -> file`1988'09'24`21'55'51.ext ?

Последний раз редактировалось dassen, 14-04-2018 в 13:09.


Отправлено: 12:58, 14-04-2018 | #15


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


dassen,
для такого случая достаточно:
Код: Выделить весь код
@echo off
call :# "file.txt"
pause& exit

:#
 set "mt=%~t1"
 ren "%~1" "%~n1-%mt::='%%~x1"
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:55, 14-04-2018 | #16


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


Если не думать о формате даты в системе, то wmic
Код: Выделить весь код
@Echo Off
	Call :WRen "E:\Основная папка\тра ля ля.exe"
GoTo :Eof

:WRen
SetLocal
	If Not Exist %1 Exit /B 2
	Set "Fin=%~1"
	Set "Fin=%Fin:\=\\%"
    	For /f "tokens=1* delims=," %%a in ('wmic datafile where "name='%Fin%'" get 'Creation Date' /format:csv') Do (
		If /I "%%a"=="%ComputerName%" Set "Df=%%b"
	)
	Ren %1 "%~n1`%Df:~0,4%'%Df:~4,2%'%Df:~6,2%`%Df:~8,2%'%Df:~10,2%'%Df:~12,2%%~x1" ||Exit /B 1
EndLocal
Exit /B 0
Вместо Creation Date можно запросить Last Modified

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-04-2018 в 17:43.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 14-04-2018 | #17


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6484
Благодарности: 1463

Профиль | Отправить PM | Цитировать


Тоже столкнулся с таким поведением командной строки, когда хотел, чтобы логи robocopy назывались по датам.
В результате самым простым методом стало просто перевести всё в Powershell.
Код: Выделить весь код
$t = get-date -UFormat "%Y-%m-%d_%H-%M-%S"
ROBOCOPY C:\temp D:\Temp /MIR /TEE /NP /LOG:log_$t.txt

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:34, 14-04-2018 | #18


Новый участник


Сообщения: 30
Благодарности: 1

Профиль | Отправить PM | Цитировать


megaloman, спасибо.
А если нужно добавить дату-время изменения к имени файла file.ext , лежащего в одной папке с этим батником?
( Call :WRen "file.ext" не прокатывает... )

Отправлено: 19:22, 26-08-2018 | #19


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


dassen,
Код: Выделить весь код
Call :WRen "%~dp0file.ext"
Если надо не дата-время создания, а изменения, то заменить
'Creation Date' на 'Last Modified'

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 26-08-2018 в 20:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:05, 26-08-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Пробел вместо нуля в разряде десятков часов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Снижение стоимости часов Pebble и возможное появление часов LG на webOS OSZone News Новости информационных технологий 0 02-10-2014 19:30
Разное - Некорректное завершение работы при разряде батареи P.O.D. Microsoft Windows 7 0 02-11-2010 10:26
На DVD диске объём превышает несколько десятков гигабайт gen0m.rsw Хочу все знать 4 11-07-2010 20:37
Выключение сервера при разряде UPS Seven Microsoft Windows NT/2000/2003 11 08-02-2010 11:44
В Windows и Office найдено более двух десятков «дыр» CnyH9I Флейм 4 05-02-2010 16:58




 
Переход