Mam ścieżkę w sznurku,
"C:\temp\mybackup.zip"
Chciałbym wstawić znacznik czasu do tego skryptu, na przykład
"C:\temp\mybackup 2009-12-23.zip"
Czy istnieje łatwy sposób na zrobienie tego w PowerShell?
Mam ścieżkę w sznurku,
"C:\temp\mybackup.zip"
Chciałbym wstawić znacznik czasu do tego skryptu, na przykład
"C:\temp\mybackup 2009-12-23.zip"
Czy istnieje łatwy sposób na zrobienie tego w PowerShell?
Odpowiedzi:
Możesz wstawić dowolny kod skryptu programu PowerShell w ciągu znaków w podwójnych cudzysłowach, używając wyrażenia podrzędnego, na przykład $ () w następujący sposób:
"C:\temp\mybackup $(get-date -f yyyy-MM-dd).zip"
A jeśli pobierasz ścieżkę z innego miejsca - już jako ciąg:
$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"
A jeśli ścieżka pochodzi z danych wyjściowych Get-ChildItem :
Get-ChildItem *.zip | Foreach {
"$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
Oto kod PowerShell, który powinien działać. Możesz połączyć większość tego w mniej wierszy, ale chciałem, aby było to 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;
Musiałem wyeksportować nasz dziennik bezpieczeństwa i chciałem mieć datę i godzinę w uniwersalnym czasie koordynowanym. Okazało się to wyzwaniem, ale tak prostym 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"))
hh
to czas 12-godzinny, bez tt
niego nie ma sensu. Korzystanie HH
daje 24-godzinny czas. Polecam albo hhmmsstt
alboHHmmss
hh
naHH
powyżej. Myślę, że tego będzie chciała większość ludzi.
Dzięki za powyższy scenariusz. Jedna mała modyfikacja, aby dodać poprawne zakończenie pliku. Spróbuj tego ...
$filenameFormat = "MyFileName" + " " + (Get-Date -Format "yyyy-MM-dd") **+ ".txt"**
Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
Posługiwać się:
$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"
dlatego, że pasuje do formatu OP
get-date -f yyyy-MM-dd
sprawiło, że zatrzymałem się na chwilę, zanim zdałem sobie sprawę, że to nie jest-f
operator, ale krótka forma-Format
parametru . Jakoś wyglądało to raczej nie na miejscu :-)