不到4天的FORFILES

时间:2013-10-06 13:58:54

标签: batch-file cmd

所以我很难通过FORFILES来解决这个问题。我正在尝试获取不超过4天的文件。所以基本上不到4天。但是,由于/ d -4可以获得4天或更长时间的所有项目,因此似乎不太可能。

以下是我到目前为止的情况。

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

任何人都知道这是否可行?或者也许是更好的选择?

3 个答案:

答案 0 :(得分: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中不起作用。

答案 1 :(得分: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

答案 2 :(得分: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