在文件上附加日期/时间并更新上次修改/保存的日期

时间:2019-06-02 14:09:55

标签: windows powershell command-line

我正在尝试自动重命名一些文件,但是还需要文件更新它的“上次修改”时间,因为我在Word文档中插入了一个字段,该字段可以动态更新上次编辑文件的时间。

copy  C:\path\to\file\test\test.docx "C:\path\to\file\test2\test-%date:~-7,2%-%date:~-10,2%-%date:~-4,4% %time:~-11,2%%time:~-8,2%.docx"

我尝试集成以下语法:     copy /b filename.ext +,,

我来自: https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch/764716

但是,当我在源文件后面加上+时,它什么也没输出。

copy /b "C:\path\to\file\test\test.docx" + "C:\path\to\file\test2\test- 
%date:~-7,2%-%date:~-10,2%-%date:~-4,4% %time:~-11,2%%time:~-8,2%.docx"

我还尝试在批处理文件中调用PowerShell脚本以更新上次修改日期:

$file = Get-Item C:\Path\TO\test.docx
$file.LastWriteTime = (Get-Date)

copy C:\path\to\file\test\test.docx "C:\path\to\file\test2\test- 
%date:~-7,2%-%date:~-10,2%-%date:~-4,4% %time:~-11,2%%time:~-8,2%.docx"
powershell -file C:\path\to\powershell.ps1

无论哪种方式都无法正常工作,我是新手,所以可能缺少一些简单的东西。

2 个答案:

答案 0 :(得分:0)

我能够弄清楚这一点。现在,我的批处理文件如下:

powershell -command "(Get-Item "C:\path\to\file\test\test.docx").LastWriteTime = (Get- 
Date)"
copy C:\path\to\file\test\test.docx "C:\path\to\file\test2\test-%date:~-7,2%- 
%date:~-10,2%-%date:~-4,4%%time:~-11,2%%time:~-8,2%.docx"

首先修改文件的最后编辑日期,然后将其复制到带有时间和日期的test 2文件夹中。

答案 1 :(得分:0)

我很好奇您的意思:

  

我在Word文档中插入了一个字段,该字段动态地更新了上次编辑文件的时间。

如果您复制文件,则其内容不会更改,并且LastWriteTime保持不变,
那么,为什么要set将LastWriteTime设置为当前日期和时间?

根据您尝试在cmd.exe中进行复制的操作,您确实省略了两个逗号,应该这样做:

copy /b "C:\path\to\file\test\test.docx" + , , "C:\path\to\file\test2\test-%date:~-7,2%-%date:~-10,2%-%date:~-4,4% %time:~-11,2%%time:~-8,2%.docx"

我的评论中的PowerShell建议:

'C:\path\to\file\test\test.docx' | 
 Get-Item |
  Copy-Item -Destination {'{0}\{1}-{2:MMddyyyy\ HHmm}{3}' -f `
                          $_.Directory, $_.Basename, 
                          $_.LastWriteTime, $_.Extension} -WhatIf

可以修改为使用日期时间附录重命名所有文件,以反映实际的LastWriteTime

Get-ChildItem -File -Filter *.docx | 
  Where BaseName -Match '-\d{8} \d{4}$' | 
    Rename-Item -NewName {'{0}-{1:MMddyyyy\ HHmm}{2}' -f `
                   $_.Basename.Replace($Matches[0],''),
                   $_.LastWriteTime, $_.Extension} -WhatIf

如果NewName相同,则Rename-Item将忽略它。
与Copy-Item相比,Rename-Item不允许目录。