|
junyee
中级用户
积分 253
发帖 112
注册 2006-5-31
状态 离线
|
『楼 主』:
【仍有疑问】帮忙写一个整理U盘的批处理
想用一个bat文件处理以下操作:删除移动硬盘的MP3目录(盘符:\MP3)下mp3,wma以外的所有文件及文件夹。
在U盘的所有目录下删除mp3.wma.txt以外的所有文件并把其它目录的mp3.wma文件转移到MP3目录。请问该如何编写?
问题1:是在不同的电脑上U盘的盘符在变化,有时是E,有时会是F,有时会是G。。。
问题2:我知道del.rd能删除指定的文件(如*.mp3),却不会用它来删除指定文件以外的文件。(就是保留指定文件,其它的全部删除)
[ Last edited by junyee on 2006-6-1 at 20:45 ]
|
|
2006-5-31 12:52 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
2 楼』:
由于你没有指定运行环境,所以假设你使用的操作系统为目前的主流xp pro sp2。关于识别U盘的批处理,在本论坛似乎有过多次讨论,希望你在发贴前可以多搜索。
唔l,你的问题似乎也并非无法完成,关于问题1,请参考 [部分已结]有否类似 findcd 的 U盘盘符识别程序 findusb ?
至于问题2,在我们面前有多种方法可以实现
第一种方案:先用dir *.mp3 /a/b……命令把所有的需要保留的文件列出来,然后在删除文件的时候根据列表来判断是否应该删除。此方案过于繁琐切效率低下,故不予考虑使用。
第二种方案:先把U盘上所有文件的文件去掉隐藏,系统,只读属性;然后用attrib把所有的mp3文件设置问只读,隐藏,系统属性;接着用del和rd来进行删除,注意不要加处理特殊属性文件的参数;最后,再用attrib把你的mp3文件属性更改回来就OK了。当然,如果你是NTFS格式的话也可以考虑用cacls来取消当前用户对mp3文件的删除权限而不是更改属性。这种方法从效率以及代码量上来说,应该还算不错。
第三种方案:在XP系统中,WMIC所能完成的功能可能会超乎想象,例如,wmic datafile where "extension!='mp3' and drive='f:'" 这一句就可以列出所有E盘的非mp3文件,如果在后面加上delete或者call其他的方法,可以完成基本上所有的文件操作任务,比如复制,移动,删除,创建……等等等等。用此命令不仅删除所有非mp3文件方便,而且可以一句命令就把所有的mp3文件移动到同一目录。如果你的操作系统为XP pro的话,强烈建议用wmic来完成你的各个任务,可能只需要3,4行代码吧。
最后,给你点建议: 发贴前先看看 本版的版规 ,另外你可以看看本论坛网友Climbing的签名,里面有两个贴子值得一读。 希望你看到回复后能把本贴标题更改一下。
|
|
2006-5-31 20:18 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
3 楼』:
哈哈,我的签名在这里。
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2006-5-31 20:37 |
|
|
junyee
中级用户
积分 253
发帖 112
注册 2006-5-31
状态 离线
|
『第
4 楼』:
RE:3742668
我现在所有的机器是在WIN XP 5.1.2600
但是我所想得到脚本的目的是整理U盘(MP3)因为经常在网上下载东西,经常会不经意保存有一些不需要的或MP3不能识别的文件故希望能有高手帮我写一个能方便整MP3文件的批处理。我的MP3播放器可以识别的文件有mp3.wma.txt且能识别多级文件夹.但是我经常更换机器进行下载,因而使用环境也不尽相同。
看完您的精彩回复后,仍有许多疑问想请教!~我是新手,不要笑哦~~。
1:您的第一个方法。dir *.mp3 /a/b就用不上。我的U盘下有很多目录,而MP3文件都放在二级文件夹下。用您的方法只能识别根目录下的mp3文件,而大部分mp3都在U盘下的各个目录下。
2:就算我进入了盘下的某个目录,用dir *.mp3 /a/b列出所有的mp3文件,可是用rd /s删除全部我会,怎么在删除文件时排除*.mp3文件呢?我说了我是新手,别觉得我烦啊~~ -_-
3: 第二种方法不错。不过,您所说的cacls我不太会用,因为我查看了一下cacls/? 有一个参数不太方便得到user.因为经常在网吧使用,而user也不太一样。
4:第三种方法我就不会用了。窗口提示正在安装WMIC请稍候,分析MOF文件:
C:\WINDOS\System32\wbem\Cli.mof<阶段错误-3>
计算机返回错误 0x80070422
是系统版本太低吗?
综合您的多种方法,我觉得第1。2种最能懂,可是还是用不上。主要问题是我的文件都在不同的目录下,而不是在根目录下。例如我想用DIR列出U盘的所有目录下的所有mp3文件该怎么写?dir G:\*\*.mp3没用啊~~~哭。。为什么*可以表示文件名和扩展名却不能用来表示文件夹名啊??
~~~高手快来啊~~
[ Last edited by junyee on 2006-5-31 at 21:32 ]
|
|
2006-5-31 21:31 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
5 楼』:
Well,鱼不若渔,主要是给思路而并非给代码。
1.在我的原文中,不知是否注意到dir后面的……?关于dir命令的参数,我想这并不是本贴所讨论的主要内容,你不试试dir /?又怎么能知道dir /s能够遍历子目录呢?
2.如果要用rd删除文件的话,可以先把所有的mp3文件全部移动到你自己新建的一个目录中,然后再用dir列出所有的目录列表,注意,是目录列表,在列表中把需要保留的目录过滤掉后(可以用find,findstr等命令),再用rd命令根据列表进行操作。
3. echo %username%
4.当前用户是否有足够的权限?
最后,用dir列出g盘下所有mp3文件为何不这样:
dir /s /a /b *.mp3
列出当前目录所有目录也可以这样:
dir /ad
ps:Climbing的动作真快啊,正准备去找链结就自动送上门了,看来以后要是想说人坏话要注意点了,这年头,报应来得贼快。
[ Last edited by 3742668 on 2006-5-31 at 21:47 ]
|
|
2006-5-31 21:44 |
|
|
junyee
中级用户
积分 253
发帖 112
注册 2006-5-31
状态 离线
|
『第
6 楼』:
re:3742668
不好意思。回复的又让我多学了几招。可是我用起来的时候仍是没有头绪。
1:-_- dir /a/b......后面是六个句号吗?还是省略号?~~~好像都不是啊?
2:dir /s/a/b *.mp3能显示出当前盘下的所有MP3文件,但是如何调用这些显示出来文件呢?比如MOVE他们~~~烦请帮忙指示一下~
3:echo %usrename%是显示当前username.我的意思是我如果以不同的username登陆的话岂不是又要更改了?
真是麻烦您啦~~可是在网上找的DOS教程都不太详细,像好多命令都没有说明,有一些命令的解释还不如在DOS里用 /?...还有看到%%就是一头雾水~~哪位好心人能不能帮忙找个实用点的教程?
|
|
2006-5-31 22:37 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
7 楼』:
Well,其实最好的教程就是我的签名里面的那个东东再加上本版的老贴,如果把它们全部看完了你就算是个高手了。
1.与主题无关。
2.可以尝试先用dir /s/a/b *.mp3>list.txt,然后用for命令对list.txt进行操作。例如:for /f "tokens=*" %%i in (list.txt) do echo %%i && pause>nul 可以依次显示出每个文件。
3.%username%表示当前登陆的用户名,你用哪个用户名运行的脚本就会显示哪个用户名。
|
|
2006-5-31 22:55 |
|
|
junyee
中级用户
积分 253
发帖 112
注册 2006-5-31
状态 离线
|
『第
8 楼』:
唉。。~~看了这么久,只有您的第二种方案我掌握了,但是%%1似乎为%1才有用
对于第一种方案,尽管您说到该方案繁琐且效率低 -_- 我还是很感兴趣。能不能说下具体的脚本(如把G:\MP3下的*.mp3保留,其它全部删除,我现在只能用用MOVE把G:\MP3下的*.mp3转移到其它目录,再用rd把G:\MP3清空,再用MOVE命令把刚转移过去的*.mp3文件转移回来,这个方法太慢啦~~)?~~新手想进阶真是难啊~~。。。汗·#。。。
您所说的签名下的链接是哪个啊??没有啊?高手是这样炼成的:C:\WINDOWS\Help\ntcmds.chm
该不是去“DOS批處理 & 腳本技術(批處理室)”吧~都不太懂啊。。
|
|
2006-6-1 13:49 |
|