2013-10-06 32 views
0

我有幾個文件的文件名由一個日期組成。我想通過使用Windows批處理文件將文件(filestamp)的日期&更改爲文件名中的那個文件。假設文件是​​2013-02-20.txt,並且我希望該文件的日期戳記對應於文件名中的文件名,因此設置爲20130220,而時間戳可以設置爲「00:00」。我將年份,月份和日期從文件名提取到變量中,但如何在這個日期文件上加上這些文件&時間?windows批處理文件:更改文件戳

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 
) 

的問題是如何改變FILEDATE和FILETIME使用變量年份,月份,日期和時間(在Linux中我用「觸摸」命令這樣做)?

+0

可能重複http://stackoverflow.com/questions/51435/windows-version-of -un-unix-touch-command) – GolezTrol

+0

我認爲這不是重複發佈。在發佈/鏈接中,你的意思是說他們使用其他programstamp作爲filestamp,而我只是想在批處理文件中完成它。此外還解釋瞭如何使用我不想要的當前系統時間對文件進行文件加蓋。 –

+0

您可以在Windows中使用filetouch,也可以使用nircmd和其他許多外部應用程序來執行您所需的操作。 – ElektroStudios

回答

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 
} 
+1

謝謝。讀取我認爲使用Windows批處理是一個地獄的工作,因爲沒有改變文件和文件時間的命令。我最好安裝GnuWin32 coreutils,而不是使用touch命令。 –

+0

那麼..你可以使用..你也可以使用unxutils - http://sourceforge.net/projects/unxutils/並看看這裏 - http://stackoverflow.com/questions/51435/windows-version-的最UNIX的觸摸命令 – Leptonator

0

我使用coreutils包中的'touch'來修復它。我從here下載了coreutils。然後,我添加的文件夾C:\ Program Files文件(x86)的\的GnuWin32 \ bin添加到Windows路徑,並使用該批處理文件:

@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 
1

我做自己的CLI應用.NET編寫獲取/設置filestamps,它非常易於使用,並且比windows的filetouch好,也許你會想要使用我的應用程序。

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

enter image description here

enter image description here

的[Windows版本的Unix的觸摸命令(