如何获得在批处理文件的语言环境无关的修改时间和创建时间? [英] How to get locale-independent modified time and creation time of a file in batch?

查看:539
本文介绍了如何获得在批处理文件的语言环境无关的修改时间和创建时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用一批变量/参数扩展的如%〜T1 可以获取文件的时间戳。

With batch variable/parameter expansion like %~t1 one can get a timestamp of a file.

我想设置文件给另一个变量的创想支持多语言环境。

I would like to set the year of the file to another variable would like to support multiple locales.

你怎么能得到一个文件的日期时间,独立的区域和区域设置的?无PowerShell的请。

How can you get a file's datetime, independent of locale and regional settings? No powershell please.

推荐答案

我会后一些选项

1)第一个是用 WMIC (不适用于XP家庭版)(上次更改可以被改变 CreationDate 上次访问

1)First one is with wmic (not available for XP home edition) (LastModified can be changed with CreationDate or 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 /蝙蝠混合 DateLastModified 可改为 dateCreated会 DateLastAccessed 。时间格式可以改变任何你想要的):

2). Jscript/.bat hybrid (DateLastModified can be changed to DateCreated or DateLastAccessed .Time format can be changed to whatever you want ):

@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 时间格式可以更改):

3) selfcompiled jscript.net/bat hybrid (GetLastWriteTime can be changed to GetLastAccessTime or GetCreationTime . Time format can be changed) :

@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 这可以用来...

4). robocopy - with this you can get only last modified date (with other methods you can get all time attributes).As time stamps in robocopy are always YYYY/MM/DD HH:mm:SS this can be used...

@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 Here are ready to use parametrized scripts using all the listed methods:


  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

  1. fileModifiedTime.bat - gets last modified time of file with settings independent format.Based on robocopy
  2. fileTimes.bat - gets file time stamps with WMIC
  3. dirTimes.bat - gets directory time stamps with WMIC
  4. fileTimesJS.bat - file time stamps with jscript
  5. dirTimesJS.bat - directory time stamps with jscript
  6. fileTimesNET.bat - file time stamps with .NET
  7. dirTimesNET.bat - dir time stamps with .NET

这篇关于如何获得在批处理文件的语言环境无关的修改时间和创建时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