![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 14:55 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何删除小于某K的文件? |
| 可打印版本 1,119 / 14 |
| 第1楼 austion | 发表于 2008-11-24 09:04 |
| 初级用户 发帖 82 积分 178 | |
|
[已结]如何删除小于某K的文件? 首先说明目的,我打算把在盘符下所有小于一定大小的exe文件都删除掉,当然除了启动盘外。
同时也想请教一下我的下面代码哪里出错了。 下面是我的一个失败的,我现在也只是想到这些了。可惜运行不了。 说明tw.exe是一份227K的文件。当中以防误删所以建立了一个99的文件夹。 [ Last edited by HAT on 2008-11-25 at 23:18 ] |
|
| 第2楼 austion | 发表于 2008-11-24 10:13 |
| 初级用户 发帖 82 积分 178 | |
|
找到一个了,不过可惜如果把DIR/S/B/D改成dir/b/d就不能判断文件大小了,我想要的单单是在盘符下,盘符下的目录里的文件不检查。
clian76 中级用户 if exist d:\查找结果.txt del/q/f d:\查找结果.txt ::FOR里 F:\test\*.lst 换成想查找的文件类型和路径 For /f "delims=" %%i In ('dir/s/b/d F:\test\*.lst') do ( set fpath=%%i set size=%%~zi call :2 ) start notepad.exe d:\查找结果.txt exit :2 if 1000000 LEQ %size% if %size% LEQ 2000000 ( echo.>>d:\查找结果.txt echo 文件: [ %fpath% ]>>d:\查找结果.txt echo 大小: [ %size% 字节 ]>>d:\查找结果.txt find /i "这里换成你想查找的字符串" "%fpath%">>d:\查找结果.txt goto :eof) 这里你至少改两处地方, 1、For /f "delims=" %%i In ('dir/s/b/d F:\test\*.lst') do ( 上面这句红色标示的路径改成你想查找的路径和文件顾类型 2、find /i "这里换成你想查找的字符串" "%fpath%">>d:\查找结果.txt 这里红色标示改成你想查找的文字内容。 我测试通过 CMD@XP |
|
| 第3楼 tireless | 发表于 2008-11-24 10:17 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
你的代码我的理解是:
你想查找根目录下存在 99 这个文件夹,而不存在 boot.ini 文件的盘符。然后复制 tw.exe 到这个盘符的 99 文件夹中,如复制成功的话,把 99 文件夹中的 .exe 文件列表输出到 234.txt,但是,这时你又在 234.txt 中寻找 tw.exe,这我就不懂了,前面已经判断复制已成功,难道还会不存在 tw.exe?至于代码中出现的 test 变量,我感觉你的意思是执行过一次后就不再执行了,如果是这样的话可以在后面跳出 for 循环。 这里面好像没有查找文件大小的代码吧。 代码中的错误: set twexe=%%c 纠正:%twexe% 应该为 !twexe!,前面加上 setlocal EnableDelayedExpansion [ Last edited by tireless on 2008-11-24 at 10:32 ] |
|
| 第4楼 austion | 发表于 2008-11-24 10:30 |
| 初级用户 发帖 82 积分 178 | |
|
我当时的想法是使用dir 按小到大排序,这样到了TW.EXE这份文件的时候不就是一个间接的比较大小了。也就是说都删除了小于TW.EXE文件。
不过可惜还是运行不了。 还有为什么 dir/s/b/d set size=%%~zi 一旦把dir里的/s去掉%%~zi就不能用了? |
|
| 第5楼 austion | 发表于 2008-11-24 11:01 |
| 初级用户 发帖 82 积分 178 | |
|
现在在WIN下算是成功了。
代码如下: @echo off for %%i in (' dir/b D:\test\01\*.* ') do ( set fpath=%%i set size=%%~zi call :2 ) :2 if 10 LEQ %size% if %size% LEQ 100000 ( echo %fpath% 的大小是 %size% 字节 >> d:\789.txt del %fpath% goto :eof) 这个代码删除大于10字节小与100K的文件。 但是我现在有一个问题,由于上面的在 :2里的echo %fpath% 的大小是 %size% 字节 >> d:\789.txt 是作为测试用的,不过问题出现了在那份789.txt文件里的内容显示的是: ' 的大小是 字节 dir/b 的大小是 字节 D:\test\01\boot.ini 的大小是 247 字节 D:\test\01\boot00.ini 的大小是 215 字节 D:\test\01\delauto.bat 的大小是 380 字节 D:\test\01\delauto00.bat 的大小是 404 字节 D:\test\01\test.txt 的大小是 2758 字节 D:\test\01\try01.bat 的大小是 252 字节 ' 的大小是 字节 ' 的大小是 字节 上面的显示为什么会出现: ' 的大小是 字节 dir/b 的大小是 字节 和: ' 的大小是 字节 ' 的大小是 字节 呢?是我的代码那部分出错了? |
|
| 第6楼 tireless | 发表于 2008-11-24 11:44 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
删除 g:\99\ 下小于200KB的 .exe 后缀文件: |
|
| 第7楼 tireless | 发表于 2008-11-24 11:49 |
| 银牌会员 发帖 1,122 积分 2,025 | |
还有为什么 需要完整路径或在当前目录。如以下不会成功: C:\>for /f %a in ('dir /b g:\test\*.exe') do @echo %~a (size:%~za) 改成以下两种可行: ① 进入该目录: C:\>cd /d g:\test\ ② 使用完整路径: C:\>for %a in (g:\test\*.exe) do @echo %~a (size:%~za) [ Last edited by tireless on 2008-11-24 at 11:59 ] |
|
| 第8楼 austion | 发表于 2008-11-24 13:37 |
| 初级用户 发帖 82 积分 178 | |
|
其实这个本来是想在DOS下删除auto病毒的。
目的是在使用DOS启动进入GHOST前,也就是现在很多的那些什么什么GHOST的东西,在他们启动前调用一个批处理来删除auto*.inf文件以及其他在盘符下小于200K的.exe和.com文件。由于病毒一般都不大,而且还是直接在盘符下的可执行文件就有问题了。 for %%g in (c d e f g h) do if not exist %%g:\boot.ini ( for %%h in (' dir/b %%g:\*.exe %%g:\*.com ') do ( set fpath=%%h set size=%%~zi call :2 ) ) goto exit :2 if 10 LEQ %size% if %size% LEQ 200000 ( del %fpath% ) :exit 上面的代码在xp下是可用,但是在dos 却不可用,说命令错误。 [ Last edited by austion on 2008-11-24 at 16:13 ] |
|
| 第9楼 HAT | 发表于 2008-11-24 16:20 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 8楼 DOS没有这样的变量扩展:
set size=%%~zi |
|
| 第10楼 austion | 发表于 2008-11-24 23:11 |
| 初级用户 发帖 82 积分 178 | |
|
根据一楼自己做的接着做了个下面的:
set panf0=c if not exist c:\boot.ini call :than set panf0=d if not exist d:\boot.ini call :than set panf0=e if not exist e:\boot.ini call :than goto exit :than for /f "delims=" %%i in ( ' dir /a /b /os %panf0%:\*.exe %panf0%:\*.com ' ) do ( echo %%i > d:\234.txt type d:\234.txt |find /i "TW.EXE" >nul if errorlevel 1 (echo %%i >>%panf0%:\123.txt ) else ( echo %%i >> d:\2345.txt goto :eof ) ) goto :eof :exit 在XP下正常,但是一到了DOS就不行了,希望大家帮忙查错 如果把上面的 set panf0=c if not exist c:\boot.ini call :than 改为 set panf0=c if exist c:\boot.ini call :than 那么将会出现在C盘下的123.txt显示的却是在C:\WINDOWS目录下的EXE和COM文件。其他的TXT都是出错的。如果按照上面的代码的话,那么一个TXT都没有。 上面的代码哪些错了,如何的修改? [ Last edited by austion on 2008-11-24 at 23:12 ] |
|
| 第11楼 terse | 发表于 2008-11-24 23:56 |
| 银牌会员 发帖 946 积分 2,404 | |
|
dos 里 for 不支持 /f 参数
|
|
| 第12楼 austion | 发表于 2008-11-25 09:18 |
| 初级用户 发帖 82 积分 178 | |
|
这个
dos 里 for 不支持 /f 参数 使我技穷了,那么各位有什么办法可行的呢? |
|
| 第13楼 DOSforever | 发表于 2008-11-25 18:49 |
| 金牌会员 发帖 2,239 积分 4,639 | |
| 第14楼 austion | 发表于 2008-11-25 19:47 |
| 初级用户 发帖 82 积分 178 | |
Originally posted by DOSforever at 2008-11-25 18:49: 谢谢了,使用4DOS 行就可以了。 但是我有个显示的问题。 |
|
| 第15楼 alchemist | 发表于 2008-11-27 17:24 |
| 高级用户 发帖 193 积分 652 | |
|
用locate软件解决。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |