![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 11:38 |
共 48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 问个删除文件的批处理 |
| 可打印版本 2,838 / 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: 第一种方法: |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |