For指令在cmd提示符下的高级应用2.docx
- 文档编号:18394726
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:8
- 大小:52.35KB
For指令在cmd提示符下的高级应用2.docx
《For指令在cmd提示符下的高级应用2.docx》由会员分享,可在线阅读,更多相关《For指令在cmd提示符下的高级应用2.docx(8页珍藏版)》请在冰点文库上搜索。
For指令在cmd提示符下的高级应用2
For指令在cmd提示符下的高级应用2
For指令在cmd提示符下的高级应用
廖德伟
江西萍乡高等专科学校计算机系,337055
摘要:
For指令当作迭代循环使用,在很多程序语言中都是常用的一条指令,但很少有人去把它直接应用到cmd提示符下。
其实For指令是一个高效实用的网络管理工具。
本文就For指令来展开它的实用技巧,以具体实例的方式来切实解决在日常应用中遇到的问题或技术瓶颈,借此来了解For指令的强大功能。
Abstract:
ItisverycommonthatusetheFORinstructionsasrecyclinginmanyprogramminglanguages.However,veryfewpeopleapplytheFORinstructionsunderCMDdirectly.Infact,wecouldusetheFORinstructionsasanimportanttooltosafeguardandmanagetheinternet.ThisarticleisfocusedonexpandingthepracticalskillsoftheFORinstructions,andgivesussomeeffectivewaystosolveourproblemsortechnical bottlenecks.Furthermore,thisarticlewillmakeusunderstandthepoweroftheFORinstructions.
关键词:
FOR;ACL;迭代;遍历;批处理;
中图法分类号:
TP39文献标识码:
A
目前网络管理员普遍使用网上下载的工具软件来进行管理和维护,忽略了For指令的重要功能。
其实For指令在UNIX环境下使用起来非常灵活,但是初学者一般对UNIX系统接触很少。
实际上,从WINDOWS2000开始将命令行增强后,已经借鉴了相当多的UNIX优点,WINDOWS2000下的For指令基本上可以和UNIX中的For指令相媲美了。
下面就来探索在win2K/winxp/win2003中For指令的强大功能。
应用之一、在win2K/winxp/win2003中建立500个用户P1,P2,P3,……P500(密码与用户名相同),并把这500个用户都加入到OURS这个自行建立的本地组中。
(1)在cmd提示符下输入:
FOR/L%AIN(1,1,500)DONETUSERP%AP%A/ADD<注:
这条语句显然就是建立从P1—P500的用户,密码与用户名相同。
其中/L:
参数代表迭代,%A:
是可替换参数,(1,1,500)表示从1开始,步长为1,一直到500。
(第一个P%A是用户名,第二个P%A则是密码)。
>
(2)在cmd提示符下输入:
NETLOCALGROUPOURS/ADD<注:
这条语句将建立一个名为OURS的本地组。
>
(3)在cmd提示符下输入:
FOR/L%AIN(1,1,500)DONETLOCALGROUPOURSP%A/ADD<注:
此语句将把从P1至P500的用户加入到组OURS中>
至此,任务完成。
当然如果以最原始的手工操作来完成此任务几乎是不可能,而且手工操作也很容易出错。
上面是逐条执行For指令来完成的,其实我们把它写成一个批处理文件our_users.bat(文件名可任取)将会使我们的工作更加有效,而写成批处理文件[1]our_users.bat则有一点不同的是迭代变量前多一个“%”;以下就是这个our_users.bat批处理文件的内容:
@echooff
for/L%%Ain(1,1,500)do@netuserP%%A/add
netlocalgroupOURS/add
for/L%%Ain(1,1,500)do@netlocalgroupOURSP%%A/add
应用之二、在上面那个实例的基础上再建500个目录,这些目录的名称同样为:
P1,P2,P3,……P500;并设定每个用户对自己的用户名目录访问控制权限ACL[2]为“完全控制”,而用户组OURS对每个用户目录只具有“只读”访问控制权限。
如:
用户P1对目录P1具有“完全控制”权限,而OURS对目录P1具有“只读”权限。
若用For来实现批量授权,则必须使用ACL访问控制授权指令Cacls[3]。
Cacls命令使用格式如下:
Caclsfilename[/T][/E][/C][/Guser:
perm][/Ruser[...]][/Puser:
perm[...]][/Duser[...]]
Filename——显示访问控制列表(以下简称ACL);
/T——更改当前目录及其所有子目录中指定文件的ACL;
/E——编辑ACL而不替换;
/C——在出现拒绝访问错误时继续;
/Guser:
perm——赋予指定用户访问权限。
Perm可以是R(读取)、W(写入)、C(更改,写入)、F(完全控制);
/Ruser——撤销指定用户的访问权限(仅在与/E一起使用);
/Puser:
perm——替换指定用户的访问权限;
/Duser——拒绝指定用户的访问。
下面就是实现这个任务的具体步骤:
(1)在cmd提示符下D:
>输入:
FOR/L%AIN(1,1,500)DOMDP%A<注:
这步是在D:
盘符下建立从P1至P500的目录。
>
(2)在cmd提示符下D:
>输入:
FOR/L%AIN(1,1,500)DOCACLSP%A/T/E/C/GP%A:
F<注:
此步是为每个用户对自己的用户目录授“完全控制”权限。
>
(3)在cmd提示符下D:
>输入:
FOR/L%AIN(1,1,500)DOCACLSP%A/T/E/C/GOURS:
R<注:
此步是为用户组OURS授“只读”权限。
>
若把‘应用之一’和‘应用之二’两个任务合作一起以一个批处理文件our_users.bat来实现,则此时这个our_users.bat批处理文件的内容应为:
@echooff
for/L%%Ain(1,1,500)do@netuserP%%A/add
netlocalgroupOURS/add
for/L%%Ain(1,1,500)do@netlocalgroupOURSP%%A/add
for/L%%Ain(1,1,500)do@mdP%%A
for/L%%Ain(1,1,500)docaclsP%%A/T/E/C/GP%%A:
F
for/L%%Ain(1,1,500)docaclsP%%A/T/E/C/GOURS:
R
应用之三、解决杀毒之后资源(文件和目录)被设成系统隐藏属性造成无法浏览的问题。
问题的引子:
我有一4G的U盘在多媒体教室用过之后(由于多媒体教室是公共教室,所以演示机感染了很多乱七八糟的病毒)就感染了一种叫“Email-Worm.Win32.Brontok.q”的病毒和一种叫“Trojan.Win32.Hider.i”的木马程序。
在家里用最新的卡巴斯基杀完之后;由于双击不能打开U盘,再用AUTO病毒专杀工具查杀,重启打开U盘发现只能看到三个临时目录:
Autorun.inf目录、eqjl目录、hgaksl目录;这三个目录都是执行AUTO专杀时临时生成的。
而我原来的那些数据目录(估计有100多个)都不见了,然后在“目录选项…”打开“查看”子菜单,去掉“隐藏受保护的操作系统文件(推荐)”前面的勾“√”后,发现我原来那些数据目录和文件都加上“只读”、“系统”、“隐藏”、“存档”属性。
如下图1:
图1目录(教学档案材料)的属性
虽然可以用attrib–a–r–s-h命令去掉这些烦恼的属性;但是这100多个目录、还有53个单独的文件,而且它们大多数都是中文名的,若要一个一个去手工改回来,几乎是不可能完成的任务。
关键时刻还是For指令显示了它的无比强大之处,下面就来研究For指令如何轻松的处理这个非常棘手的问题:
(1)由于所有资源都有“隐藏”属性,所以可在U盘根目录的cmd提示符下输入:
DIR/A/B>>MYLIST.TXT<注:
此命令可显示所有隐藏的文件和目录,并将显示的信息输出到文本文件MYLIST.TXT中>,得到MYLIST.TXT文件的截取部分内容如下表1:
表1U盘根下以“DIR/A/B”方式的资源列表
1GH_1001@.rar
access数据库密码破解工具
acdc31sr1.exe
acdsee4020664.exe
AdbeRdr708_zh_CN.exe
ATVLive_Setup_2K3.exe
auto病毒专杀工具
bsv3.2.2.215.CN.exe
BXP35
CUTEFTP
DopLiveClientInstaller.exe
全国计算机等级考试考点系统管理员通讯录.doc
全国计算机等级考试考试实施期间补充管理规定.doc
制作自己的全中文多功能USB启动盘(优盘)
制作自己的多功能USB启动系统克隆盘(移动硬盘)
卡巴斯基
完美卸载V2007简装版.exe
拨号软件.exe
木马清除专家2007.exe
网络电视软件
老桌面_东东
虚拟机软件
补丁
面向对象程序设计.ppt
……
……
……
由于篇幅原因,上面的列表只是节选一部分而而已。
这些数据很有规律,每一行都是一个文件名或目录名称。
现在我们有两种办法来解决这个问题了。
方法a:
在cmd提示符下输入:
FOR/F“TOKENS=1DELIMS=”%AIN(‘DIR/A/B’)DOATTRIB-a-r-s-h%A<注:
/F:
参数将某一命令执行结果作为循环范围,TOKENS=1表示命令‘DIR/A/B’显示信息的第1列,DELIMS=表示列之间以空格作为分隔符,%A是迭代替换变量,ATTRIB-a-r-s-h%A表示对每一个文件或目录作去除属性(其中a:
存档,r:
只读,s:
系统,h:
隐藏)的操作>
方法b:
在cmd提示符下输入:
FOR/F%AIN(MYLIST.TXT)DOATTRIB-a-r-s-h%A<注:
括号中的MYLIST.TXT表示将文本文件内容作为循环范围>
至此任务完成,方法a根本不需要导出MYLIST.TXT文本文件,它是最简洁的办法。
应用之四、你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for:
for /r . %a in (*.txt) do @find "bluebear" %a
find 前面的@只是让输出结果不包括find命令本身。
这是DOS很早就有的功能。
和FOR无关。
当用 . 作为循环范围时,for只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。
有点象TREE命令,不过侧重点不同。
TREE的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS[4]目录,有时在软件发行时我们想把这些CVS目录全部去掉:
for /r . %a in (.) do @if exist %a\CVS rd /s /q %a\CVS
先用 if exist 判断一下,是因为for只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。
用if exist判断一下比较安全。
这种删除命令威力太大,请小心使用。
最好是在真正执行以上的删除命令前,将 rd /s /q 换成 @echo先列出要删出的目录,确认无误后再换回rd /s /q:
for /r . %a in (.) do @if exist %a\CVS @echo %a\CVS
可能目录中会多出一层".",比如 c:
\proj\release\.\CVS ,但不会影响命令的执行效果。
其实For指令还有很多我们意想不到的功能,只要运用得当,几乎没有做不了的事。
下面附上For指令的参数说明:
/L:
表示以增量形式从开始到结束的一个数字序列 ;
/R:
参数遍历整个目录树;
/F:
参数将某一命令执行结果作为循环范围或将文本文件内容作为循环范围;
%~:
操作符将文件名分离成文件名、扩展名、盘符等独立部分;
另外,FOR 变量参照的替换已被增强。
您现在可以使用下列选项语法[5]:
~I-删除任何引号("),扩充%I;
%~fI-将%I扩充到一个完全合格的路径名;
%~dI-仅将%I扩充到一个驱动器号;
%~pI-仅将%I扩充到一个路径;
%~nI-仅将%I扩充到一个文件名;
%~xI-仅将%I扩充到一个文件扩展名;
%~sI-扩充的路径只含有短名;
%~aI-将%I扩充到文件的文件属性;
%~tI-将%I扩充到文件的日期/时间;
%~zI-将%I扩充到文件的大小;
%~$PATH:
I-查找列在路径环境变量的目录,并将%I扩充到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修饰符来得到多重结果:
%~dpI-仅将%I扩充到一个驱动器号和路径;
%~nxI-仅将%I扩充到一个文件名和扩展名;
%~fsI-仅将%I扩充到一个带有短名的完整路径名;
%~dp$PATH:
i-查找列在路径环境变量的目录,并将%I扩充到找到的第一个驱动器号和路径。
%~ftzaI-将%I扩充到类似输出线路的 DIR在以上例子中,%I 和 PATH 可用其他有效数值代替。
%~ 语法用一个有效的 FOR 变量名终止。
选取类似%I的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
结束语:
实际上,For指令的功能远不止这些,只要加以灵活运用,它还可以起到网上防火墙和杀毒以及捕捉网上动态非法IP的功效。
在日常的管理维护中经常会遇到一些任务的批操作,这时应考虑是否可以使用For指令来完成。
参考文献:
[1]bigfee.bat批处理命令文件类型语法格式应用
详解[OL].上海:
2005(2005-08-23).
[2]王倩宜,李润娥,李庭晏.统一用户管理和身份认证服务的设计与实现.实验技术与管理.2004
[3]郝刚.ASP.NET服务器控件开发技术与实例.北京,人民邮电出版社.2005年.50一98
[4]董国平,《基于WEB服务的校园一卡通系统数据传输中间件的设计和实现》2006.3
[5]PeterG.NeumannandDonnB.Parker,Asummaryofcomputermisusetechniques,inProceedingsofthe12thNationalComputerSecurityConfrence,PP.396~407.NaitonalInstituteofStandards,October2005.
Assurance,2005.http:
//ff.csee.umbc.edu/cadip/2002Symposium/Ont-for-JDS.pdf.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- For 指令 cmd 提示符 高级 应用