[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何从文本中读取不想删的文件名并不删它们?

想法
“del *.txz”命令会删除所有的 txz 文件,但有一两个 txz 是不想删的,于是乎把它们的名字存入“1.txt”,在“del *.txz”命令执行时读取“1.txt”,从而不删除这些想保留的文件。如何实现上述想法?
举例
手机内存卡根目录中有“EBOOK”这个文件夹,里面存放着文本文件 txt 和书签文件 txz。我做了个批处理,存放在内存卡根目录中,命令只有一句“del EBOOK\*.txz”,但我的《三国演义》和《基督山伯爵》的书签文件不想删掉,那么按照上面的想法,把“三国演义.txz”、“基督山伯爵.txz”这两个文件名写进“1.txt”中(一行一个),那么如何让批处理读取“1.txt”从而不删除这两个书签并删除其他的所有书签?

^ ^ 这样以后有什么没看完的书、不想把它的书签删除的话,只需要更改一下“1.txt”就行了~
这对高手们应该是小菜一碟了,盼望着您的吹灰之力解我燃眉之需!~

[ 本帖最后由 SkyPE 于 2010-5-31 16:26 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

批处理在“EBOOK”这个文件夹,排除列表直接写在批处理里
  1. @echo off
  2. set "三国演义.txz=="
  3. set "基督山伯爵.txz=="
  4. for %%a in (*.txz) do if not defined %%a del "%%a"
复制代码
或:
  1. @echo off
  2. for /f "delims=" %%a in ('more +4^<"%~fs0"') do set "%%a=="
  3. for %%a in (*.txz) do if not defined %%a del "%%a"
  4. exit
  5. 三国演义.txz
  6. 基督山伯爵.txz
复制代码
如果读取1.txt,则:
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do set "%%a=="
  3. for %%a in (*.txz) do if not defined %%a del "%%a"
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-31 16:19 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 SkyPE 于 2010-5-31 20:53 发表
@echo off
for /f "delims=" %%a in (1.txt) do set "%%a=="
for %%a in (*.txz) do if not defined %%a del "%%a"
pause
上面的第二、三两行您能用普通的语言解释下是什么意思吗?谢谢!

1,有问题请发论坛
2,for /f "delims=" %%a in (1.txt) do set "%%a=="解析文本1.txt的内容,不以任何字符分隔文本,并将每行内容都定义为变量。
for %%a in (*.txz) do if not defined %%a del "%%a"在当前目录下查询所有扩展名为.txz的文件,如果该文件名没有被定义,则执行del命令,也就是如果该文件名被定义为变量,则不执行del。定义的过程由上一个for完成
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

明白了很多,再次谢谢!
我是菜鸟,正在学坛子里德“FOR由入门到精通”,正好能帮助理解,
第三句的“if not defined %%a”,到这儿还能明白,但后面的“del %%a”就不太懂,那样不就把前面定义的给删了吗?

[ 本帖最后由 SkyPE 于 2010-5-31 21:18 编辑 ]
山东大汉,呵呵。

TOP

回复 4楼 的帖子

del删掉是存放在硬盘上的文件。
前面定义的变量是放在内存里面的,不会被del删掉。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

“for /f "delims=" %%a in (1.txt) do set "%%a=="”把1.txt中每行的内容都定义了(且都定义成了“=”),但“for %%a in (*.txz) do……”又把相同的变量a重新定义成了“以txz为扩展名的所有文件名”,这样这两次定义不矛盾吗?(很明显不矛盾,要不这程序就没法用了!呵呵,可是我不懂为何不矛盾)而且其后又紧接有“if not defined %%a del "%%a"”,这句话我也感觉匪夷所思,假如上步中未被定义的,这步也已经得到了定义啊!(均被定义成了“以txz为扩展名的所有文件名”),那么“del”动作又怎么正确地完成了删除动作呢?
我脑子有点死,实在搞不懂这两句了……
>.<


如果一个批处理很长,前面曾定义过一个变量x,但后来的时候忘了,又把x定义了一遍,并且定义成了别的值,那么再往后的命令调用x的时候,是调用的它先前的量、还是后来的量呢?

[ 本帖最后由 SkyPE 于 2010-6-5 15:37 编辑 ]
山东大汉,呵呵。

TOP

回复 6楼 的帖子

后面定义的变量会覆盖前面定义的同名变量。

给自定义变量一个有意义的名字是很重要的,不要用什么a、b、c、x、y、z之类的。过一段时间连自己都不知道它是啥意思了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

1,楼主混淆了%a%和%%a。
2,定义变量是由set完成的,即当%%a为“三国演义.txz”时,定义了一个变量,名是“三国演义.txz”,值是“=”,和a没有关系。
3,%%a只在扩展此参数的for的内部使用。
4,当楼主有一天真的已经开始常写很长的批处理时,设置变量已经就不在是问题。有的人喜欢按字母顺序去设置变量名,有的人喜欢分组设置变量名,有的人喜欢使用英文单词,也有的人会喜欢用拼音。当自己的规律形成时,就不会有问题了。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表