2013-10-06 33 views
3

所以我很難試圖找出與FORFILES。我正在嘗試獲取不超過4天的文件。所以基本上不到4天。然而,由於/ d-4獲得4天或更長時間的所有項目,因此它看起來不太可能。FORFILES小於4天

以下是我到目前爲止。

FORFILES /p T:\Downloads /m *.exe /c "cmd /c copy @path T:\Downloads\Applications | echo Copying @path" /d +4 

任何人都知道這是可能的嗎?或者,也許更好的選擇?

+0

我的回答[這裏](http://stackoverflow.com/a/36585535)用'forfiles'提供了一個解決方案... – aschipfl

回答

3

這可能會爲你工作:

@echo off &setlocal 
cd /d "T:\Downloads" 
(for %%a in (*.exe) do @echo "%%~a")>dir.txt 
for /f "delims=" %%a in ('forfiles /d -4 /m *.exe ^|findstr /vig:/ dir.txt') do echo Copying %%a&copy "%%~a" "T:\Downloads\Applications" 
del dir.txt 

可惜這並不在XP工作。

0

這似乎在這裏工作:它計算4天前的日期,並在forfiles命令中使用該日期。

@echo off 
set date1=today 
set qty=-4 
set separator=/ 
if /i "%date1%" EQU "TODAY" (set date1=now) else (set date1="%date1%") 
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%qty%,%date1%) 
echo>>"%temp%\%~n0.vbs" d=weekday(s) 
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^&_ 
echo>>"%temp%\%~n0.vbs"   right(100+month(s),2)^&_ 
echo>>"%temp%\%~n0.vbs"   right(100+day(s),2)^&_ 
echo>>"%temp%\%~n0.vbs"   d 
for /f %%a in ('cscript //nologo "%temp%\%~n0.vbs"') do set result=%%a 
del "%temp%\%~n0.vbs" 
endlocal& (
set "YY=%result:~0,4%" 
set "MM=%result:~4,2%" 
set "DD=%result:~6,2%" 
set "daynum=%result:~-1%" 
) 
set "day=%DD%%separator%%MM%%separator%%YY%" 

FORFILES /p T:\Downloads /m *.exe /d %day% /c "cmd /c copy @path T:\Downloads\Applications & echo Copying @path" 

pause 
0

我決定去另一個選項的前一天。我在網上發現了另一個腳本,它使我可以在批處理中使用以前的日期,這對我的需求來說工作得很好。因爲我可以調用這個文件並將它傳遞給我想要的前幾天,並且它會輸出我想要的日期。

http://www.powercram.com/2010/07/get-yesterdays-date-in-ms-dos-batch.html

@echo off 

set yyyy= 

set $tok=1-3 
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u 
if "%$d1:~0,1%" GTR "9" set $tok=2-4 
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
set %%x=%%u 
set %%y=%%v 
set %%z=%%w 
set $d1= 
set $tok=)) 

if "%yyyy%"=="" set yyyy=%yy% 
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100 

set CurDate=%mm%/%dd%/%yyyy% 
set dayCnt=%1 

if "%dayCnt%"=="" set dayCnt=1 

REM Substract your days here 
set /A dd=1%dd% - 100 - %dayCnt% 
set /A mm=1%mm% - 100 

:CHKDAY 
if /I %dd% GTR 0 goto DONE 
set /A mm=%mm% - 1 
if /I %mm% GTR 0 goto ADJUSTDAY 
set /A mm=12 
set /A yyyy=%yyyy% - 1 

:ADJUSTDAY 
if %mm%==1 goto SET31 
if %mm%==2 goto LEAPCHK 
if %mm%==3 goto SET31 
if %mm%==4 goto SET30 
if %mm%==5 goto SET31 
if %mm%==6 goto SET30 
if %mm%==7 goto SET31 
if %mm%==8 goto SET31 
if %mm%==9 goto SET30 
if %mm%==10 goto SET31 
if %mm%==11 goto SET30 
REM ** Month 12 falls through 

:SET31 
set /A dd=31 + %dd% 
goto CHKDAY 

:SET30 
set /A dd=30 + %dd% 
goto CHKDAY 

:LEAPCHK 
set /A tt=%yyyy% %% 4 
if not %tt%==0 goto SET28 
set /A tt=%yyyy% %% 100 
if not %tt%==0 goto SET29 
set /A tt=%yyyy% %% 400 
if %tt%==0 goto SET29 

:SET28 
set /A dd=28 + %dd% 
goto CHKDAY 

:SET29 
set /A dd=29 + %dd% 
goto CHKDAY 

:DONE 
if /I %mm% LSS 10 set mm=0%mm% 
if /I %dd% LSS 10 set dd=0%dd% 

REM Set IIS and AWS date variables 
set IISDT=%yyyy:~2,2%%mm%%dd% 
set AWSDT=%yyyy%-%mm%-%dd% 

結果會是什麼樣子: IIS日期:100727 AWS日期:2010-07-27

相關問題