Board logo

标题: 删除某一天的文件夹! [打印本页]

作者: xiaohacker     时间: 2007-3-7 11:15    标题: 删除某一天的文件夹!

xiaohacker想将某一天(指定的日期)生成的文件全部删除!不知道怎么做这个批处理!请大侠门高抬贵手!帮我写一个这样的批处理!谢谢!
作者: xycoordinate     时间: 2007-3-7 23:51
@echo off
setlocal enabledelayedexpansion
set /p inputdate=请输入日期(yyyy-mm-dd):
for /f "tokens=1,4" %%i in ('dir /a /s') do (
  set date=%%i
  set name=%%j
  if "!date!"=="!inputdate!" echo !name!
)
pause

子目录的文件只能显示文件名,找不到路径!!!

[ Last edited by xycoordinate on 2007-3-7 at 11:14 AM ]
作者: xycoordinate     时间: 2007-3-8 00:54    标题: 看第7楼!!!

@echo off
setlocal enabledelayedexpansion
set /p idate=请输入日期(yyyy-mm-dd):
set /p idir=请输入目录(绝对路径):
for /f "tokens=1,4" %%i in ('dir /a /s !idir!') do (
  set str=%%i
  set var=%%j
  if "!str!"=="!idate!" (
    if not "!var!"=="." (
      if not "!var!"==".." (
       echo !var!
      )
    )
  )
)

pause

修改了一下,排除掉文件:"." 和".."

如果你用del . 或del ..


[ Last edited by xycoordinate on 2007-3-7 at 08:52 PM ]
作者: xycoordinate     时间: 2007-3-8 01:53
《[求助]判断变量长度》
http://www.cn-dos.net/forum/view ... F%E9%95%BF%E5%BA%A6

如果有strings命令或”%@len“的话!!!
在哪儿可以下载到!!!


@echo off
setlocal enabledelayedexpansion
set /p idate=请输入日期(yyyy-mm-dd):
set /p idir=请输入目录(绝对路径):
set length=%@len[%idir%]
rem 在不你就自己输入路径长度
rem set /p length=请输入路径长度(注:1个汉字长度为1)

for /f "tokens=1,3,4" %%i in ('dir /a /s !idir!') do (
  set str=%%i
  set sub=%%j
  set var=%%k
  if "!str:~0,%length%!"=="!idir!" (
    set fpaht=!str!
  )
  if "!str!"=="!idate!" (
    if not "!sub!"=="<DIR>" (
      if not "!var!"=="." (
        if not "!var!"==".." (
          echo !fpaht!^\!var!
        )
      )
    )
  )
)

pause



[ Last edited by xycoordinate on 2007-3-7 at 08:36 PM ]
作者: xycoordinate     时间: 2007-3-8 05:17    标题: 看第7楼!!!

E:\>dir /s /a e:\DOS\111\科技 >e:\dir.txt

E:\>type e:\dir.txt

  Quote:
驱动器 E 中的卷没有标签。
卷的序列号是 70AE-C2D5

e:\DOS\111\科技 的目录

2006-03-07  13:10    <DIR>          .
2006-03-07  13:10    <DIR>          ..
2006-03-07  10:54                 3 111.txt
2007-02-05  11:24    <DIR>          123
2006-03-07  10:54                 3 222.txt
2007-02-04  13:15    <DIR>          abc
2006-03-07  12:37    <DIR>          夏天
               2 个文件              6 字节

e:\DOS\111\科技\123 的目录

2007-01-02  11:24    <DIR>          .
2007-01-02  11:24    <DIR>          ..
2006-03-07  10:54                 3 a.txt
2006-03-07  10:54                 3 b.txt
               2 个文件              6 字节

e:\DOS\111\科技\abc 的目录

2007-02-06  13:15    <DIR>          .
2007-02-06  13:15    <DIR>          ..
2007-02-06  12:16                 5 1.txt
2006-03-07  10:54                 3 2.txt
               2 个文件              8 字节

e:\DOS\111\科技\夏天 的目录

2006-03-07  12:37    <DIR>          .
2006-03-07  12:37    <DIR>          ..
2006-03-07  12:37                 3 x.txt
2006-03-07  12:38                 8 y.txt

               2 个文件             11 字节

     所列文件总数:
               8 个文件             31 字节
              11 个目录 10,531,729,408 可用字节

test.bat

  Quote:
@echo off
setlocal enabledelayedexpansion
set /p idate=请输入日期(yyyy-mm-dd):
set /p idir=请输入目录(绝对路径):
for /f "tokens=1,3,4" %%I in ('dir /a /s !idir!') do (

  set var1=%%~dpnI
  if "!var1!"=="!idir!" set fpath=!idir!

  set var2=%%~dpI
  if "!var2!"=="!idir!\" set fpath=!idir!\%%~nI


  set str1=%%I
  set str2=%%J
  set str3=%%K

  if "!str1!"=="!idate!" (
    if not "!str2!"=="<DIR>" (
      if not "!str3!"=="." (
        if not "!str3!"==".." (
          echo !fpath!^\!str3!
        )
      )
    )
  )

)

请大家看看!

E:\>test
请输入日期(yyyy-mm-dd):2006-03-07
请输入目录(绝对路径):E:\DOS\111\科技

  Quote:
E:\DOS\111\科技\111.txt
E:\DOS\111\科技\222.txt
E:\DOS\111\科技\123\a.txt
E:\DOS\111\科技\123\b.txt
E:\DOS\111\科技\abc\2.txt
E:\DOS\111\科技\夏天\x.txt
E:\DOS\111\科技\夏天\y.txt


判断目录那里还有问题!!!

  set var1=%%~dpnI
  if "!var1!"=="!idir!" set fpath=!idir!
  set var2=%%~dpI
  if "!var2!"=="!idir!\" set fpath=!idir!\%%~nI

只能匹配要查询的目录下(如E:\DOS\111\科技)的一层子目录!
如果有几层,文件能找到,但子目录名就会错误!
还是能有string命令好!!!

还有如果E:\DOS\111\科技,输入为e:\dos\111\科技是找不到的!?
怎么才能忽略大小写字母???


[ Last edited by xycoordinate on 2007-3-7 at 08:51 PM ]
作者: dikex     时间: 2007-3-8 06:38
if的命令那里加上/I参数可以忽略字符串的大小写,在if /?里面可以查看到
作者: xycoordinate     时间: 2007-3-8 07:30    标题: 请大家帮我检查检查!!!



  Quote:
Originally posted by dikex at 2007-3-7 17:38:
if的命令那里加上/I参数可以忽略字符串的大小写,在if /?里面可以查看到

谢谢!!

再修改test.bat

  Quote:
@echo off
setlocal enabledelayedexpansion
set /p idate=请输入日期(yyyy-mm-dd):
set /p idir=请输入目录(绝对路径):

for /f "tokens=1,3,4" %%I in ('dir /a /s !idir!') do (
  set str1=%%I
  set str2=%%J
  set str3=%%K

  if /i "!str1!"=="!idir!" set fpath=!idir!
rem 绝对路径肯定有盘符!!!
  if /i "!str1:~0,2!"=="!idir:~0,2!" set fpath=!str1!


  if "!str1!"=="!idate!" (
    if not "!str2!"=="<DIR>" (
      if not "!str3!"=="." (
        if not "!str3!"==".." (
          set fname=!fpath!\!str3!
          echo !fname!
        )
      )
    )
  )

)

但是,会出现“f:\\study3.bat”的情况!!!

  Quote:
请输入日期(yyyy-mm-dd):2007-03-07
请输入目录(绝对路径):f:\
f:\\指定日期文件.rar
f:\\study3.bat
f:\\dir.txt
f:\\study.bat
f:\\study2.bat

