3

所以我很难用 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

有谁知道这是否可能?或者也许是更好的选择?

4

3 回答 3

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 中不起作用。

于 2013-10-06T20:47:12.113 回答
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
于 2013-10-06T23:15:47.640 回答
0

我决定在前一个日期选择另一个选项。我在网上找到了另一个脚本,它可以让我获得 Batch 中以前的日期,它可以很好地满足我的需要。因为我可以调用这个文件并将它传递给我想要的前几天,它会输出我想要的日期。

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

于 2013-10-10T10:08:35.367 回答