TimeStamp trên tên tệp bằng PowerShell


95

Tôi có một đường dẫn trong một chuỗi,

"C:\temp\mybackup.zip"

Tôi muốn chèn một dấu thời gian vào tập lệnh đó, ví dụ:

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

Có cách nào dễ dàng để thực hiện việc này trong PowerShell không?

Câu trả lời:


196

Bạn có thể chèn mã tập lệnh PowerShell tùy ý trong một chuỗi được trích dẫn kép bằng cách sử dụng biểu thức con, ví dụ: $ () như sau:

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

Và nếu bạn đang nhận được đường dẫn từ một nơi khác - đã là một chuỗi:

$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"

Và nếu đường dẫn đến từ đầu ra của Get-ChildItem :

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

5
Argh. get-date -f yyyy-MM-ddkhiến tôi dừng lại một lúc trước khi nhận ra rằng đó không phải-f toán tử mà là dạng rút gọn của -Format tham số . Nó trông khá lạc lõng, bằng cách nào đó :-)
Joey

Cảm ơn Keith đó là một trợ giúp lớn
Chris Jones

1
và nếu tôi muốn cả thời gian?
John Demetriou


16

Đây là một số mã PowerShell sẽ hoạt động. Bạn có thể kết hợp hầu hết điều này thành ít dòng hơn, nhưng tôi muốn giữ cho nó rõ ràng và dễ đọc.

[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;

Cảm ơn Tom, đó cũng là một trợ giúp lớn
Chris Jones

12

Tôi cần xuất nhật ký bảo mật của chúng tôi và muốn ngày và giờ theo Giờ Phối hợp Quốc tế. Điều này được chứng minh là một thách thức để tìm ra, nhưng rất đơn giản để thực hiện:

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

Mã ma thuật chỉ là phần này:

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

hhlà thời gian 12 giờ, không có ttnó là không hữu ích. Sử dụng HHsẽ cung cấp cho bạn thời gian 24 giờ. Tôi muốn giới thiệu một trong hai hhmmsstthoặcHHmmss
Josh Brown

@JoshBrown tôi đã thay đổi hhđến HHở trên. Tôi nghĩ đó là điều mà hầu hết mọi người sẽ muốn.
mwfearnley

4

Cảm ơn vì kịch bản trên. Một chút sửa đổi để thêm vào tệp kết thúc chính xác. Thử cái này ...

$filenameFormat = "MyFileName" + " " + (Get-Date -Format "yyyy-MM-dd") **+ ".txt"**

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat

2

Sử dụng:

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

có lẽ $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" vì đó phù hợp với định dạng OP
Đánh dấu Schultheiss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.