Batch-File
用於重命名文件和添加時間戳的腳本(伺服器 2012 r2)
我正在努力創建一個滿足這些要求的(相當簡單的)批處理文件腳本:
- 在名為 Source 的文件夾中查找文件(具有任何名稱.csv)
- 將文件重命名為 File_YYYYMMDD_HHMinMinSS.csv(如果可能,應修改時間戳/創建日期(修改/創建應該是同一件事,因此任何一個都可以)
- 將其移動到名為 Destination 的文件夾中,可以在其中進行進一步的工作。
每天創建 1 個文件,所以應該只有 1 個,但是如果有超過 1 個(由於腳本由於某種原因沒有執行),它應該能夠執行多個文件,或者只選擇第一個文件並處理它正確。(我可以安排它每天執行多次,以獲取之前未處理的任何內容。
所以這是我到目前為止的程式碼。我從Google把它拼湊在一起,它以一種時尚的方式工作,但並沒有完全符合我的要求。
echo off for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a set YYYY=%dt:~0,4% set MM=%dt:~4,2% set DD=%dt:~6,2% set HH=%dt:~8,2% set Min=%dt:~10,2% set Sec=%dt:~12,2% set stamp=%YYYY%%MM%%DD%_%HH%%Min%%Sec% move "c:\test\source\*.csv" "c:\test\destination\File_%stamp%.csv"
它發現文件沒問題。它以我想要的格式重命名(但使用目前日期和時間,不確定如何使用修改或創建的日期)並正確移動它。但它只適用於單個文件。如果目錄中有多個文件,則會出錯,它不能將多個文件合併到一個文件中(這是有道理的,它不能將所有文件重命名為 1 個文件。
但我被困住了。我不知道如何更進一步。有人可以幫我嗎?我模糊地理解程式碼在做什麼,但不足以操縱它來做我想做的事。
Powershell 也是一種選擇,但我對如何在其中執行此操作知之甚少。如果有另一個選項可以通過任務計劃程序輕鬆安排,那也可以。
這一點 powershell 可以滿足您的需求。只需將源目錄和目標目錄的完整路徑放在引號之間的頂部即可。
編輯:添加了有關文件創建時間的資訊。編輯:添加命名範例,#是註釋,一次只保留一個未
$name =
註釋,如果您取消註釋多個,它將是最後一個未註釋的生效。$source = "c:\te\s" $destination = "c:\te\d" Get-ChildItem $source -Recurse -Include *.csv | % { $name = $_.Name.Split(".")[0] + "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date -Format hhmmss) + ".csv" #$name = "Finished_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date -Format hhmmss) + ".csv" #$name = "Finished_" + $_.Name.Split(".")[0] + "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date -Format hhmmss) + ".csv" Rename-Item $_ -NewName $name Move-Item "$($_.Directory)\$name" -Destination $destination }
順便說一句,我強烈建議每天抽出一點時間來學習 PowerShell,它確實是一個很棒的工具,並且比批處理腳本更加使用者友好,因為腳本語言很容易閱讀,主要是因為它幾乎是用簡單的語言編寫的英語。這是一個很好的資源資源!:)