【发布时间】:2009-12-23 17:32:25
【问题描述】:
我有一个字符串路径,
"C:\temp\mybackup.zip"
我想在该脚本中插入一个时间戳,例如,
"C:\temp\mybackup 2009-12-23.zip"
在 PowerShell 中是否有一种简单的方法可以做到这一点?
【问题讨论】:
标签: powershell
我有一个字符串路径,
"C:\temp\mybackup.zip"
我想在该脚本中插入一个时间戳,例如,
"C:\temp\mybackup 2009-12-23.zip"
在 PowerShell 中是否有一种简单的方法可以做到这一点?
【问题讨论】:
标签: powershell
您可以使用子表达式在双引号字符串中插入任意 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 参数 的缩写形式.它看起来相当不合适,不知何故:-)
这里有一些应该可以工作的 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;
【讨论】:
我需要导出我们的安全日志,并希望使用协调世界时的日期和时间。事实证明这是一个挑战,但执行起来非常简单:
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 小时的时间。我推荐hhmmsstt 或HHmmss
hh 更改为HH。我认为这是大多数人想要的。
感谢上述脚本。稍加修改即可添加正确结尾的文件。试试这个...
$filenameFormat = "MyFileName" + " " + (Get-Date -Format "yyyy-MM-dd") **+ ".txt"**
Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
【讨论】:
用途:
$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"。不确定是否有意或有帮助...
如果您在变量 ($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
【讨论】:
另一种重命名方法。
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") }
【讨论】:
Date + Filename - NOT (Filename + Date) - 否则会弄乱文件扩展名。
$filenameFormat = (Get-Date -Format "yyyy-MM-dd") + " " + "mybackup.zip"
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
【讨论】:
2009-12-23 mybackup.zip 而OP 要求mybackup 2009-12-23.zip(这正是罗伯特的答案输出)