2

С batch variable/parameter expansion как %~t1 можно получить временную метку файла.Как получить независимое от локали измененное время и время создания файла в пакетном режиме?

Я хотел бы установить год файла другой переменной, чтобы поддерживать несколько локалей.

Как вы можете получить файл datetime файла, независимо от локали и региональных настроек? Никакой powershell пожалуйста.

+0

'% ~ t1' - показывает' последний modified' так что я полагаю, вы хотите на этот раз, но не 'последний accessed' или' дата created'? – npocmaka

+0

и что означает 'mtime' и' ctime'? – npocmaka

+0

@npocmaka Я попытался обозначить '' время модификации '' 'mtime' и' 'время создания' '' 'ctime'. – n611x007

ответ

5

Я выложу несколько вариантов

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 Здесь готовы использовать параметризованные скрипты, используя все перечисленные методы:

  1. fileModifiedTime.bat - получает время последнего изменения файла с настройками независимых format.Based на Robocopy
  2. fileTimes.bat - получает временные метки файлов с WMIC
  3. dirTimes.bat - получает отметки времени каталогов с Wmic
  4. fileTimesJS.bat - время файла штампами с JScript
  5. dirTimesJS.bat - время каталога марок с JScript
  6. fileTimesNET.bat - файлы с отметками времени с . NET
  7. dirTimesNET.bat - реж Отметки времени с .NET

 Смежные вопросы

  • Нет связанных вопросов^_^