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

Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Этот код показывает время с точностью до минут в формате 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 (добавить знак _ после года и заменить : на - )
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата V!RTuE:



Надо с точностью до секунд и в формате DD-MM-YYYY_HH-MM-SS (добавить знак _ после года и заменить : на - )
CMD/BAT - [решено] Как узнать точное время изменения файла до секунд




Например, можно использовать свойство «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
Аватара пользователя
Georgio

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

Сообщение Georgio »

Цитата 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

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

Сообщение V!RTuE »

Код:

Код: Выделить всё

@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
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата 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
CMD/BAT - [решено] Как узнать точное время изменения файла до секунд




Определяет не самый новый файл в каталоге. В каталоге %~dp0RECEIVE\ есть еще подкаталоги с *.usr-файлами с датой изменения меньшей, чем usr-файл в каталоге %~dp0RECEIVE\ и вот как раз определяет файл и дату из этого подкаталога.

Как переделать код, чтобы сканировал только каталог %~dp0RECEIVE\ и игнорировал все подкаталоги?
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата 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
»




Проблема обнаружилась, если есть пробелы в пути к файлу. Не могу разобраться как подправить((
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Код:

Код: Выделить всё

@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
Аватара пользователя
Georgio

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

Сообщение 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 "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
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

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

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

Сообщение V!RTuE »

Цитата V!RTuE:



Как переделать код, чтобы сканировал только каталог %~dp0RECEIVE\ и игнорировал все подкаталоги?
CMD/BAT - [решено] Как узнать точное время изменения файла до секунд




Убрать параметр «/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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»