ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Windows For 学习 (.bat)

Windows For 学习 (.bat)

原创 Linux操作系统 作者:ysjxjf 时间:2008-06-06 15:23:31 0 删除 编辑
for /f "skip=7 tokens=4" %a in ('dir f:test') do @if exist %a @echo %a[@more@]
用批处理实现的删除特定时间以前的文件发布:dxy 字体:[增加 减小] 类型:转载
使用for命令读取dir /tc /o-d /a的结果,可以分成4段,前两段为日期与时间,第3段为目录或文件大小,第4段为文件名或目录名。然后根据第1段和第2段与需要的时间进行比较,决定是否删除文件
@echo off
rem cd /d f:temp
rem mDateTime格式: yyymmddHHmm
set mDateTime=200608161907
for /f "skip=4 tokens=1,2,3,4* delims=<>" %%i in ('dir /a /-c /tc /o-d') do call :proc %%i %%j %%k %%l
goto end
:proc
set aDate=%1
set aTime=%2
set aType=%3
set aFile=%4
set aDatetime=%aDate:~0,4%%aDate:~5,2%%aDate:~8,2%%aTime:~0,2%%aTime:~3,2%
if /i "%aDateTime%" lss "%mDateTime%" (if NOT "%aType%"=="DIR" attrib "%aFile%" -r -h -s && del "%aFile%")
:end
但上面会有点问题,主要是因为if不能做大的数字的比较,200608161907对if来说太大了。我们可以先比较日期,再比较时间,但if语句比较多,还是折中一下,采用两位年份:
rem mDateTime格式: ymmddHHmm
set mDateTime=0608161907
……
set aDatetime=%aDate:~2,2%%aDate:~5,2%%aDate:~8,2%%aTime:~0,2%%aTime:~3,2%
Windows2003有一个命令Forfiles,如:
Forfiles /D -30 /C "cmd /c echo @fname 是30天前的。2000下可以把2003的Forfiles.exe文件拷过来用。
另外如果保留最近n个文件,就比较简单了,如,保留最近30个bak文件:
for /f "skip=30" %i in ('dir *.bak /tc /o-d /b') do del %i
批处理中,要把%i 改为%%i
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/8463.htm
::使用:将本段代码复制到一文本文件,然后保存为QueryFile.bat即可。
::用途:删除若干天前至今创建的文件;
::背景:当前病毒猖獗,每天都会在我们的硬盘创建很多的病毒文件!!
::附注:你可以有选择的删除 “若干天前至今创建的文件”,当然主要是病毒文件,但是也要注意,
::对于你的正常文件如果你不小心误删的话(在此日期内创建的文件,比如,你新下载的文件),可能导
::致无法挽回的结果,请慎用!!产生的一切后果,鄙人概不负责!!

::code by youxi01 2006-12-26

@echo off

::初始化;
color 1f
title 文件查询器
setlocal enabledelayedexpansion
set /a line=2

::如果参数不够,就转到初始画面;如果天数(第三参数)大于0,则写入文件;
if "%3"=="" goto :Start
if not exist %1 goto :Start
if %3 geq 0 (echo %1 中由 %3 天前至今 建立的 %2 文件有:>DelFile_lst.ini
echo.>>DelFile_lst.ini) else goto :Start

::生成vbs文件,计算日期;
echo Wscript.Echo DateAdd("d",-Wscript.Arguments(0),date())>test.vbe

::将日期计算结果传入Hdate;
for /f %%i in ('cscript.exe test.vbe %3 //nologo') do set Hdate=%%i

::查询文件,将结果写入文本文件;
for /f "skip=1 delims=" %%i in ('dir %1 /s/a-d/b *.%2') do (
if %%~ti gtr %Hdate% echo %%i>>DelFile_lst.ini)

::显示待删除文件配置文件;
cls
type DelFile_lst.ini

::读取待删除文件列表;
for /f "skip=1 delims=" %%i in (DelFile_lst.ini) do (
echo ============================
set /p EN=删除 "%%i" ? 『是^(Y^)/否^(N^)/删除全部^(YA^)』
if /I "!EN!"=="Y" del /q /f "%%i"
if /I "!EN!"=="YA" goto :Del_All
set/a line+=1)
goto :OVER

::删除所有选择文件;
:Del_All
cls
echo.
echo =========================
echo 正在清理文件........
echo =========================
for /f "skip=%line% delims=" %%i in (DelFile_lst.ini) do (
del /q /f "%%i")
echo 清理完毕!!

::程序结束,删除产生的临时文件;
:OVER
(del DelFile_lst.ini
del test.vbe)>nul 2>nul
pause>nul

:Start
cls
echo ╭───────────────╮
echo │ │
echo ╭─────────┤ 文 件 查 询 工 具 ├─────────╮
echo │ │ │ │
echo │ ╰───────────────╯ │
echo │ │
echo │ 本工具可以查询若干天之内某路径内某一扩展名的文件; │
echo │ │
echo │ 用法: [本文件名] [路径] [扩展名] [时间] │
echo │ │
echo │ 例如:查询F:盘的扩展名为bat,5天内创建的文件,就用: │
echo │ │
echo │ 如:QueryFile.bat f: bat 5 │
echo │ │
echo ╰───────────────────────────────────╯
%systemroot%system32cmd.exe /k

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/66634/viewspace-1005313/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-24

  • 博文量
    376
  • 访问量
    3279025