【问题标题】:TimeStamp on file name using PowerShell使用 PowerShell 的文件名时间戳
【发布时间】:2009-12-23 17:32:25
【问题描述】:

我有一个字符串路径,

"C:\temp\mybackup.zip"

我想在该脚本中插入一个时间戳,例如,

"C:\temp\mybackup 2009-12-23.zip"

在 PowerShell 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用子表达式在双引号字符串中插入任意 PowerShell 脚本代码,例如 $(),如下所示:

    "C:\temp\mybackup $(get-date -f yyyy-MM-dd).zip"
    

    如果您从其他地方获取路径 - 已经作为字符串:

    $dirName  = [io.path]::GetDirectoryName($path)
    $filename = [io.path]::GetFileNameWithoutExtension($path)
    $ext      = [io.path]::GetExtension($path)
    $newPath  = "$dirName\$filename $(get-date -f yyyy-MM-dd)$ext"
    

    如果路径恰好来自Get-ChildItem的输出:

    Get-ChildItem *.zip | Foreach {
      "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
    

    【讨论】:

    • 啊。 get-date -f yyyy-MM-dd 让我停了片刻,才意识到它不是 -f operator 而是-Format 参数 的缩写形式.它看起来相当不合适,不知何故:-)
    • 感谢 Keith,帮了大忙
    • 如果我也想要时间?
    • 我将它用于带时间戳的文件名: $timeStr = get-date -f 'yyyy-MM-dd-HHmmss' 也许不用几秒钟就可以了解情况。请注意,文件名中不能使用冒号。如果要分隔时间组件,可以使用点或破折号。
    【解决方案2】:

    这里有一些应该可以工作的 PowerShell 代码。您可以将其中的大部分内容组合成更少的行,但我希望保持清晰易读。

    [string]$filePath = "C:\tempFile.zip";
    
    [string]$directory = [System.IO.Path]::GetDirectoryName($filePath);
    [string]$strippedFileName = [System.IO.Path]::GetFileNameWithoutExtension($filePath);
    [string]$extension = [System.IO.Path]::GetExtension($filePath);
    [string]$newFileName = $strippedFileName + [DateTime]::Now.ToString("yyyyMMdd-HHmmss") + $extension;
    [string]$newFilePath = [System.IO.Path]::Combine($directory, $newFileName);
    
    Move-Item -LiteralPath $filePath -Destination $newFilePath;
    

    【讨论】:

    • 谢谢汤姆,这也是一个很大的帮助
    【解决方案3】:

    我需要导出我们的安全日志,并希望使用协调世界时的日期和时间。事实证明这是一个挑战,但执行起来非常简单:

    wevtutil export-log security c:\users\%username%\SECURITYEVENTLOG-%computername%-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).evtx
    

    神奇的代码就是这一部分:

    $(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))
    

    【讨论】:

    • hh 是 12 小时时间,没有 tt 它没有用。使用 HH 将为您提供 24 小时的时间。我推荐hhmmssttHHmmss
    • @JoshBrown 我在上面将hh 更改为HH。我认为这是大多数人想要的。
    【解决方案4】:

    感谢上述脚本。稍加修改即可添加正确结尾的文件。试试这个...

    $filenameFormat = "MyFileName" + " " + (Get-Date -Format "yyyy-MM-dd") **+ ".txt"**
    
    Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
    

    【讨论】:

      【解决方案5】:

      用途:

      $filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
      Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
      

      【讨论】:

      • 可能是$filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" ,因为它匹配 OP 格式
      • 这将创建filenameFormat = "mybackup.zip 2009-12-23"。不确定是否有意或有帮助...
      【解决方案6】:

      如果您在变量 ($pathfile) 上有路径,请使用此具体行来获取时间戳路径:

      (摘自here:https://powershellexamples.com/home/Article/10/file-management-add-timestamp-to-file-name

      $pathFile = "C:\ProgramData\MyApp\file.txt"
      $pathFileTimestamp = [System.IO.Path]::GetDirectoryName($pathFile) + "\" + `
              [System.IO.Path]::GetFileNameWithoutExtension($pathFile) + "_" + `
              (get-date -format yyyyMMdd_HHmmss) + ([System.IO.Path]::GetExtension($pathFile))
      
      
      Write-Host "Path+File: $pathFile"
      Write-Host "Path+File with Timestamp: $pathFileTimestamp"
      

      以上将返回:

      PS C:\> Path+File: C:\ProgramData\MyApp\file.txt
              Path+File with Timestamp: C:\ProgramData\MyApp\file_20210328_022045.txt
      

      【讨论】:

        【解决方案7】:

        另一种重命名方法。

        Set-Location C:\Folder_containing_zipfiles
        Get-ChildItem -File | ForEach-Object {  Rename-Item -Path $_.FullName -NewName  
         $_.Name.Replace('.zip',"_$(get-date -Format yyyy_MM_dd_hh_mm_ss).zip") }
        

        【讨论】:

          【解决方案8】:

          Date + Filename - NOT (Filename + Date) - 否则会弄乱文件扩展名。

          $filenameFormat = (Get-Date -Format "yyyy-MM-dd") + " " + "mybackup.zip"
          Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
          

          【讨论】:

          • 这似乎与Robert Blackwell's answer 非常相似,但会给出错误的输出...您的代码将创建一个文件为2009-12-23 mybackup.zip 而OP 要求mybackup 2009-12-23.zip(这正是罗伯特的答案输出)
          猜你喜欢
          • 1970-01-01
          • 2018-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多