Войти

Показать полную графическую версию : [решено] Как узнать точное время изменения файла до секунд


V!RTuE
07-09-2014, 00:50
Этот код показывает время с точностью до минут в формате 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
07-09-2014, 07:05
Надо с точностью до секунд и в формате 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

V!RTuE
07-09-2014, 21:00
Код:
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::=-%% »
не показывает секунды


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("%~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, ваш код сработал. спасибо

Iska
07-09-2014, 21:22
@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

V!RTuE
08-09-2014, 01:18
Код:
@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\ и игнорировал все подкаталоги?

V!RTuE
08-09-2014, 01:38
Код:
@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 »
Проблема обнаружилась, если есть пробелы в пути к файлу. Не могу разобраться как подправить((

Georgio
08-09-2014, 03:11
@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);c lose();"') 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
08-09-2014, 03:23
Georgio, спасибо. теперь работает. Но на мгновение пару раз появляется окно и закрывается. Можно ли как то сделать, чтобы вообще не появлялось ничего?

Georgio
08-09-2014, 03:35
V!RTuE, практически нельзя. Если бы не "close();" и "&Close()", окна вообще пришлось бы закрывать вручную.

Iska
08-09-2014, 07:29
Как переделать код, чтобы сканировал только каталог %~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

Georgio
08-09-2014, 12:23
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);c lose();"') do set usrtime=%%i_%%j& call set usrtime=%%usrtime:.=-%%& call set usrtime=%%usrtime::=-%%
echo %usrtime%
pause>nul
exit /b

.




© OSzone.net 2001-2012