f:\Recycled\INFO2
f:\Recycled\Df1.bat
f:\Recycled\Df2.bat
f:\zdrq\1.txt
f:\zdrq\path.txt
f:\zdrq\study2.bat
f:\zdrq\test.bat
f:\zdrq\test5.bat
f:\zdrq\study3.bat
f:\zdrq\dir.txt
f:\zdrq\科技\夏天\path.txt
f:\zdrq\科技\夏天\study.txt
......

再加一点:
  if /i "!str1!"=="!idir!" set fpath=!idir!
  if /i "!str1:~0,2!"=="!idir:~0,2!" set fpath=!str1!
  if "!fpath:~-1!"=="\" set fpath=!fpath:~0,-1!
解决出现“f:\\study3.bat”的情况!!!

请大家帮我测试一下!!!

如果if not "!str2!"=="<DIR>" 不加,可以显示子目录名

注意:目录名中间不能有空格!!!

[ Last edited by xycoordinate on 2007-3-8 at 11:00 AM ]
作者: zhoushijay     时间: 2007-3-8 07:49
echo off
cls
set /p a=请输入要删除的完整文件明:
for %%i in (c,d,e,f) do del /f /s /q %%i:\"%a%" 2>nul
pause

[ Last edited by zhoushijay on 2007-3-7 at 06:54 PM ]
作者: xycoordinate     时间: 2007-3-8 11:06    标题: dir /a-d /s

F:\zdrq\科技>dir /a-d /s

  Quote:
驱动器 F 中的卷没有标签。
卷的序列号是 9487-0809

F:\zdrq\科技 的目录

2006-03-07  10:54                 3 111.txt
2006-03-07  10:54                 3 222.txt
2007-03-07  21:48               175 test.bat
2004-08-23  16:00           470,528 cmd.exe
2007-03-07  21:52               203 test1.bat
               5 个文件        470,912 字节

F:\zdrq\科技\夏天 的目录

2007-03-07  12:31               350 path.txt
2007-03-07  15:25               112 study.txt
2006-03-07  12:38                 3 x.txt
2006-03-07  12:38                 8 y.txt
               4 个文件            473 字节
。。。。。。

dir /a-d /s比dir /a /s强的多!!!

  Quote:
@echo off
setlocal enabledelayedexpansion
rem set /p idate=请输入日期(yyyy-mm-dd):
rem set /p idir=请输入目录(绝对路径):
echo 在%idir%目录中,符合%idate%的文件:
for /f "tokens=1,3,4" %%I in ('dir /a-d /s !idir!') do (
  set str1=%%I
  set str2=%%J
  set str3=%%K
  if /i "!str1!"=="!idir!" set fpath=!idir!
  if /i "!str1:~0,2!"=="!idir:~0,2!" set fpath=!str1!
  if "!fpath:~-1!"=="\" set fpath=!fpath:~0,-1!
  if "!str1!"=="!idate!" (
    set fname=!fpath!\!str3!
    echo !fname!
  )
)

[ Last edited by xycoordinate on 2007-3-8 at 10:59 AM ]
作者: xycoordinate     时间: 2007-3-15 05:57
《[求助]判断变量长度》
http://www.cn-dos.net/forum/view ... F%E9%95%BF%E5%BA%A6


怎么一使用string和lmod,CMD就变成english版的呢???

  Quote:
@echo off
setlocal enabledelayedexpansion
set /p idate=请输入日期(yyyy-mm-dd):
set /p idir=请输入目录(绝对路径):
strings length %idir% |lmod /L set /a length=[]-1 >tmp.bat
call tmp.bat

for /f "tokens=1,3,4" %%i in ('dir /a /s !idir!') do (
  set str=%%i
  set sub=%%j
  set var=%%k
  if "!sub:~0,%length%!"=="!idir!" (
    set fpaht=!sub!

  )
  if "!str!"=="!idate!" (
    if not "!sub!"=="<DIR>" (
      if not "!var!"=="." (
        if not "!var!"==".." (
          echo !fpaht!^\!var!
        )
      )
    )
  )
)

pause

[ Last edited by xycoordinate on 2007-3-14 at 05:34 PM ]