0

我有几个文件,其中文件名包含日期。我想通过使用 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”命令)?

4

3 回答 3

1

我用 .NET 编写了自己的 CLI 应用程序来获取/设置文件戳,它非常易于使用,并且比 windows 的 filetouch 有好处,也许你会更喜欢使用我的应用程序。

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

在此处输入图像描述

在此处输入图像描述

于 2013-10-07T18:12:50.853 回答
0

我用 coreutils 包中的 'touch' 修复了它。我从这里下载了 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
于 2013-10-06T12:41:11.933 回答
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

电源外壳:

if ($DTNew) {
    (dir $aZip).lastwritetime = $DTNew
}
于 2013-10-06T09:24:15.197 回答