我有几个文件,其中文件名由日期组成。我想改变日期&文件(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'命令执行)?
答案 0 :(得分:1)
我使用.NET编写自己的CLI应用程序来获取/设置文件戳,它使用起来非常简单,并且比使用windows的文件触摸还要好,也许你会不会使用我的应用程序。
下载:http://elektrostudios.tk/FileDate.zip
答案 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