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.