Я выложу несколько вариантов
1) Первых с wmic
(не доступны для XP Home Edition) (LastModified
может быть изменен с CreationDate
или LastAccessed
)
@echo off
set file_loc=.\temp_file
for %%# in ("%file_loc%") do set file_loc=%%~dpfnx#
set file_loc=%file_loc:\=\\%
for /f "delims=." %%t in ('"WMIC DATAFILE WHERE name="%file_loc%" get LastModified /format:value"') do (
for /f %%$ in ("%%t") do if "%%$" neq "" set %%$
)
echo %LastModified%
echo year : %LastModified:~0,4%
echo month : %LastModified:~4,2%
echo day : %LastModified:~6,2%
2) , Jscript/BAT-гибрид (DateLastModified
может быть изменен на DateCreated
или DateLastAccessed
формат .time может быть изменен на все, что вы хотите):
@if (@X)==(@Y) @end /****** jscript comment ******
@echo off
set file_loc=.\temp_file
for %%# in ("%file_loc%") do set file_loc=%%~dpfnx#
::set file_loc=%file_loc:\=\\%
cscript //E:JScript //nologo "%~f0" "%file_loc%"
exit /b 0
****** end of jscript comment ******/
var file_loc = WScript.Arguments.Item(0);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var the_file=fso.GetFile(file_loc);
var the_date= new Date(the_file.DateLastModified);
WScript.Echo(the_date.getFullYear());
WScript.Echo(the_date.getMonth());
WScript.Echo(the_date.getUTCDate());
3) selfcompiled jscript.net/bat гибрид (GetLastWriteTime
может быть . изменен формат времени GetLastAccessTime
или GetCreationTime
могут быть изменены):
@if (@X)==(@Y) @end /****** silent line that start jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist "%~n0.exe" goto :skip_compilation
set "frm=%SystemRoot%\Microsoft.NET\Framework\"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
set file_loc=.\temp_file
for %%# in ("%file_loc%") do set file_loc=%%~dpfnx#
"%~n0.exe" "%file_loc%"
exit /b 0
****** end of jscript comment ******/
import System;
import System.IO;
var arguments:String[] = Environment.GetCommandLineArgs();
var the_file=arguments[1];
var last_modified=File.GetLastWriteTime(the_file);
Console.WriteLine(last_modified.ToString("yyyy-MM-dd"));
4). Robocopy - с этим вы можете получить только дату последнего изменения (с другими методами вы можете получить все атрибуты времени) .Как отметки времени в Robocopy всегда являются YYYY/MM/DD HH:mm:SS
это можно использовать ...
@ECHO OFF
set file_loc=.\temp_file
for %%# in ("%file_loc%") do set file_dir=%%~dp#
for %%# in ("%file_loc%") do set file_name=%%~nx#
pushd %file_dir%
for /f "tokens=1,2" %%a in ('robocopy "." "%temp%" /l /fat /ts /LEV:1 /NP /NC /NS /NJS /NJH^|findstr /i /e /c:"%file_name%"') do (
echo %%a %%b
)
popd
EDIT Здесь готовы использовать параметризованные скрипты, используя все перечисленные методы:
- fileModifiedTime.bat - получает время последнего изменения файла с настройками независимых format.Based на Robocopy
- fileTimes.bat - получает временные метки файлов с WMIC
- dirTimes.bat - получает отметки времени каталогов с Wmic
- fileTimesJS.bat - время файла штампами с JScript
- dirTimesJS.bat - время каталога марок с JScript
- fileTimesNET.bat - файлы с отметками времени с . NET
- dirTimesNET.bat - реж Отметки времени с .NET
'% ~ t1' - показывает' последний modified' так что я полагаю, вы хотите на этот раз, но не 'последний accessed' или' дата created'? – npocmaka
и что означает 'mtime' и' ctime'? – npocmaka
@npocmaka Я попытался обозначить '' время модификации '' 'mtime' и' 'время создания' '' 'ctime'. – n611x007