簡體   English   中英

機器復制 | 只復制最新的一對文件

[英]Robocopy | copy only the newest pair of files

我一直在嘗試編寫一個腳本來復制一對文件。 它們幾乎是同一個文件:一個在.xlsx中,另一個在.pdf中。 作為財務報告,只要需要創建它們就會創建一對(不是隨機創建)。 每個項目文件夾都有很多對。

我想要

  • 只復制以"financial"開頭的文件——因為這是它們之間的模式;
  • 總是一對:一個.xlsx和一個.pdf文件;
  • 我只需要復制newest的一對。
@CHCP 65001
@echo off
robocopy "C:\source" "C:\dest" financial* (.xlsx*.pdf*) /XO /E /R:3
pause

我上面寫的代碼幫助了我。 但它不符合我的第三個條件,即只復制最新的一對。 有人知道怎么做嗎?

@echo off & >nul chcp 65001

2>nul cd/d "C:\Source\" && set "_destiny=\\to\target\folder\." || (
      timeout /t -1 | echo\Path do not exist: C:\Source && goto :eOf ) 

for /f tokens^=* %%i in ('dir/b/a-d/o-d/tc .\financial*.*^|findstr/lei "\.pdf \.xlsx"'
      )do 2>nul robocopy .\. "%_destiny%" "%%~ni.xlsx" "%%~ni.pdf" /mov /njh|find "100%%"

1. Go 到源文件夾,文件的源,抑制任何可能的錯誤( 2>nul ):

2>nul cd/d "C:\Source\."

2.如果文件夾存在,定義你的目標,如果它不存在(如果在錯誤的位置/工作站執行bat),中斷並提醒你的用戶..

2>nul cd/d    ...    &&  || (
 timeout -1 | echo\Path do not exist: C:\Source && goto :eOf )

3.列出您的文件以獲取文件夾中的最新文件,並將該列表重定向到Findstr以逐字過濾您以查找以所需擴展名結尾的文件。

dir/b/a-d/o-d/tc .\financial*.*^|findstr/lei "\.pdf \.xlsx"

4.將循環命令的結果通知/傳遞給robocopy (僅文件名),但已限制復制(移動)兩個擴展名,以及源的當前文件夾 ( .\. ) 和目標 ( %_destiny% ) .

robocopy .\. "%_destiny%" "%%~ni.xlsx" "%%~ni.pdf" /mov /njh

5.只是一個限制 output 的建議,在每行顯示 100% 的地方獲取結果,將robocopy output 重定向到find

robocopy    ...     |find "100%%"

.xlsx .pdf ... only if there are both, the && operator (means return 0 ) will execute the your robocopy command: dir .xlsx .pdf可以在先前驗證條件是否存在的循環中使用當前文件的名稱成對存在&&運算符(表示return 0 )都將執行您的robocopy命令:

  •  @echo off   2>nul cd/d "C:\Source\." && set "_destiny=\\to\target\folder\." || ( timeout -1 | echo\Path do not exist: C:\Source && goto:eOf )   1>nul chcp 65001 && set "_cmd=dir/b/ad/od/tc.\"financial*.*""   for /f tokens^=* %%i in ('%_cmd%^|findstr/lei "\.pdf \.xlsx"')do 2>nul dir /b.\"%%~ni.xlsx".\"%%~ni.pdf" && ( 2>nul robocopy.\. "%_destiny%" "%%~ni.xlsx" "%%~ni.pdf" /mov /njh|find "100%%")

Obs.: 2.如果目標是移動一對,而不是對,只需添加& goto: eof ,導致批處理/循環立即結束/中止。

  •  @echo off   2>nul cd/d "C:\Source\" && set "_destiny=\\to\target\folder\." || ( timeout -1 | echo\Path do not exist: C:\Source && goto:eOf )   1>nul chcp 65001 && set "_cmd=dir/b/ad/od/tc.\"financial*.*""   for /f tokens^=* %%i in ('%_cmd%^|findstr/lei "\.pdf \.xlsx"')do 2>nul dir /b.\"%%~ni.xlsx".\"%%~ni.pdf" && ( 2>nul robocopy.\. "%_destiny%" "%%~ni.xlsx" "%%~ni.pdf" /mov /njh|find "100%%" & goto:eOf )

Obs.: 3.如果由於某種原因需要move文件,其中一些文件已經存在於目標文件夾中,那么您需要覆蓋它,然后在您的robocopy命令中使用/添加/IS 這是

  • @echo off   1>nul chcp 65001 & set "_cmd=dir /b/a:-d/o:-d/t:c ".\financial*.*"" 2>nul cd /d "C:\Source\." && set "_target=\\to\target\folder\." || ( timeout /t -1 | echo\Path/Source do not exist: C:\Source & goto:eOf)   for /f tokens^=* %%i in ('2^>nul %_cmd% ^|findstr/lei "\.pdf \.xlsx"')do 2>nul ( 2>nul robocopy.\. "%_target%" "%%~ni.xlsx" "%%~ni.pdf" /mov /njh /is|find "100%%")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM