|
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 来自 甘肃.临泽
状态 离线
|
|
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
状态 离线
|
|
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 |
|