中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 问个删除文件的批处理 上一主题 | 下一主题
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『楼 主』:  问个删除文件的批处理

假设目录如下
d:\a\b
d:\a\c\a1
d:\a\c\a2
而且3个目录下都有若干文件,现在想删除每个目录下产生时间最早的所有文件,请问如何写命令?
谢谢各位

2006-11-5 15:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


  楼主所说的"较早的文件"是指什么时候的文件呢?还是想删除创建时间较早的前几个文件呢?如果要删除创建时间较早的前几个可以用以下的代码:
@echo off
setlocal enabledelayedexpansion
set /p num=要删除创建较早的前几个文件?
for /f "tokens=1,* delims=:" %%i in ('dir /a-d/tc/b ^| findstr/n . ') do (
        set /a a=%%i
        if !a! LEQ %num% del %%j
)
endlocal


2006-11-5 18:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 3 楼』:  

2f的兄弟,我是想删除创建时间最早的那一天的所有文件,但是却不知道具体的数目,请问该怎么做?
假设目录下有60个文件,每天有4个文件产生,也就是说存有15天的文件,我现在想删掉最早那天的4个文件,请问该如何做?

如果目录下文件数数目不清,每天产生的数目不清楚而且不固定,我现在想删掉最早那天的所有文件,请问该如何做?
上面全是以文件创建时间为依据

[ Last edited by onlykier on 2006-11-5 at 07:35 AM ]

2006-11-5 20:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 4 楼』:  

回去睡了,晚上等兄弟们的好消息..

2006-11-5 21:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 5 楼』:  

有个思路,放这标下,晚上在来搞
用dir /a-d/tc >>1.txt
用个循环将1.txt的每行的第一个数即时间保存,在循环里设置一个变量,因为第一个文件肯定是要删除的 ,当循环进行到第二次时,用时间与第一个文件的时间比较,相同则继续循环并作删除,不相同则跳出循环。

2006-11-5 21:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

http://www.cn-dos.net/forum/view ... ge=1&highlight=

2006-11-6 07:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 7 楼』:  

楼上的兄弟,你的链接里的例子都要有参数,我问的问题不是那样的。。。

2006-11-6 21:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 8 楼』:  

请各位看看下面的代码为什么会出错
@echo off
dir /s /a-d /tc|sort|find "-"|find /v "序列"
set c=0
for /f "tokens=1,4 delims= " %%i in ('dir /s /a-d /tc|sort|find "-"|find /v "序列"') do (
if c equ 0 (set a=%%i
                echo %%j
)else
(
set b=%%i
if "b"=="a" (echo %%j
                set a=b)
set /a c+=1))

命令语法不正确。

[ Last edited by onlykier on 2006-11-6 at 10:24 AM ]

2006-11-6 22:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 9 楼』:  

有人在吗?在线等

2006-11-6 23:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 10 楼』:  

如果运行出错了,就把 @echo off 这个去掉再调试,就会看到系统提示在哪一个命令上出错的信息:)

这句里 dir /s /a-d /tc|sort|find "-"|find /v "序列 里面是不是有特殊符号?
想想看哪一个符号是需要脱逸符(脱字符)(^)来转义的?
(如果 @echo off 状态下,将看不到更详细的错误信息)

请再看一下 IF /? 的帮助,再看一下你的这个IF的用法:)
“ELSE 子句必须在 IF 之后出现在同一行上……”,你看一下你的IF的用法是不是不太符合要求?

……
另:
  for ……
      if ....) else (....  if ...() )....
在你这么多语句当中,有很多的括号,尤其是最后这两个“ )) ”括号,
当代码量非常多的情况下,如果书写代码不规范,无论是自己还是别人找起错误来简直是不能忍受的事情,
而且更不利于清晰易懂和除错……

另:
你前面都赋值了:  set c=0
那么后面的……
if c equ 0  (如果 c 等于0,则……) 这个 c 变量 if 会“认识”吗?

if %c% equ 0 和  if c equ 0 你认为有区别吗?

