Znacznik czasu na nazwie pliku przy użyciu PowerShell

I have a path in a string,

"C:\temp\mybackup.zip "

Chciałbym wstawić znacznik czasu w tym skrypcie, na przykład,

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

Czy jest na to łatwy sposób w PowerShell?

 71
Author: Peter Mortensen, 2009-12-23

5 answers

Możesz wstawić dowolny kod skryptu PowerShell do podwójnego cytowanego ciągu, używając podwyrażenia, na przykład $() jak tak:

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

A jeśli otrzymujesz ścieżkę z innego miejsca-już jako ciąg znaków:

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

I jeśli ścieżka pochodzi z wyjścia Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
 140
Author: Keith Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 20:13:29

Oto Kod PowerShell, który powinien działać. Możesz połączyć większość z tego w mniej linijek, ale chciałem, aby było jasne i czytelne.

[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;
 9
Author: Tom Hazel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 20:14:27

Potrzebowałem wyeksportować Nasz Dziennik bezpieczeństwa i chciałem datę i godzinę w skoordynowanym czasie uniwersalnym. Okazało się, że jest to wyzwanie, ale tak proste do wykonania: {]}

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

Magiczny kod to tylko ta część:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddThhmmssZ"))
 8
Author: Ryker Abel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 20:15:18

Dzięki za powyższy skrypt. Jedna mała modyfikacja do dodania w pliku kończącym się poprawnie. Spróbuj tego ...

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

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
 2
Author: Robert Blackwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 12:00:22

Użycie:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
 1
Author: Will Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 20:16:11