Показать полную графическую версию : [решено] Как узнать точное время изменения файла до секунд
Этот код показывает время с точностью до минут в формате 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 (добавить знак _ после года и заменить : на - )
Надо с точностью до секунд и в формате 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
Код:
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, ваш код сработал. спасибо
@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
Код:
@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\ и игнорировал все подкаталоги?
Код:
@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 »
Проблема обнаружилась, если есть пробелы в пути к файлу. Не могу разобраться как подправить((
@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
Georgio, спасибо. теперь работает. Но на мгновение пару раз появляется окно и закрывается. Можно ли как то сделать, чтобы вообще не появлялось ничего?
V!RTuE, практически нельзя. Если бы не "close();" и "&Close()", окна вообще пришлось бы закрывать вручную.
Как переделать код, чтобы сканировал только каталог %~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
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.