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?
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:
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)"}
Đâ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;
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"))
hh
là thời gian 12 giờ, không có tt
nó là không hữu ích. Sử dụng HH
sẽ cung cấp cho bạn thời gian 24 giờ. Tôi muốn giới thiệu một trong hai hhmmsstt
hoặcHHmmss
hh
đến HH
ở trên. Tôi nghĩ đó là điều mà hầu hết mọi người sẽ muốn.
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
Sử dụng:
$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"
vì đó phù hợp với định dạng OP
get-date -f yyyy-MM-dd
khiến tôi dừng lại một lúc trước khi nhận ra rằng đó không phải là-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 đó :-)