如何批量获取与文件无关的修改时间和文件创建时间?

时间:2014-09-02 20:23:16

标签: datetime batch-file localization regional-settings filemtime

使用%~t1 {{1}}可以获得文件的时间戳。

我想将文件的年份设置为另一个变量,以支持多个区域设置。

如何获取文件的日期时间,与区域设置和区域设置无关?请不要使用powershell。

1 个答案:

答案 0 :(得分:5)

我会发布几个选项

1)第一个是wmic (不适用于XP家庭版)(LastModified可以使用CreationDateLastAccessed进行更改)

@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可以更改为DateCreatedDateLastAccessed。时间格式可以更改为您想要的任何内容:

@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)自编译的jscript.net/bat混合GetLastWriteTime可以更改为GetLastAccessTimeGetCreationTime。时间格式可以更改):

@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,因此可以使用... < / p>

@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

编辑以下是使用所有列出方法的参数化脚本的准备工作:

  1. fileModifiedTime.bat - 获取具有独立设置格式的文件的上次修改时间。基于 robocopy
  2. fileTimes.bat - 获取 WMIC
  3. 的文件时间戳
  4. dirTimes.bat - 获取 WMIC
  5. 的目录时间戳
  6. fileTimesJS.bat - 使用 jscript
  7. 文件时间戳
  8. dirTimesJS.bat - 使用 jscript
  9. 的目录时间戳
  10. fileTimesNET.bat - 使用 .NET
  11. 创建时间戳
  12. dirTimesNET.bat - 带有 .NET
  13. 的时间戳