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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как узнать точное время изменения файла до секунд

Аватара для V!RTuE

Пользователь


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

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


Этот код показывает время с точностью до минут в формате DD-MM-YYYY HH:MM
Код: Выделить весь код
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
set usrnew=%~dp0RECEIVE\%usrnew%
for %%i in ("%usrnew%") do set usrtime=%%~ti
Надо с точностью до секунд и в формате DD-MM-YYYY_HH-MM-SS (добавить знак _ после года и заменить : на - )

Отправлено: 00:50, 07-09-2014

 

Ветеран


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

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


Цитата V!RTuE:
Надо с точностью до секунд и в формате DD-MM-YYYY_HH-MM-SS (добавить знак _ после года и заменить : на - ) »
Например, можно использовать свойство «LastModified» класса «CIM_DataFile» посредством «wmic.exe»:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0397\Sample.txt

if exist "%sSourceFile%" (
	for /f "usebackq skip=1 delims=" %%i in (
		`wmic.exe DataFile where "Name='%sSourceFile:\=\\%'" get LastModified`
	) do for /f %%j in ("%%~i") do (
		set sVar=%%~j
		set sLastModified=!sVar:~6,2!-!sVar:~4,2!-!sVar:~0,4!_!sVar:~8,2!-!sVar:~10,2!-!sVar:~12,2!
		echo !sLastModified!
	)
) else (
	echo Can't find source file [%sSourceFile%].
	exit /b 1
)

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

Отправлено: 07:05, 07-09-2014 | #2



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

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


Аватара для V!RTuE

Пользователь


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

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


Цитата Georgio:
Код:
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
for %%i in ("%~dp0RECEIVE\%usrnew%") do set usrtime=%%~ti
set usrtime=%usrtime: =_%& call set usrtime=%%usrtime:.=-%%& call set usrtime=%%usrtime::=-%% »
не показывает секунды


Цитата Georgio:
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
for /f "delims=" %%i in ('mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(Replace(Repl ace(CreateObject("Scripting.FileSystemObject").GetFile("%~dp0RECEIVE\%usrnew%").DateLastModified,Chr (46),Chr(45)),Chr(32),Chr(95)),Chr(58),Chr(45)))&Close()"') do set usrtime=%%i »
вообще ничего не показывает. Вот весь мой код:
Код: Выделить весь код
@echo off
SET f=%~dp0
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
for /f "delims=" %%i in ('mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(Replace(Replace(CreateObject("Scripting.FileSystemObject").GetFile("%f%RECEIVE\%usrnew%").DateLastModified,Chr(46),Chr(45)),Chr(32),Chr(95)),Chr(58),Chr(45)))&Close()"') do set usrtime=%%i
echo %usrtime%
pause
P.S.:Iska, ваш код сработал. спасибо

Последний раз редактировалось V!RTuE, 07-09-2014 в 21:17.


Отправлено: 21:00, 07-09-2014 | #3


Ветеран


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

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


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /o:d "%~dp0RECEIVE\*.USR" 2^>nul`) do (
	set sSourceFile=%%~i
	
	for /f "usebackq skip=1 delims=" %%j in (
		`wmic.exe DataFile where "Name='!sSourceFile:\=\\!'" get LastModified`
	) do for /f %%k in ("%%~j") do (
		set sVar=%%~k
		set sLastModified=!sVar:~6,2!-!sVar:~4,2!-!sVar:~0,4!_!sVar:~8,2!-!sVar:~10,2!-!sVar:~12,2!
		
		echo !sSourceFile!
		echo !sLastModified!
	)
)

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

Отправлено: 21:22, 07-09-2014 | #4


Аватара для V!RTuE

Пользователь


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

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


Цитата Iska:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /o:d "%~dp0RECEIVE\*.USR" 2^>nul`) do (
set sSourceFile=%%~i
for /f "usebackq skip=1 delims=" %%j in (
`wmic.exe DataFile where "Name='!sSourceFile:\=\\!'" get LastModified`
) do for /f %%k in ("%%~j") do (
set sVar=%%~k
set sLastModified=!sVar:~6,2!-!sVar:~4,2!-!sVar:~0,4!_!sVar:~8,2!-!sVar:~10,2!-!sVar:~12,2!
echo !sSourceFile!
echo !sLastModified!
)
)
endlocal
exit /b 0 »
Определяет не самый новый файл в каталоге. В каталоге %~dp0RECEIVE\ есть еще подкаталоги с *.usr-файлами с датой изменения меньшей, чем usr-файл в каталоге %~dp0RECEIVE\ и вот как раз определяет файл и дату из этого подкаталога.
Как переделать код, чтобы сканировал только каталог %~dp0RECEIVE\ и игнорировал все подкаталоги?

