Batch-File

用於重命名文件和添加時間戳的腳本(伺服器 2012 r2)

  • February 22, 2019

我正在努力創建一個滿足這些要求的(相當簡單的)批處理文件腳本:

  • 在名為 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,它確實是一個很棒的工具,並且比批處理腳本更加使用者友好,因為腳本語言很容易閱讀,主要是因為它幾乎是用簡單的語言編寫的英語。這是一個很好的資源資源!:)

引用自:https://serverfault.com/questions/857922