2015-04-08 86 views
1

我嘗試寫一些腳本複製昨天已創建的所有文件(僅!)爲XCOPY手段BAT/POWERSHELL副本(只)昨天文件

/d參數複製文件更改上或之後指定的日期,所以它不是我正在尋找。有任何想法嗎? ;/

+1

你有沒有嘗試過一些東西,並面臨一個具體的問題,或者你只是要求工作代碼? – Naigel

+2

FORFILES -p E:\ test/d -1 -m * .txt -c「CMD/C XCOPY E:\ test \ @FILE E:\ test \ 123」(它是昨天及以前)c:\ windows \ system32 \ xcopy.exe E:\ test \ *。txt E:\ test \ 123 \/s/f/y/d:04-07-2015(昨天和晚些時候)我不知道如何獲取昨天的文件 – MiK

回答

2

我建議你使用powershell。您可以使用Get-ChildItemWhere-Object得到的文件列表創建的前一天

$yesterdayFiles = Get-ChildItem | Where-Object {$_.CreationTime.Date -eq ((Get-Date).AddDays(-1).Date)} 

然後你就可以使用Copy-Item的cmdlet

2

我已經與ROBOCOPY/MINAGE試圖複製存儲在$yesterdayFiles變量中的文件: 1 /最大生存週期:1,但似乎並不work.But工作時,我設置當前date.Here的腳本(你需要設置你的源和目標):

@echo off 

set "source=C:\folder1" 
set "dest=C:\folder2" 

pushd "%temp%" 
::get cirrent date 
makecab /D RptFileName=~.rpt /D InfFileName=nul /f nul >nul 
for /f "tokens=3-7" %%a in ('find /i "makecab"^<~.rpt') do (
    set "year=%%e" 
    set "mon=%%b" 
    set "day=%%c" 

) 
del ~.* 
popd 
:: convert month to numeric string 
for %%a in (
    "Jan-01" "Feb-02" "Mar-03" "Apr-04" "May-05" "Jun-06" "Jul-07" "Aug-08" "Sep-09" "Oct-10" "Nov-11" "Dec-12" 
) do (
    for /f "tokens=1,2 delims=-" %%x in ("%%~a") do (
     if "%mon%" equ "%%x" (
      set "mon=%%y" 
      goto :skip 
     ) 
    ) 
) 
:skip 
set "c_date=%year%%mon%%day%" 
::echo %c_date% 

:: is switch is for force overwriting 
robocopy "%source%" "%dest%" * /maxage:1 /minage:%c_date% /is 

自Vista以來,每一個窗口都內置了robocopy。如果您的系統是在XP或Vista下運行的,您需要從Microsoft網站下載它。

1

該批處理文件選擇在今天之前在同一日期上創建的所有文件。如果您確定有昨天創建的文件,那麼它可以解決您的問題。

@echo off 
setlocal EnableDelayedExpansion 

set "yesterday=" 
for /F "skip=5 tokens=1,4*" %%a in ('dir /TC /O-D /A-D') do (
    if "%%a" neq "%date%" (
     if not defined yesterday set "yesterday=%%a" 
     if "%%a" equ "!yesterday!" (
     echo Created yesterday: %%a "%%c" 
    ) else (
     goto break 
    ) 
    ) 
) 
:break