查看: 930|回复: 1
收起左侧

批处理简明教程(二)

[复制链接]
发表于 2007-11-3 11:27:19 | 显示全部楼层 |阅读模式 <
管道命令:
1|
它的作用,就是把前一命令执行的结果传到后一命令去处理。
如:help | more
回车后会发现显示满一屏幕后就自动暂停,等候继续显示其他信息。当按写回车时,变成一个一个的出现;按下空格键时一屏幕一屏幕显示,直到全部显示完为止;按其他键自动停止返回DOS
这里结合了管道命令|DOS命令more来共同达到目的的。
2>>>
这两个命令的效果从本质上来说都是一样的,他们都是输出重定向命令,说的通俗一点,就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是,>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。
3<
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
例:sort < list.txt > alphlist.txt
sort 命令按字母顺序排列文本文件或命令的输出。在此范例中,sort 命令对 List.txt 文件的行进行排序并显示结果,但不更改文件。并将结果存到 Alphlist.txt 文件中。

组合命令:
顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了,那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。
1&
这可以说是最简单的一个组合命令了,它的作用是用来连接nDOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败。如:copy a.txt b.txt /y & del a.txt

2&&
这个命令可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。(当然这个和IF命令差不多,可以自己选择喜欢的方式)
小提示:有些命令是不能同时执行的
如:出道题:把C盘和D盘的文件和文件夹列出到a.txt文件中。
有人说,同时执行两个dir,然后把得到的结果>a.txt里就ok了嘛:
dir c:\ && dir d:\ > a.txt
错了!这样执行后a.txt里只有D盘的信息!为什么?就因为这里&&命令和>命令不能同时出现一个句子里(批处理把一行看成一个句子)!!组合命令&&的优先级没有管道命令>的优先级高!所以这句在执行时将本分成这两部分:dir c:\dir d:\ > a.txt,而并不是如你想的这两部分:dir c:\ && dir d:\> a.txt。要使用组合命令&&达到题目的要求,必须得这么写:
dir c:\ > a.txt && dir d:\ >> a.txt
当然这里还可以利用&命令:dir c:\ > a.txt & dir d:\ >> a.txt


3||
这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。
题目:查看当前目录下是否有以s开头的exe文件,如果有则退出。例:
@echo off
dir s*.exe || exit
其实这个例子是有破绽的,如果存在那个exe文件,就退出;如果不存在那个exe文件,也退出!为什么?因为如果不存在那个.exe文件,则前一条命令dir s*.exe执行肯定是不成功的,所以就继续执行exit,自然就退出了。那么如何解决题目给出的问题呢?看下例:
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
这样执行的结果,就能达到题目的要求,是否存在s*.exe将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。


几个符号:
1、符号(" ")
  " "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法.:

c:\>cd "Program Files"

c:\>cd progra~1

c:\>cd pro*
  以上方法都可以进入Program Files目录
2、符号(,
  ,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例:

c:\>dir,c:\
3、符号(;)
  ;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例:DIR C:\;D:\;E:\F:\
以上的命令相当于

DIR C:\

DIR D:\

DIR E:\

DIR F:\
4、符号“::”
这个符号的作用很简单,它是注释命令,在批处理脚本中和rem命令等效。它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性。与rem 不同的是, ::后的字符行在执行时不会回显,无论是否用echo on打开命令行回显状态。
5、符合“^”
^是对特殊符号"<",">","&"的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
比如echo test ^>1.txt
结果则是他没有追加在1.txt里,只是显示了出来

一、
利用批处理修改注册表
1、添加值
REG
ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

KeyName [\\Machine\]FullKey
远程机器的机器名 - 忽略默认到当前机器。
远程机器上只有 HKLM HKU
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名
/v 所选项之下要添加的值名
/ve 为注册表项添加空白值名<无名称>
/t REG Key 数据类型
[REG _SZ | REG _MULTI_SZ | REG _DWORD_BIG_ENDIAN |
REG _DWORD | REG _BINARY | REG _DWORD_LITTLE_ENDIAN |
REG _NONE | REG _EXPAND_SZ ]
(reg_dword 四字节数值数据,十六进制值 reg_binary二进制值 reg_sz字符串 reg_multi_sz多字符串 reg_expanda_sz带变量的字符串)
如果忽略,则采用REG _SZ
/s 指定一个在REG _MULTI_SZ 数据字符串中
用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符
/d 要分配给添加的注册表 ValueName 的数据
/f 不用提示就强行改写现有注册表项
例如:
REG
ADD \\ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo
REG
ADD HKLM\Software\MyCo /v Data /t REG _BINARY /d fe340ead
添加一个值(名称: Data,类型: REG _BINARY,数据: fe340ead)
REG
ADD HKLM\Software\MyCo /v MRU /t REG _MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG _MUTLI_SZ,数据: fax\0mail\0\0)
REG
ADD HKLM\Software\MyCo /v Path /t REG _EXPAND_SZ /d %%systemroot%%
添加一个值(名称: Path,类型: REG _EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用双百分比符号( %% )

2、删除值
REG DELETE
/v ValueName
删除子项下的特定项。如果未指定项,则将删除子项下的所有项和子项。
/ve
指定只可以删除为空值的项。
/va
删除指定子项下的所有项。使用本参数不能删除指定子项下的子项。
/f
无需请求确认而删除现有的注册表子项或项。
例:要删除注册表项 Timeout 以及其所有子项和值,请键入:
REG DELETE HKLM\Software\MyCo\MyApp\Timeout
要删除计算机 ZODIAC HKLM\Software\MyCo 下的注册表值 MTU,请键入:
REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU
二、
隐藏批处理窗口
众所周知,批处理在执行的时候无论是否在开头加了@echo off或每条语句前加@,都会出现个一闪而过的窗口.那么如何才能去掉这个窗口,让批处理隐藏运行呢?
只要是批处理,都会先调用CMD来执行.即使在批处理里加上隐藏窗口的命令,由于是先调用CMD后执行命令,所以还是会出现一个闪过的窗口.那么我们就先用命令来隐藏窗口,再执行批处理,这样就不会出现那窗口了!
我们可以先在记事本上输入如下内容:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c ql.bat",vbhide
或者CreateObject("WScript.Shell").Run "cmd /c ql.bat",0
(注:ql.bat 为你要执行的批处理的名字。ql.bat里最后处最好添加 @ del ql.bat@del yc.vbs这两行内容)
保存为yc.vbs文件。

然后用RAR文件把yc.vbs文件和ql.bat文件压缩,在常规项里把“创建自解压压缩文件”和“锁定压缩文件”两项前打勾,然后“高级”——“自解压选项”——“常规”——“解压后运行”输入yc.vbs——再选择“模式”——“安静模式”(全部隐藏)——“覆盖方式”(覆盖所有文件)——然后确定,生成EXE可执行文件即可。那么,再运行这个EXE文件,你将把CMD的窗口隐藏了。
发表于 2007-11-5 00:13:40 | 显示全部楼层 <

回复 1楼 的帖子

知道!
老师就是老师!

QQ|Archiver|手机版|小黑屋|删帖指引|阳新新阳网 ( 鄂ICP备19013424号-2|42022202000111 )

GMT+8, 2024-10-21 02:55 , Processed in 0.366390 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.