Board logo

标题: [其他] [已解决]批处理删除文件时怎么排除已知文件名的文件? [打印本页]

作者: huangu125    时间: 2009-7-25 11:45     标题: [已解决]批处理删除文件时怎么排除已知文件名的文件?

比如我现在要清空D盘文件,但有几个文件是不删除的,这些文件都是已经知道文件名的。
怎么用批处理删其他文件,而又排除不需要删的文件。

感谢KEEN的回复。你太棒了!!



[ 本帖最后由 huangu125 于 2009-7-25 17:01 编辑 ]
作者: keen    时间: 2009-7-25 14:03     标题: 回复 1楼 的帖子

假设要保留的文件名字为1.txt  和 2 3.txt.注:文件名中有空格一定要用双引号把文件名括起来.
  1. @echo off
  2. set str="%~nx0" "1.txt" "2 3.txt"
  3. for %%i in (%str%) do set %%~i=a
  4. for /r d:\ %%i in (*) do (
  5.     if not defined %%~nxi echo del "%%i"
  6. )
  7. pause
复制代码
%~nx0代表这个批处理本身.
请先试用这个批处理,要确定开始删除,请把del前面的echo去掉.
作者: huangu125    时间: 2009-7-25 16:11

原帖由 keen 于 2009-7-25 14:03 发表
假设要保留的文件名字为1.txt  和 2 3.txt.注:文件名中有空格一定要用双引号把文件名括起来.@echo off
set str="%~nx0" "1.txt" "2 3.txt"
for %%i in (%str%) do set %%~i=a
for /r d:\ %%i in (*) do (
    if ...


我试过了,可以用,非常感谢你!

还有一些小问题问你下。
for /r d:\ %%i in (*) do (   这句的 d:\ 是控制目录的吧,是不是把这个改为其他目录,比如:C:\WINDOWS\Web\Wallpaper  其他地方就不会删除了,
这个很重要,因为电脑还有一些其他重要文件,万一删了,就挂了。

还有就是被排除的文件,为什么不能排成像这样的,
"1.jpg"
"2.jpg"
"3.jpg"
........
要是这样写就是打开文件了,因为文件比较多,要用复制列表来写这个批处理如果每个一都要像:
"1.jpg" "2.jpg" "3.jpg" 这样一行来写就会有很大工作量。
作者: keen    时间: 2009-7-25 16:17     标题: 回复 3楼 的帖子

对,d:\是控制目录.如果怕删除错,可以先在 del前添加echo .

也可以排成
"1.jpg"
"2.jpg"
"3.jpg"
........
不过这种形式,最好写在一个文本中,然后由批处理读取.
作者: huangu125    时间: 2009-7-25 16:27

原帖由 keen 于 2009-7-25 16:17 发表
对,d:\是控制目录.如果怕删除错,可以先在 del前添加echo .

也可以排成
"1.jpg"
"2.jpg"
"3.jpg"
........
不过这种形式,最好写在一个文本中,然后由批处理读取.


我试了几次,换行的那种排列,不可以用,是打开被排除的文件了。
如果用批处理读取该怎么操作啊。那个文本格式应该怎么写?
谢谢你,我是新手,请原谅哈。


作者: keen    时间: 2009-7-25 16:38     标题: 回复 5楼 的帖子

在a.txt文本中是要保留的文件名字.一行一个,例如:
  1. 1.txt
  2. 2.txt
  3. 3 5.txt
复制代码
  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do set %%~i=a
  3. for /r d:\ %%i in (*) do (
  4.     if not defined %%~nxi echo del "%%i"
  5. )
  6. pause
复制代码

作者: huangu125    时间: 2009-7-25 17:00

原帖由 keen 于 2009-7-25 16:38 发表
在a.txt文本中是要保留的文件名字.一行一个,例如:1.txt
2.txt
3 5.txt@echo off
for /f "delims=" %%i in (a.txt) do set %%~i=a
for /r d:\ %%i in (*) do (
    if not defined %%~nxi echo del "%%i"
)
pa ...


终于搞定了,谢谢你!!!你真的太猛了!啥都能解决。

作者: slovent    时间: 2009-7-26 04:03

原帖由 keen 于 2009-7-25 16:38 发表
在a.txt文本中是要保留的文件名字.一行一个,例如:1.txt
2.txt
3 5.txt@echo off
for /f "delims=" %%i in (a.txt) do set %%~i=a
for /r d:\ %%i in (*) do (
    if not defined %%~nxi echo del "%%i"
)
pa ...


想借这个帖子向您提个问题可以吗?如何能让a.txt里增加通配符呢?如果我想排除目录中所有*.jpg的文件,企盼答复。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2