PowerShell kullanarak dosya adı üzerinde TimeStamp


99

Bir dizede bir yolum var

"C:\temp\mybackup.zip"

Bu komut dosyasına bir zaman damgası eklemek istiyorum, örneğin,

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

Bunu PowerShell'de yapmanın kolay bir yolu var mı?

Yanıtlar:


205

Bir alt ifade kullanarak, örneğin $ () gibi, çift tırnaklı bir dizeye rastgele PowerShell komut dosyası kodu ekleyebilirsiniz:

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

Ve yolu başka bir yerden alıyorsanız - zaten bir dize olarak:

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

Yol Get-ChildItem'in çıktısından geliyorsa :

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

6
Argh. get-date -f yyyy-MM-ddBeni bu kadar fark önce bir an için durdurmak yapılan değil -f operatör ama için kısa form -Format parametresi . Oldukça yersiz görünüyordu :-)
Joey

Teşekkürler Keith, bu çok yardımcı oldu
Chris Jones

1
ve ben de zamanı istiyorsam?
John Demetriou


Bunu zaman damgalı dosya adları için kullanıyorum: $ timeStr = get-date -f 'yyyy-MM-dd-HHmmss' Durumdan saniyeler geçmeden belki. Dosya adında iki nokta üst üste kullanılamayacağını unutmayın. Zaman bileşenlerini ayırmak istiyorsanız bir nokta veya kısa çizgi kullanabilirsiniz.
jim birch

19

İşte çalışması gereken bazı PowerShell kodu. Bunların çoğunu daha az satırda birleştirebilirsiniz, ancak ben onu açık ve okunaklı tutmak istedim.

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

Teşekkürler Tom, Bu da çok yardımcı oldu
Chris Jones

14

Güvenlik günlüğümüzü dışa aktarmam gerekiyordu ve tarih ve saati Koordineli Evrensel Saat olarak istedim. Bu, çözülmesi zor, ancak uygulaması çok basitti:

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

Sihirli kod sadece bu kısımdır:

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

hh12 saattir, onsuz ttkullanışlı değildir. Kullanmak HHsize 24 saat süre verecektir. Ya hhmmssttda öneririmHHmmss
Josh Brown

@JoshBrown Değiştim hhiçin HHyukarıda. Sanırım çoğu insan bunu isteyecek.
mwfearnley

4

Yukarıdaki komut dosyası için teşekkürler. Doğru şekilde biten dosyaya eklenecek küçük bir değişiklik. Bunu dene ...

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

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

2

Kullanım:

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

belki $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" o OP formatını maçları beri
Mark Schultheiss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.