Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 复制/删除过去5天内创建的文本文件的批处理作业_Windows_Batch File_Cmd - Fatal编程技术网

Windows 复制/删除过去5天内创建的文本文件的批处理作业

Windows 复制/删除过去5天内创建的文本文件的批处理作业,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在创建一个简单的批处理作业,它将文本文件从一个指定目录复制并删除到另一个指定目录。但是,我尝试只复制/删除过去5天创建的文件。可以使用“移动批处理”命令指定天数吗 这是我到目前为止所拥有的。此脚本从原始目录中删除文件并将其复制到新目录 @echo off C: cd C:\Air move c:\Air\*.txt d:\Air_backup cd C:\ exit 提前感谢您的输入 这不是您所说的简单,但它将从当前文件夹中删除超过5分钟(使用创建日期)的文件 此时,del命令将只回显到屏

我正在创建一个简单的批处理作业,它将文本文件从一个指定目录复制并删除到另一个指定目录。但是,我尝试只复制/删除过去5天创建的文件。可以使用“移动批处理”命令指定天数吗

这是我到目前为止所拥有的。此脚本从原始目录中删除文件并将其复制到新目录

@echo off
C:
cd C:\Air
move c:\Air\*.txt d:\Air_backup
cd C:\
exit

提前感谢您的输入

这不是您所说的简单,但它将从当前文件夹中删除超过5分钟(使用创建日期)的文件

此时,del命令将只回显到屏幕上,因此在
if%MinsOld%gtr 5
后删除
echo
关键字以启用del命令,并将5更改为7200,持续
7200
分钟

XP用户有时会因为Windows XP中的短文件名错误而遇到一些文件名问题。

代码可以使用CreationDate或LastModified

更改此行:

if %MinsOld% gtr 5 echo del "%~1"
要将5天以前的文件移动到目标文件夹,请执行以下操作:

if %MinsOld% gtr 7200 move "%~1" "d:\target\folder"
以下是基本代码:

@echo off
if /i not "%~1"=="debug" set debug=::
:: Wmic removes regional differences
:: XP Pro can have some filename errors due to the short filename bug

setlocal

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "stamp=%YYYY% %MM% %DD% %HH% %Min%"

%debug% echo current time "%stamp%"

call :DateToMinutes %stamp% NowMins

for /f "delims=" %%a in ('dir * /a-d /b ^|find /v /i "%~nx0"') do call :CheckMins "%%~fa"
pause
goto :EOF

:CheckMins
set "filestamp="
set "filemins="
set "MinsOld="
set "YY=" & set "YYYY=" & set "MM=" & set "DD="
set "HH=" & set "Min=" & set "Sec=" & set "dt="
set "file=%~sf1"

:: can use CreationDate instead of lastmodified

WMIC DATAFILE WHERE name="%file:\=\\%" get creationdate | find "." >file.tmp
for /f %%a in (file.tmp) do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "filestamp=%YYYY% %MM% %DD% %HH% %Min%"
del file.tmp 2>nul

%debug% echo file time    "%filestamp%"


if not defined yyyy goto :EOF

call :DateToMinutes %filestamp% FileMins

set /a MinsOld=%NowMins%-%FileMins%
%debug% echo Now:%NowMins% File:%FileMins% Fileage:%minsold% "%~1"
%debug% pause
if %MinsOld% gtr 5 echo del "%~1"
goto :EOF

:DateToMinutes
setlocal
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF

@Haitham Salah:您可以使用'dir/T:C'获取文件创建日期和时间。通过将它们与当前的%DATE%和%TIME%进行比较,您将得到所需的时间跨度。最后,脚本将测试是否已过5天。