[ Last edited by redtek on 2006-11-7 at 01:38 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-7 01:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 11 楼』:  

dir /s /a-d /tc|sort|find "-"|find /v "序列"
这句话的意思是
/s 显示当前目录及子目录的文件
/a-d 结果中去除文件夹的信息
/tc 按创建时间显示
|sort 是对dir /s/a-d/tc 的结果进行排序,按创建时间从早到晚排序
|find "-" 对dir /s /a-d /tc|sort 的结果进行筛选,只显示带有"-"的行
|find /v "序列" 的作用是,由于dir /s /a-d /tc|sort|find "-"显示的结果中有一行结果是不相要的,所以对dir /s /a-d /tc|sort|find 的结果中去除带有"序列"的那行
dir /s /a-d /tc|sort|find "-"|find /v "序列" 结果类此如下
2006-10-01  19:49              123,392 asdfasdfasd060921-060927.xls
2006-10-01  19:49              123,904 asdfasdfasd060914-060920.xls
2006-10-01  19:49              161,280 asdfasdfasd060831-060906.xls
2006-10-01  19:49              167,936 asdfasdfasd060907-060913.xls
2006-10-07  19:08              160,768 asdfasdfasd060824-060830.xls
2006-10-07  19:13              124,928 asdfasdfasd060928-061004.xls
2006-10-12  00:17              124,416 asdfasdfasd061005-061011.xls
2006-10-19  08:18              124,928 asdfasdfasd061012-061018.xls
2006-10-26  12:22              124,928 asdfasdfasd061019-061025.xls

其中上面的文件是在不同目录中的

关键是for /f "tokens=1,4 delims= " %%i in ('dir /s /a-d /tc|sort|find "-"|find /v "序列"')  这句
我想只取上面的结果中的第一列和第四列,即时间和文件名
但是这个for 却显示错误 此时不应有 |。
大家可以试验下面的句子就可以了
for /f "tokens=1,4 delims= " %%i in ('dir /s /a-d /tc|sort|find "-"|find /v "序列"')  do echo %%i

至于for中的循环体,可能是我表达不好,大家可以运行下面的代码
set b=0
for /l %%i in (1,1,4) do (
echo %b%
set /a b+=1)
我想显示
0
1
2
3
4
但是却显示成
0
0
0
0
0
请问大虾 该如何做?

[ Last edited by onlykier on 2006-11-6 at 01:52 PM ]

2006-11-7 02:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 12 楼』:  

顺便问下 %%i %i% !i! %i 有什么区别?

2006-11-7 02:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 13 楼』:  

%%i 出自于 for %%i in (...) do ... 双%号在批处理中运行使用,代表变量

%i% 出自于   Set  i=Redtek     这种形式在批处理或命令行都可以使用

%i  出自于直接在非批处理(在命令行中)直接键入的命令,
   如:  C:\> for %i in (...) do ....  它同样代表变量

%0   %1 .... 也代表变量(指参数),运行批处理时所带入的运行参数
   如:Dir /?  这个 /? 就代表参数
----------------------------------

onlykier开发速度太快,已经跳过了很多好玩的内容,
建议onlykier兄一定要去看下面这个贴子~:)
然后把下面贴子上的内容从头到尾做一遍,任何一行代码全都做一遍:)


[简单索引]关于SET变量、延时变量、各种符号的用法……
http://www.cn-dos.net/forum/viewthread.php?tid=24549&fpage=1


另:希望onlykier在上面贴子的链接中所指的内容,从头到尾全做一遍~:)
  当做论坛作业了啊,嘻嘻……

[ Last edited by redtek on 2006-11-7 at 03:11 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-7 03:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
onlykier
初级用户





积分 50
发帖 23
注册 2006-11-3
状态 离线
『第 14 楼』:  

楼上的兄弟 !i! 这个怎么用阿?
还有我想显示这个结果
0
1
2
3
4
该怎么做

2006-11-7 03:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by onlykier at 2006-11-7 03:18:
楼上的兄弟 !i! 这个怎么用阿?
还有我想显示这个结果
0
1
2
3
4
该怎么做

第一种方法:
@echo %dbg% off

for /L %%i in (0,1,4) do (
        echo %%i
)




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-7 03:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: