如何覆盖文件但保留原始文件时间戳记

时间:2018-08-30 02:20:55

标签: windows powershell batch-file

我有一个“目的地”文件夹,其中保存了文件及其时间戳(创建,修改),当我用这些文件的更新版本覆盖其中的一些文件时,我想保留它们。

示例

Destination Folder 
File.mp4- Created 01/01/01 (size 500mb)

Source Folder 
File.mp4 - Created 12/12/12 (size 4.00gb)

我使用源文件夹中的新更新版本覆盖目标文件夹中的文件,但将原始文件保留在目标文件夹中 时间戳

最终结果(目标文件夹中具有原始文件时间戳记的新覆盖文件)

Destination Folder
File.mp4 - Created 01/01/01 (size 4.00gb)

我已经写了一个批处理文件来按原样移动文件

  robocopy "Source" "Destination" /E

这可以完美地处理我的文件覆盖和移动,但是我还没有找到保留时间戳的方法。我正在寻找命令行,以便可以在批处理文件中实现它。任何帮助将不胜感激。我正在阅读robocopy等的标志,但是也许我读错了什么或什么东西,但我还没有弄清楚。

编辑: 这是我正在使用的powershell代码,但尚不存在。

edit 2我删除了电源壳,idk我正在做什么。

3 个答案:

答案 0 :(得分:0)

您追求的是/copyall标志。

robocopy "Source" "Destination" /e /copyall

这与您拥有/copy:DATSOU

  • D数据
  • A属性
  • T时间戳
  • S NTFS访问控制列表(ACL)
  • O所有者信息
  • U审核信息

我建议您使用read up on the flags及其运作方式。但是现在您有了一个可行的示例,可以根据需要在标志周围进行交换!

答案 1 :(得分:0)

您可以使用System.IO.File类。它具有许多您想使用的方法,例如SetCreationTimeSetLastAccessTimeSetLastWriteTime等。

#Creating new file
$File = New-Item -Path 'C:\file.txt' -ItemType File
#Getting the file's LastWriteTime attribute
[datetime]$LastWriteTime = [System.IO.File]::GetLastWriteTime($File)
#30 августа 2018 г. 9:34:56
"Changing file's data" | Out-File $File -Append
#Checkin the file's LastWriteTime attribute
[System.IO.File]::GetLastWriteTime($File)
#30 августа 2018 г. 9:35:49
#Now setting LastWriteTime attribute
[System.IO.File]::SetLastWriteTime($File, $LastWriteTime)
#Checkin the file's LastWriteTime attribute again
[System.IO.File]::GetLastWriteTime($File)
#30 августа 2018 г. 9:34:56

答案 2 :(得分:0)

好吧,当目标中还不存在文件时,也许您希望将文件的时间戳记保留在源文件夹中。 因此:

  • 如果目标文件夹中已经存在该文件,请从目标中存在的文件中复制并恢复时间戳记

  • 如果目标中不存在该文件,请从源复制并设置副本上的时间戳以与源文件夹中的原始时间戳相匹配。

如果这是您需要的,这是我编辑的代码:

def thr_to_accuracy(thr, Y_test, predictions):
   return -accuracy_score(Y_test, np.array(predictions>thr, dtype=np.int))

best_thr = scipy.optimize.fmin(thr_to_accuracy, args=(Y_test, predictions), x0=0.5)