2017-06-21 117 views
-3

我需要創建一個批處理文件,每天備份10個文件到我們的服務器上。爲了提供一個簡短的背景,我們使用支付系統,每天將這些文件分發出去,我們希望確保這些文件每天都上傳到服務器上,但是,這些文件的文件名會每天都改變,這意味着覆蓋可能不會工作。但我可以自信地創建一個批處理文件來進行復制和覆蓋,但我不確定如何用新文件名的10批文件覆蓋這些文件。批處理文件複製並覆蓋文件,不管文件名是什麼

你能提供幫助嗎?

親切的問候,

廣告

+1

也許吧。通過將您的代碼編輯到您的帖子中向我們顯示。 – Magoo

+0

這是我與然而工作的基本代碼,我急轉直下實現的文件(與千變萬化的文件名)需要重寫每個夜晚後: XCOPY C:\ Users \用戶名\桌面\測試* R: \測試*/Y/Q/S – Admaine

+1

@Admaine糾正我,如果我誤解了,但你不能簡單地刪除舊的備份,然後複製文件?如果不是,名稱取決於任何事情/它們是否可以預測? – Regejok

回答

0
:: this deletes 10 files named "file1.txt" to "file10.txt" 
for /L %%a in (1,1,10) do del R:\Test\file%%a.txt 
:: this takes ALL of the files matching the mask and copies them to 
:: "file*.txt" at the destination 
for /f "tokens=1*delims=: " %%a in (
'dir /b /a-d "C:\Users\Username\Desktop\Test*" ^|findstr /n /r "." ') do (
echo xcopy "C:\Users\Username\Desktop\%%b" "R:\test\file%%a.txt" 
) 

的第一個命令應該是顯而易見的。僅

第二簡單地列出源目錄,名稱,無匹配「測試*」文件的數據夾並指示輸出到findstr其中/n號每一行匹配/r正則表達式「」 (這將是所有。)

findstr輸出將是以下形式的

1:測試one.xyz

for將tokenise結果,%%a接收部分之前分隔符序列和%%b之後的部分。分隔符分別設置爲:空間; findstr計數每個作爲分隔符,以及作爲一個分隔符字符串。

結果是echo ED,以確保所建議的行動是報道,不執行使得發生任何損壞之前,可以檢測到任何錯誤。

激活copy,只需刪除echo關鍵字。

請注意,這些文件仍保留在源代碼中,因爲您尚未提供關於如何進一步處理它們的任何線索。如果文件被留在原地,他們會在下次運行復制以及 - 在for循環只會繼續計數...


for /f "tokens=1*delims=: " %%a in (
'dir /b /a-d /o-d "C:\Users\Username\Desktop\Test*" ^|findstr /n /r "." ' 
) do if %%s leq 10 (
echo copy "C:\Users\Username\Desktop\%%b" "R:\test\" 
) 

將[呼應命令] copy最新從源目錄到目的地的10個文件。

應該很明顯如何將10更改爲其他值。

操縱實際的目錄名稱和維護源目錄和目標目錄 - 你的事情。

+0

嗨, 對不起,我應該更清楚。 所以備份文件會自動刪除在每一天結束的最古老的,所以可以很容易理解,如果備份吐出來,從14日至6月21號文件,然後在一天結束的第14屆會除去。從理論上講,我只需要備份最新的文件,但我不確定如何使用文件名永遠不會相同。 我希望這有助於:) – Admaine

+0

@Admaine如果你只需要最新的文件,你可能想看看'forfiles'。示例如何刪除所有超過10天的文件:'forfiles -p「C:\ backups」/ D -10/C「cmd/c del @path」 – Regejok

+0

如果您只是想要最近的'n'文件,那麼在'dir'命令中添加'/ od'命令,然後按照反向日期的順序提供列表,如果你想限制到'n'文件被傳輸,在條目之前添加'if %% a leq n' '副本',以便副本僅在序列號小於或等於指定數量的情況下進行。然後你可能不需要改變文件名,所以你可以簡單地從目標文件名中除去'filename %% a.txt',只留下目錄名。 – Magoo

相關問題