中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 09:08
48,037 主题排行 / 350,122 发帖 / 今日 0 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 问个删除文件的批处理
可打印版本  2,829 / 27
第1楼 onlykier 发表于 2006-11-05 15:10
初级用户 发帖 23 积分 50
问个删除文件的批处理
假设目录如下
d:\a\b
d:\a\c\a1
d:\a\c\a2
而且3个目录下都有若干文件,现在想删除每个目录下产生时间最早的所有文件,请问如何写命令?
谢谢各位
第2楼 lxmxn 发表于 2006-11-05 18:41
版主 发帖 4,938 积分 11,386

  楼主所说的"较早的文件"是指什么时候的文件呢?还是想删除创建时间较早的前几个文件呢?如果要删除创建时间较早的前几个可以用以下的代码:

第3楼 onlykier 发表于 2006-11-05 20:09
初级用户 发帖 23 积分 50
2f的兄弟,我是想删除创建时间最早的那一天的所有文件,但是却不知道具体的数目,请问该怎么做?
假设目录下有60个文件,每天有4个文件产生,也就是说存有15天的文件,我现在想删掉最早那天的4个文件,请问该如何做?

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

[ Last edited by onlykier on 2006-11-5 at 07:35 AM ]
第4楼 onlykier 发表于 2006-11-05 21:13
初级用户 发帖 23 积分 50
回去睡了,晚上等兄弟们的好消息..
第5楼 onlykier 发表于 2006-11-05 21:24
初级用户 发帖 23 积分 50
有个思路,放这标下,晚上在来搞
用dir /a-d/tc >>1.txt
用个循环将1.txt的每行的第一个数即时间保存,在循环里设置一个变量,因为第一个文件肯定是要删除的 ,当循环进行到第二次时,用时间与第一个文件的时间比较,相同则继续循环并作删除,不相同则跳出循环。
第6楼 vkill 发表于 2006-11-06 07:15
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
第7楼 onlykier 发表于 2006-11-06 21:55
初级用户 发帖 23 积分 50
楼上的兄弟,你的链接里的例子都要有参数,我问的问题不是那样的。。。
第8楼 onlykier 发表于 2006-11-06 22:47
初级用户 发帖 23 积分 50
请各位看看下面的代码为什么会出错
@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 ]
第9楼 onlykier 发表于 2006-11-06 23:35
初级用户 发帖 23 积分 50
有人在吗?在线等
第10楼 redtek 发表于 2006-11-07 01:35
金牌会员 发帖 1,147 积分 2,902
如果运行出错了,就把 @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 ]
第11楼 onlykier 发表于 2006-11-07 02:47
初级用户 发帖 23 积分 50
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 ]
第12楼 onlykier 发表于 2006-11-07 02:51
初级用户 发帖 23 积分 50
顺便问下 %%i %i% !i! %i 有什么区别?
第13楼 redtek 发表于 2006-11-07 03:07
金牌会员 发帖 1,147 积分 2,902
%%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 ]
第14楼 onlykier 发表于 2006-11-07 03:18
初级用户 发帖 23 积分 50
楼上的兄弟 !i! 这个怎么用阿?
还有我想显示这个结果
0
1
2
3
4
该怎么做
第15楼 redtek 发表于 2006-11-07 03:28
金牌会员 发帖 1,147 积分 2,902
Originally posted by onlykier at 2006-11-7 03:18:
楼上的兄弟 !i! 这个怎么用阿?
还有我想显示这个结果
0
1
2
3
4
该怎么做



第一种方法:

1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023