2017-05-29 30 views
0

如果我們不想在指定日期後複製文件,是否有人可以告訴我是否有任何方法。 例如如果我指定日期10-MAY-2017 & 11-MAY-2017和文件夾中有10 & 2017年5月11日的文件。所以如果只想複製10-MAY-2017文件。有什麼辦法嗎?複製文件的XCOPY命令日期選項

+0

閱讀文檔(β型'XCOPY /'到命令提示符),然後你會發現!考慮切換到['robocopy'](http://ss64.com/nt/robocopy.html)... – aschipfl

+0

如果您堅持使用'xcopy',您可以執行以下操作:'xcopy/L/D: ...「source」「destination」>「tempfile.txt」'(在日期或之後更改列表文件),然後'xcopy/L「source」「destination」| (在日期之前更改的列表文件),然後是「xcopy/T」source「」destination「(準備目錄),然後複製所有文件文件'copylist.txt'中的文件在循環中(見['for/F'](http://ss64.com/nt/for_f.html))... – aschipfl

+0

對不起,它沒有工作。有人可以提供解決方案 –

回答

0

手頭的任務,robocopy是做到這一點的最簡單的方法:

robocopy D:\Source D:\Destination *.* /S /MINAGE:20170510 

儘管開關/MINAGE的名稱,而不是創造,而是最後修改日期被認爲是。


在堅持使用xcopy情況下,這裏是一個基於xcopy,做以下步驟的腳本:

  • 創建不能被複制的文件列表,因爲這些被修改的給定日期或之後;爲此使用xcopy /L /F /D:/L意味着列出但不復制,/F定義爲輸出完全解析的源和目標路徑,並且/D:可以定義最後修改日期;
  • 使用findstr從所有可用文件(xcopy /L /F)的列表中篩選出以上所有文件;
  • 複製純文件目錄樹(xcopy /T);
  • 遍歷過濾文件列表並單獨複製每個文件copy;

這是代碼:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "SOURCE=D:\Source"  & rem // (source directory) 
set "DESTIN=D:\Destination" & rem // (target directory) 
set "PATTERN=*.*"   & rem // (file pattern) 
set "COPYDATE=05-11-2017" & rem /* (last modification date; only files are copied 
           rem  which are modified earlier; check format!) */ 
set "TEMPFILE=%TEMP%\%~n0_%RANDOM%.tmp" & rem // (list of source files not to copy) 
set "COPYLIST=%TEMP%\%~n0_%RANDOM%.lst" & rem // (full list of files to copy) 

rem // List files modified on or after given date: 
> "%TEMPFILE%" (
    for /F "tokens=1 delims=>" %%F in (' 
     xcopy /L /I /F /D:%COPYDATE% "%SOURCE%\%PATTERN%" "%DESTIN%" ^| find ":" 
    ') do (
     set "FILE=%%F" 
     rem /* Double every `\` as `findstr` uses such as escape character; 
     rem then append ` -> ` which is used by `xcopy /F` as separator: */ 
     setlocal EnableDelayedExpansion 
     (echo(!FILE:\=\\!^>) 
     endlocal 
    ) 
) 
rem /* List files modified before given date 
rem (actually the temporary `%COPYLIST%` file is not really necessary, 
rem  but it is quite convenient for understanding what is going on; instead 
rem  the below `for /F` loop could parse the output of this command line): */ 
xcopy /L /I /F "%SOURCE%\%PATTERN%" "%DESTIN%" | find ":"^
    | findstr /V /B /L /I /G:"%TEMPFILE%" > "%COPYLIST%" 
rem // Prepare directory tree as `copy` (below) cannot create directories: 
xcopy /I /T "%SOURCE%\%PATTERN%" "%DESTIN%" > nul 
rem // Copy files from list: 
for /F "usebackq tokens=1* delims=>" %%E in ("%COPYLIST%") do (
    set "LEFT=%%E" & set "RIGHT=%%F" 
    setlocal EnableDelayedExpansion 
    ECHO copy /Y "!LEFT:~,-2!" "!RIGHT:~1!" 
    endlocal 
) 
rem // Clean up temporary files: 
del "%TEMPFILE%" "%COPYLIST%" 

endlocal 
exit /B 
+0

感謝RobCopy命令,但如果有文件9,10和11.我想複製只有第10日期和這個robocopy命令複製9& 10兩者。 –

+0

你是說你只想複製某個日期的文件?這不是qhat你的問題說... – aschipfl

0

/d:MM-DD-YYYY複製文件改變或在指定日期之後。如果沒有給出日期,則僅複製源時間比目標時間更新的文件。

舉例:XCOPY/d:MM-DD-YYY