Отправлено: 01:18, 08-09-2014 | #5


Аватара для V!RTuE

Пользователь


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

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


Цитата Georgio:
Код:
@echo off
SET f=%~dp0
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
for /f "delims=" %%i in ('mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(Replace(Repl ace(CreateObject("Scripting.FileSystemObject").GetFile("%f%RECEIVE\%usrnew%").DateLastModified,Chr(4 6),Chr(45)),Chr(32),Chr(95)),Chr(58),Chr(45)))&Close()"') do set usrtime=%%i
echo %usrtime%
pause »
Проблема обнаружилась, если есть пробелы в пути к файлу. Не могу разобраться как подправить((

Отправлено: 01:38, 08-09-2014 | #6


Ветеран


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

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


Код: Выделить весь код
@echo off
set "f=%~dp0"
for /f "delims=" %%i in ('dir /b /a:-d /o:d "%f%RECEIVE\*.USR"') do set usrnew=%%i
for /f "tokens=1,2" %%i in ('mshta "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new ActiveXObject('Scripting.FileSystemObject').GetFile('%f:\=\\%RECEIVE\\%usrnew%').DateLastModified);close();"') do set x=%%i& set y=%%j
for /f %%i in ('mshta "vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(Replace(Replace(Replace("%x%"&Chr(32)&"%y%",Chr(46),Chr(45)),Chr(32),Chr(95)),Chr(58),Chr(45)))&Close()"') do set usrtime=%%i
echo %usrtime%
pause>nul
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:11, 08-09-2014 | #7


Аватара для V!RTuE

Пользователь


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

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


Georgio, спасибо. теперь работает. Но на мгновение пару раз появляется окно и закрывается. Можно ли как то сделать, чтобы вообще не появлялось ничего?

Отправлено: 03:23, 08-09-2014 | #8


Ветеран


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

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


V!RTuE, практически нельзя. Если бы не "close();" и "&Close()", окна вообще пришлось бы закрывать вручную.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:35, 08-09-2014 | #9


Ветеран


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

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


Цитата V!RTuE:
Как переделать код, чтобы сканировал только каталог %~dp0RECEIVE\ и игнорировал все подкаталоги? »
Убрать параметр «/s» у команды «dir» и добавить путь к определению файла:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (`dir /b /a:-d /o:d "%~dp0RECEIVE\*.USR" 2^>nul`) do (
	set sSourceFile=%~dp0RECEIVE\%%~i
	
	for /f "usebackq skip=1 delims=" %%j in (
		`wmic.exe DataFile where "Name='!sSourceFile:\=\\!'" get LastModified`
	) do for /f %%k in ("%%~j") do (
		set sVar=%%~k
		set sLastModified=!sVar:~6,2!-!sVar:~4,2!-!sVar:~0,4!_!sVar:~8,2!-!sVar:~10,2!-!sVar:~12,2!
		
		echo !sSourceFile!
		echo !sLastModified!
	)
)

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

Отправлено: 07:29, 08-09-2014 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как узнать точное название процессора Tiim Процесcоры 12 05-07-2016 23:55
VBS/WSH/JS - Дата и время изменения файла lorents Скриптовые языки администрирования Windows 19 01-02-2015 19:28
[решено] Как установить время создания файла с точностью до миллисекунды? elakt AutoIt 5 14-05-2011 22:38
CMD/BAT - [решено] Подскажите как получить время изменения файла -15 минут osp2008 Скриптовые языки администрирования Windows 7 29-07-2010 15:04
Любой язык - [решено] Системное время с точностью до секунд из bat BugSoft Скриптовые языки администрирования Windows 1 15-12-2008 16:55




 
Переход