【问题标题】:Appending date/time to file AND updating last modified/save date将日期/时间附加到文件并更新上次修改/保存日期
【发布时间】:2019-06-02 14:09:55
【问题描述】:

我正在尝试自动重命名某些文件,但还需要文件更新它的“上次修改”时间,因为我在 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

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

【问题讨论】:

  • 单行PowerShell命令'C:\path\to\file\test\test.docx'|gi|copy-item -dest {'{0}\{1}-{2:MMddyyyy\ HHmm}{3}' -f $_.Directory,$_.Basename,$_.LastWriteTime,$_.Extension} -WhatIf可以打包成一个批处理。

标签: windows powershell command-line


【解决方案1】:

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

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 文件夹并附加时间和日期。

【讨论】:

  • 想知道如何在不指定文件路径的情况下修改它,以便它只在某个目录中的文件上运行,并在同一文件夹中创建一个副本,附加时间/日期并更新修改日期?更进一步,我可以将“复制”命令更改为“重命名”,修改原始文件,然后下次运行脚本时,它会从文件名中删除以前添加的日期并添加当前日期?
  • 更新您的问题,因为现在这在两个地方太令人困惑了。就目前而言,我们没有足够的详细信息,因此请确保您提供更多详细信息。关于如何在没有完整文件路径的情况下执行此操作的问题...使用 pushd 和 popd。
【解决方案2】:

我有点好奇你的意思:

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

如果你复制一个文件,它的内容不会改变并且 LastWriteTime 保持不变,
那你为什么要setLastWriteTime 到当前日期和时间呢?

根据您在 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 不允许目录。

【讨论】:

  • 试过你的powershell one liner,虽然它说它正在复制文件,但它实际上并没有在目标中创建文件?以管理员身份运行 Powershell,没有骰子。想知道它是否在我的工作环境中受到限制,稍后将在家里测试。此外,我需要文件将其上次写入时间更新为当前时间,然后在我运行脚本时将当前时间附加到复制的文件名(而不是将上次写入时间附加到文件名)。我会使用重命名选项,但我不确定它是否会在添加新日期之前从文件名中删除前一个日期。感谢您的帮助!
  • 好吧,一旦你对输出感到满意,我忘了提删除-WhatIf。重命名变体使用 Where-Object 将尾随日期时间(破折号 8 位空格 4 位)存储在自动变量 $Matches 中,并在应用新的日期时间之前将其删除。
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 2016-05-28
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
相关资源
最近更新 更多