windows批处理文件:更改文件标记

时间:2013-10-06 08:32:53

标签: batch-file

我有几个文件,其中文件名由日期组成。我想改变日期&文件(filestamp)的时间到使用Windows批处理文件的文件名中的文件。假设文件是​​2013-02-20.txt,我希望该文件的日期戳对应于文件名中的日期戳,因此设置为20130220,而时间戳可以设置为“00:00”。我将文件名中的年,月和日期提取到变量中,但是如何使用该日期和文件来压缩这些文件。时间?

for %%f in (*.txt) do (
  set FILENAME=%%~nf
  set YEAR=!FILENAME:~0,4!
  set MONTH=!FILENAME:~5,2!
  set DAY=!FILENAME:~8,2!
  set TIME=00:00
)

问题是如何使用变量YEAR,MONTH,DAY和TIME更改提交者和文件时间(在Linux中我使用'touch'命令执行)?

3 个答案:

答案 0 :(得分:1)

我使用.NET编写自己的CLI应用程序来获取/设置文件戳,它使用起来非常简单,并且比使用windows的文件触摸还要好,也许你会不会使用我的应用程序。

下载:http://elektrostudios.tk/FileDate.zip

enter image description here

enter image description here

答案 1 :(得分:0)

是否必须是批处理文件?

您可以批量处理,但不容易。和我在一起,不要灰心。 :)

从这篇文章开始 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4846

这篇帖子有一些流血 - http://www.dostips.com/forum/viewtopic.php?p=27422#p27422,我会非常诚实地对你说,我没有使用直接批量重新加时间戳文件。

用下一个想法或想法做到了: 您可以在VBScript或PowerShell中轻松完成此操作..

VBS:

Set fso = CreateObject("Scripting.FileSystemObject")
' -- Re-date files
'    Call Touch(Server.MapPath("/"), "somefile.htm", "2005-09-01") 
'    Call Touch("C:\", "somefile.txt", "2012-01-01") 
Sub  Touch(strDir, strFileName, NewDate)
Dim objShell, objFolder, objFile
Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.NameSpace(strDir) 
Set objFile = objFolder.ParseName(strFileName) 
If fso.FileExists(strDir & strFileName) Then
objFile.ModifyDate = NewDate 
End If
End Sub

的PowerShell:

if ($DTNew) {
    (dir $aZip).lastwritetime = $DTNew
}

答案 2 :(得分:0)

我用coreutils包中的'touch'修复了它。我从here下载了coreutils。然后我将文件夹C:\ Program Files(x86)\ GnuWin32 \ bin添加到windows PATH并使用了这个批处理文件:

@echo off
set TIME=0000
for %%f in (*.txt) do (
  set FILENAME=%%~nf
  set YEAR=!FILENAME:~0,4!
  set MONTH=!FILENAME:~5,2!
  set DAY=!FILENAME:~8,2!
  set NEW_STAMP=!YEAR!!MONTH!!DAY!!TIME!
  touch -t !NEW_STAMP! %%f
)

goto:EOF
:EOF
pause