![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 04:47 |
共 47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]帮助分析以下删除指定文件的错误再哪? |
| 可打印版本 1,596 / 19 |
| 第1楼 tempuser | 发表于 2008-10-26 13:51 |
| 高级用户 发帖 261 积分 547 | |
|
[求助]帮助分析以下删除指定文件的错误再哪? 我想删除指定的磁盘中某个文件,以下是代码:
:delfile echo. echo. set /p delfile=请输入你要删除的磁盘文件 for %%a in (C: D: E: F: G: H: I: ) do ( for /f "delims=" %%b in ('dir /s /b /ah %%a\%filename%') do ( del /F /S /Q %%b ) ) goto finddel 但是我连系统文件都删除了,搞摊了系统,这是为什么啊!我只是输入了一个普通的文本文件,而以下的代码确没有就没有,为什么呢,请大家帮我查出我的问题在哪啊: @echo off set/p f=请输入这个文件的名称: set/p t=删除文件请按d: for %%a in (c d e ) do call :%t% %%a :d rem 我的理解是for把c d e作为参数传给了%%a ,而%%a又作为call的第一个参数 for /r %1:\ %%i in ("%f%") do del/f/q/a/s "%%i rem for先后遍历指定磁盘下的文件再把路径传给%%i,在del 可是我上面的代码也是这个思路啊!怎么就连系统的文件都给删了呢?我的问题出在那呢? |
|
| 第2楼 8657 | 发表于 2008-10-26 14:56 |
| 初级用户 发帖 17 积分 20 | |
|
\%filename%在哪??? 在加个 2^<nul
|
|
| 第3楼 tempuser | 发表于 2008-10-26 15:01 |
| 高级用户 发帖 261 积分 547 | |
|
现在不是不删,而是连系统文件都删,太可怕了!
|
|
| 第4楼 HAT | 发表于 2008-10-26 15:14 |
| 版主 发帖 5,017 积分 9,023 | |
|
定义变量的时候用delfile
删除文件的时候却用filename 故意的?还是笔误? |
|
| 第5楼 8657 | 发表于 2008-10-26 15:18 |
| 初级用户 发帖 17 积分 20 | |
|
难道没看明白我的意思么 你的 filename没被定义
|
|
| 第6楼 tempuser | 发表于 2008-10-26 15:40 |
| 高级用户 发帖 261 积分 547 | |
|
不好意思,被它弄晕了,把%filename%换成%delname%,也无法删除指定的文件.
另外,再问一个古灵精怪的问题,还是那段我找的代码: :delfile echo. echo. set/p f=请输入这个文件的名称: set/p t=删除文件请按d: for %%a in (c d e f) do call :%t% %%a :d rem 我的理解是for把c d e作为参数传给了%%a ,而%%a又作为call的第一个参数 for /r %1:\ %%i in ("%f%") do del/f/q/a/s "%%i rem for先后遍历指定磁盘下的文件再把路径传给%%i,在del 把以上代码单独写一个批处理文件,它是可以删除文件的,但如果把他作为一个标号:delfile,却不执行了,也不出现任何错误提示,你说怪不怪,我快被这个问题蛰么死了! 快帮帮我啊!头快要炸了! |
|
| 第7楼 HAT | 发表于 2008-10-26 16:35 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 6楼 那为何现在还不修改顶楼的内容呢?
想再弄晕几个近来帮你回答问题的? ^_^ |
|
| 第8楼 terse | 发表于 2008-10-26 17:03 |
| 银牌会员 发帖 946 积分 2,404 | |
|
"%%i
最后面的“那里去了 |
|
| 第9楼 tireless | 发表于 2008-10-26 22:06 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
第一段:
1: set /p delfile=请输入你要删除的磁盘文件 delfile 要改成 %filename% 吧。 2: for /f "delims=" %%b in ('dir /s /b /ah %%a\%filename%') do ( del /F /S /Q %%b ) ①你确定只删除隐藏文件吗?是的话改成这样: for /f "delims=" %%b in ('dir /s /b /a:-dh %%a\%filename%') do ( del /F /a:h "%%b" ) del 的参数 /S /Q 在这里是多余的: /S 是包括删除子文件夹中文件。例如 del /s d:\test.txt 将删除 d 盘下所有的 test.txt。 /Q 是通配符删除时不需要确认。例如 del d:\test*。 ②还是...你是想也删除隐藏文件?是的话改成这样: for /f "delims=" %%b in ('dir /s /b /a:-d %%a\%filename%') do ( del /F "%%b" 2>nul || del /F /a:h "%%b" ) 第二段: for /r %1:\ %%i in ("%f%") do del/f/q/a/s "%%i 首先,你可以在 cmd 窗口中测试一下这条命令: for /r c:\ %a in (reg.exe) do @echo %a 结果会是: c:\reg.exe c:\FOUND.000\reg.exe c:\FOUND.001\reg.exe c:\FOUND.002\reg.exe c:\FOUND.003\reg.exe c:\WINDOWS\reg.exe c:\WINDOWS\PCHealth\reg.exe ... ... 只列出存在的文件,需要用 if exist 来判断: for /r c:\ %a in (reg.exe) do @if exist "%a" echo %a 或者用通配符: for /r c:\ %a in (reg.exe?) do @echo %a 但是好像如果文件名含空格的话,用 for /r 行不通。 [ Last edited by tireless on 2008-10-27 at 00:41 ] |
|
| 第10楼 HAT | 发表于 2008-10-26 22:38 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 9楼 如果文件名含空格的话,这样行吗?
|
|
| 第11楼 tireless | 发表于 2008-10-26 23:32 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
Re 10 楼 可行。很慢就是,不过用 for /r 搜索含空格的文件只有这个方法了。
|
|
| 第12楼 tempuser | 发表于 2008-10-27 10:26 |
| 高级用户 发帖 261 积分 547 | |
|
还是忙然!
1.如果我想删除任指定文件而不管它是否隐藏,那代码应该是 @echo off set /p filename=请输要删出的文件名 for %%a in (c: d:) do ( for /f "delims=" %%b in ('dir /s /b /a:-d %%a\%filename%') do ( del /F "%%b" 2>nul || del /F /a:h "%%b" ) ) 但是我现在的执行它,不仅批处理本身被删,而切windows文件保护又来了,估计我又要恢复系统了,还好我有GHO! 2.请问 del /a:-dh中的d什么意? del /?中没有d? |
|
| 第13楼 tireless | 发表于 2008-10-27 11:30 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
Re 12楼 额..你先用 echo,看被删除的文件对不对。
@echo off set /p filename=请输要删出的文件名: for %%a in (c: d:) do ( for /f "delims=" %%b in ('dir /s /b /a:-d %%a\%filename% 2^>nul') do ( echo del /F "%%b" 2>nul echo del /F /a:h "%%b" 2>nul ) ) pause 我测试了下,没什么问题啊: 请输要删出的文件名:notepad.exe 2.dir /a:d 是列出目录,dir /a:-d 就是列出非目录,即文件。 DIR attributes]] [ Last edited by tireless on 2008-10-27 at 11:48 ] |
|
| 第14楼 tempuser | 发表于 2008-10-27 14:39 |
| 高级用户 发帖 261 积分 547 | |
|
谢谢,已解决,但不知为什么先前的出了问题,我也是拷贝的代码啊!
另外,还得请教个问题: echo del /F "%%b" 2>nul中的2>nul是前面的命令出了错误要屏蔽出错信息吧! 那for /f "delims=" %%b in ('dir /s /b /a:-d %%a\%filename% 2^>nul')中为什么用2^>nul而不是2>nul呢?它们的作用不一样吗?还是有什么特殊要求? |
|
| 第15楼 tireless | 发表于 2008-10-27 14:54 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
Re 14 楼 2^>nul 中的 ^ 是“转义字符”。
例如要显示 | 等特殊符号,执行 echo | 是显示不出来的,要用 echo ^| [ Last edited by tireless on 2008-10-27 at 14:55 ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |