|
tempuser
高级用户
积分 547
发帖 261
注册 2006-4-15
状态 离线
|
『楼 主』:
自断断续续学习的笔记
2007-12-03
有WINDOWS为何还学DOS?
因为DOS在某些方面效率更高;学习Linux 交换机/路由器DOS更方便;远程控制。
一、入门与概述
1.文件与目录
文件名:文件基本名+后缀
文件基本名:1-8个字符,对于文件名必须存在;后缀0-3个字符,可有可无。
目录:在Windows中称作“文件夹”。
用DIR显示时,后面跟有[dir]标志,表明它们是目录。
2.exe:可执行文件
com:命令文件
bat:批处理文件
它们都被称作“可执行文件”。
Bat后缀的文件优先级高于以exe和com为后缀的文件
3.DOS内部命令和外部命令
内部命令是由command.com随系统启动直接加载到内存中去的,可直接使用。
换句话说,内部命令存在于command.com文件中。
外部命令是一个个独立的文件,存在于磁盘中,需要时可调入内存执行。
4..和..与\
. :当前目录
.. :当前目录的上一级目录,也称“父目录”
\ :根目录。
5.Dir命令
当前目录存在.和..时,用dir命令显示当前目录信息时,它们被认为是一个文件,只是大小为零。
6、DOS启动顺序
启动——》IO.SYS——》MSDOS.SYS——》CONFIG.SYS——》COMMAND.COM——》Autoexec.bat
其中,IO.SYS、MSDOS.SYS、COMMAND.COM对于DOS系统的启动必不可少。
io.sys : 输入输出处理程序
Msdos.sys :文件处理程序
Command.com :命令处理程序
新解:
对于DOS,硬盘启动时首先有INT19中断来读取“硬盘MBR”,读到后将MBR读到内存0000:007c,接着INT19也跳到内存中0000:007c,此时的控制权还是INT19,接着在MBR中“有一个程序”会寻找“可引导的分区”,找到后将引导分区读到0000:007c,这时MBR程序就会跳到0000:007c这个地址上,系统开始启动了。
主引导扇区是:0柱0磁头1扇区
之后就是FAT(文件分配表)了
补充(2007-12-10)
。DOS :disk operating system,单用户单任务OS。
冷启动 :开机时,打开显示器电源-》主机电源,关机时顺序相反
热启动 :系统启动时,按CTRL+ALT+DEL组合键再次启动系统
二者区别 :是否跳过内存检测等一些硬件检测过程,其它运行过程相同
。DOS常用保留名
CON :键盘\显示器
NUL :空设备或虚拟设备
AUX/COM1 :第一串行通信接口
COM2\COM3\COM4 :第2、3、4串行口
LPT1\PRN :第一并行接口
。批处理文件可以理解成“一个DOS命令”
。为何不要将批处理文件命名为DOS的“内部命令或外部命令”?
答:如果与内部命令同名,则DOS内部命令优先级高于批处理,批处理文件不能执行;
如果与外部命令同名,则取决于“先找到外部命令还是先找到批处理文件”,谁先被找到
就先执行,因此,建议命名批处理时要避免与DOS的内、外部命令同名。
。DOS下创建批处理文件的方式?
a copy con 要创建的批处理文件
b edit 要创建的批处理文件
。也可以用
Pause 要显示的信息 有类似与 echo 要显示的信息
。如何让“批处理文件”鸣镝?(依靠计算机内置扬声器)
在DOS下用edit 鸣镝.bat,之后进入编辑页面,先输入
Pause在输入一个空格,之后在按住CTRL键,按“P”键,松开CTRL键,再按住CTRL键,在按“G”,即可生成一个“鸣镝控制符”。
也可以按住CTRL键不松手,先后按“P”和“G”键。
其实,用echo也能达到同样效果,只是在文本中输入控制符麻烦,可在DOS下编辑批处理文件,输入控制符并保存后在返回到Windows下编辑,不失为一个好办法。
。
二、DOS命令简介
1.Dir
显示当前目录信息,但不包括系统和隐藏文件
dir /p :分屏显示信息(p是page的缩写,即分页显示屏幕)
dir/w :用宽列表显示信息,没有文件大小和创建日期
dir/d :类似于dir/w显示方式
dir/b :只显示文件名,目录名也按照文件名方式显示,不显示目录名的[ ]标志(一种精简显示)
dir /l :以小写字母显示文件和目录
dir /a: :显示指定属性的文件,例:dir /a:r显示当前目录下的所有具有只读属性的文件
例:dir /a:d表示只显示目录信息
例:查找指定日期的文件 dir|find “2007-12-04”,注意日期的书写格式和本机日期显示匹配
例:在多级目录下查找文件,使用参数/s,如 dir temp /s,如果当前目录下有temp目录,temp下还有temp目录,则执行结果是列出最后一层temp目录下的所有文件
REM
dir/?看帮助,发现a后的:是可选的,但如果不用:,则会显示“当前的驱动器的卷没有标签,找不到文件”信息。
不用:,怎么又好使了?自己疏忽吧!
Dir /a:-r :显示当前目录下所有具有非只读属性的文件
- :表示“否的前缀”。
REM
Dir /o: 按照分类方式显示信息,如文件大小、字母顺序等,例:dir /o:s表示按照文件大小显示信息;dir /o:n按照字母顺序显示信息
Dir /n :以“长文件列表方式显示,文件名在最右侧”
Dir /c :类似于dir/n
Dir/x :显示非8dot3命名规则的文件
例:dir >test.txt 表示将dir命令结果导入到一个文本文件里
2.Cd
Change directory改变目录
注意:如果在C盘使用如下命令
c:\>cd e:\test
结果仍在c:\>在,只不过在转到d盘,d盘的当前目录是d:\>test>,我在用at定期删除某目录下的文件就出了以上问题。
例:
@echo off
c:
rem 当时我望了转到c:,结果删除了批处理文件所在的磁盘很多文件,包括批处理文件本身
rem 使得at任务无法执行
cd "C:\Documents and Settings\All Users\Application Data\Symantec\Symantec AntiVirus Corporate Edition\7.5\Logs"
echo y | del *.*
Cd .. 表示回到上一级目录
Cd\ 表示回到根目录
Cd /d 参数/d表示即改变当前目录,也改变当前驱动器
3.Copy
功能是复制与移动,但不能复制目录中的子目录
例:合并两个文本文件1.txt和2.txt为3 .txt
Copy /a 1.txt+2.txt 3.txt
REM 按照ASCII码合并这两个文件
Copy /b 1.txt+2.txt 3.txt
REM 按照二进制合并这两个文件
参数/a和/b不能一起使用,其中/a只能合并纯文本文件,而/b即能以文本方式合并,又能以二进制方式合并
例:加密文件
copy /b test.jpg+1.txt 2.jpg
REM test.jpg和1.txt变成一个文件2.jpg,这样文本信息得到了加密,需要查看该信息,可使用ultraedit软件查看
REM 记住,要加密的文档一定要放到+号右侧
4.Xcopy
可以将目录中的非空子目录复制到其它地方,但要使用参数/s
/e必须与参数/s同用,表示不仅可以拷贝子目录,空目录也可以拷贝
/v拷贝后许进行校验
5.Del
Delete
Del *.* 非常危险的命令
例:del /f 强制删除只读文件 Del/a 删除指定属性文件
6.ren
Rename
7.type
一次只能显示一个文件的内容
8.Format与unformat
格式华后的磁盘可利用空间等于磁盘总空间,说明磁盘性能不错
Format /u 表示无条件格式化,此时unformat无效
例:Echo y|formant a:
Unformat 盘符 表示恢复已格式化的磁盘
unformat /l 表示列出可恢复的文件列表
9.Md与Rd
新建目录
例:同时建立多个目录
md c:\1 d:\2 e:\3 等价于md c:\1;d:\2
删除目录,所删除的目录里不能有子目录和文件,如果想这样执行,可使用
Rd /s
例:建立一个加密目录及如何查看和删除它
md test..\
这样就建立了一个“加密”的文件夹,双击无法打开它
可通过“开始”菜单中的“运行”或“资源管理器中的地址栏”输入它的“完整路径”查看
通过 rd /s /q删除它
思考:如果建立的“加密”文件夹和属性隐藏的方法包括注册表隐藏结合起来,就可以建立一个相对私秘的空间。
注册表大概位置:MACHINE\SOFTWARE\WINDOWNS\CURRENTVERSION\EXPLORER\ACVANCED\FOLEDR\SHWOALL\CHECKEDVALUE的值
10.Deltree
删除目录树,非空目录照删不误
Deltree *.*非常危险的命令
11.Mem
Memory
12.Chkdsk
Checkdisk
13.Sys
C:\>sys a:等同于format a:/s,都是制作系统启动盘
如果copy一张DOS启动盘,io.sys和msdos.sys这两个文件不一定能拷贝到磁盘最前面的磁道上
14.Cls
清屏
15.More
分屏显示
16.Move
例:@echo off
Cd c:\test
Move c:*.* a:
REM
注意第3行“c:与*.*”之间没有“\”,这表示将当前目录即test目录下的所有文件拷贝 到A盘。
17.Help
人如其名
18.Attrib
Attribute
例:将c:\test目录下的所有文件和子目录(包括目录本身)都设置为“只读”属性
Attrib +r c:\test /s /d
/s :表示对子目录进行操作
/d :表示对目录进行操作,可简单理解为directory
例:将c:\test目录下的所有文件和子目录(不包括目录本身)都设置为“只读”属性
Attrib +r c:\test\*.* /s /d
19.Time与date
Date /t :不需输入新时间
Echo+|date|find “当前日期”
Echo+|time|find “当前时间”
例:可编写一批处理文件记录机器时间使用的状况
echo+|date/t>test.txt
Echo+|time/t>>test.txt
20.Lable
21.Defrag
整理磁盘碎片
22.Doskey
建立和调用DOS宏命令
例:doskey d=deltree,以后执行d就相当于执行deltree命令
例:如果在CMD下输入了很多的命令,需要再次使用这些命令而又不想重复输入时,可使用doskey,具体操作(在CMD):doskey /h(h是history)是查看曾经在CMD下已经使用的命令,可通过F9键调出它们的缓存表再次使用,也可以使用上下箭头或PaUp和PaDn键来操作,如果想清除他们,可使用doskey /reinstall。
23.Fdisk
Fdisk /mbr :重新建立DOS主引导记录
24.Memmaker
内存优化命令
25.Emm386
扩展内存管理
26.Lh 或loadhigh
将程序载入高端内存
27.Msd
系统检测
不能直接使用
28.Undelete
该命令使用前,需要使用lock命令,解除对硬盘目录区不让修改的限制
Undelete /all :恢复所有del的文件,不用询问
Undelete /list :列出可恢复的文件列表
29.Path
例:path c:\test
如果在当前目录下执行某命令,不存在,则在path设置的路径下继续寻找该命令,有则执行
30.Prompt
设置提示符,就是我们常见的c:\>,c:表示当前盘符是C盘,\表示根目录,>表示将提示符与待输入的命令分开
可以根据需要将c:\>改变
31.Backup与restore
备份与恢复
Restort /s :包括子目录恢复到指定的目录中
32.Edit
只能编辑文本文件,编辑的文件存在则编辑,不存在则临时建立该文本文件并进入编辑状态,如果保存就会在磁盘上建立该文件
33.Set
设置变量,在CMD下直接输入set命令,会列出绝大部分的系统变量
例:set path=c:\test 等同于path c:\test
例:手动输入变量值
set /p a= 请输入你的选择
REM 在纯DOS环境下,/p参数不存在,该语句自然不好使!
REM 可通过setx命令自行定义类似系统变量的变量(重新启动机器后仍然存在的那种变量),但XP系统中没有该命令,2003中有。格式:setx 变量 赋值
Set /a var=
REM 对变量进行算术运算
例:set /a var+=1
Set %path:str1=str2%
REM 用str2替换str1
例:@echo off
set var= zgk.com
Echo 显示var原值
echo %var%
pause
set a=%var: =%
Rem 原变量中的空格被替换掉
echo 显示替换后的var值
echo %a%
set b=%var:.=%
echo %b%
rem 原变量中的点“.”被替换掉
pause
set %path:~10,5%
REM 截取指定变量的列数
例:@echo off
Set var=zgk.com
Echo %var%
Set b=%var:~2,3%
Rem 截取指定变量var的前2列,也就是说要从第3列开始读取3个字符赋给新的变量b,rem 那么b=k.o
Echo %b%
Pause
Set %path:~-10%
例:@echo off
set var=zgk.com
Echo %var%
Set b=%var:~-3%
Rem 从后往前取指定变量var的3列赋给新的变量b,那么b=com
Echo %b%
Set c=%var:~3%
Rem 从头开始截取指定变量var的前3列,就是说将var的第4列后的所有变量赋给c,rem 那么c=.com
Echo %c%
pause
Set %path:~0,-2%
例:@echo off
set var=zgk.com
Echo %var%
Set b=%var:~-3%
Rem 从后往前取指定变量var的3列赋给新的变量b,那么b=com
Echo %b%
Set c=%var:~0,-2%
Rem 从后去掉var的2列,之后从将var赋给c,那么c=zgk.c
Echo %c%
pause
34.Smartdrv
设置磁盘高速缓存
35.Append
设置非可执行文件路径
例:当前目录里没有test.txt,c:\下有
append c:\ 类似于path命令
36.Debug
Debug 文件名
37.Diskcomp
比较两张软盘内容
38.Expand
解压命令
Expand 原压缩文件路径 目的地
39.Fc
比较两个文件内容
例:fc /c test1.txt test2.txt
Rem /c 不分大小写比较
40.Fasthelp
快速帮助
XP系统下没有
Fashhelp command 等价于 command/?
41.Qbasic
启动basic集成环境
42.Setver
设置版本,还能查看到winword和excel的版本
在config.sys中常用语法:device=setver.exe
REM
没在config.sys中加入device=setver时,还能看到winword和excel的版本,加上了它怎么就什么也看不到呢?也没有错误提示信息
REM
43.Share
44.Subst
用指定的路径替代某个盘符
例:subst a: c:\test 表示用C盘下的test目录替代A盘
Subst a: /d 表示删除替代
45.Tree
显示当前目录或指定目录下的所有子目录结构,但并不显示文件名
/f (file) :显示目录的同时还显示目录下的文件名
Tree /a :以ascii码显示目录树
例:查找c:\test目录下的test.txt的个数
tree /f c:\test | find /c /I “test.txt”
如果文件太多超出缓冲区大小,可使用:tree /f |more
46.Vsafe
病毒防护程序,没试过!!!!!!!
47.Ver
查看DOS版本号
48.Vol
查看磁盘的卷标号
49.Ctty
改变控制的输入输出设备
例:ctty aux 表示设置aux为输入输出设备
50.Recover
覆盖磁盘
51.Replace
例:replace c:\test1.txt d:\test2.txt /r
即使test2.txt具有只读属性,也将被替换
例:replace d:\a.txt d:\backup /s /p /u
/s :用D:\a.txt替换D:\backup及其子目录下所有的同名文件
/p :替换前要进行确认
/u :(update),在替换前检查源文件与被替换的目标文件的修改时间,如果前者更新,则不进行替换
例:@echo off
cd %1
for %%i in (*.%3) do if not exist "%2%%i" copy %%i "%2" /y
replace *.%3 "%2" /u
执行filesyn.bat d:\ e:\ txt
52.at
定制计划任务(该命令定制的计划任务是后台运行的,而在Windows下“任务计划”定制的任务是前台运行),二者的主要区别还有at命令只能查看有at命令本身定制的计划任务,而控制面板中的“任务计划”可以查看它和at命令定制的任务;二者都依靠task scheduler服务,如果该服务停止,通过运行“任务计划”中的任务可以开启该服务,而at命令定制的服务则不行。
例:设置at制定的任务为前台运行
at 16:30 /interactive c:\test.bat
/interactive 可使任务变为前台运行
例:指定时间运行某程序
At 16:00 c:\test.bat
::在16:00运行test.bat
例:没有15执行某任务
At 16:30 /every:15 c:\test.bat
::每月的15日16:30运行
At 16:30 /next:15 c:\test.bat
:: 下个月的15日16:30运行
At 16:30 /every:四 c:\test.bat
::每周四的16:30运行
例:删除某任务
At 2 /delete /yes
::删除任务ID为2的计划任务,/yes表示删除任务不需要确认
例:删除所有任务
At /delete
::不输入任何ID,表示清除所有计划任务
53.shutdows
Shutdown /s /t time /f
/s 指定关机操作
/t 多长时间后关机,如/t 6,6秒钟后关机
/f 强制关机,不管还有什么程序在进行
例:在指定的计算机上运行某程序
At \\computername 16:30 c:\test.bat
54.find
标准格式 find “要查找的字符串” 待查找的文本文件
例:在test.txt中查找nihao字符串
find “nihao” test.txt
Find /c “nihao” test.txt
::/c(count) 统计nihao在test.txt出现的次数
Find /n “nihao” test.txt
::/n(number) 统计所有nihao所在的行数
Find /i “nihao” test.txt
::/i(ignore)忽略大小写
Find /v “nihao” test.txt
::/v 查找不包含nihao字符串的内容
55.Shift
增加批处理中参数的数量
56.Systeminfo
如果需要批处理显示有关系统信息,该命令很有用。
57.Ntsd
强制关闭进程命令,例:ntsd –c q –pn notepad.exe
58.建立隐藏用户
之前掌握注册表的用法:
1利用net新建用户;2导出注册表SAM下的name项;3删除新建用户;4导入已导出的注册表
新方法:net user zgktest$ /add,此时,用net user是无法查看到新建用户的;为新建用户添加注释:net user zgktest$ /comment:”注释内容”
59.Sfc
扫描受保护的系统文件的完整性
/scannow :立即扫描所有受保护的系统文件,如有修改自动修复。
/verifyonly :仅扫描不修复
/verifyfile :仅扫描指定的文件不修复
59.Taskkill
终止进程
/f 强行终止
/im 指定终止进程的图象名
例:taskkill /f /im ctfmon.exe /im notepad.exe
三、批处理命令简介
1.Echo on/off
打开或关闭回显
echo off 表示不显示它以后的所有命令行
Echo 显示信息
Echo y|format a: 表示传递参数y
Echo n|format a:
以下是echo空行特殊写法
Echo.
Echo+
Echo;
例:echo nihao
@echo nihao
Pause
执行结果:
echo nihao rem 显示第1行命令行本身
nihao rem 显示第1行命令行执行结果
nihao rem显示第2行命令行执行结果
2.@
不显示命令行本身
3.Call
在一个批处理文件中调用另一个批处理或文件
例:在1.bat中调用2.bat
1.bat
@echo off
Echo this is 1.bat
Call 2.bat
::此时,用command /c 2.bat代替call 2.bat,不行,如果1.bat或2.bat中有中文,则显示一堆乱码
::用start 2.bat代替call 2.bat,执行完毕根本不返回到1.bat。
Echo 2.bat end,back to 1.bat
4.Pause
按任意键暂停
5.Goto label 和:label连用
注意label的命名有讲究,如果批处理中有多个label,那么label名的前八位字母就不能完全一致,因为COMMAND只识别前八位,如果命名一致,从第2个label将永远不能执行。
6.Rem
注释,等同于 ::和/* */
7.%
参数表示符
参数是指运行批处理文件时在文件名后加的字符串,范围%0~%9,%0表示文件本身,字符串由%1~%9
8.If
条件判断语句
If (not) /i “字符串1”=”字符串2” 待执行的命令
/I :表示不区分大小写判断
例:@echo off
Set /p var1= please input
Set /p var2= please input
If "%var1%"=="%var2%" (echo 变量相等) else echo 变量不相等
::变量var1和var2使用了双引号,是为了比较变量中的空格,如var1=a,var2=a ,不加
::双引号,它们相等,执行的是(echo 变量相等),加了双引号,执行的则是“else echo 变量不相等”命令
pause
If (not) exist 文件 待执行的命令
例:if exist c:\test1.txt (echo 存在test1.txt) else echo test1.txt不存在
If (not) errorlevel 数字 待执行的命令
例:@echo off
Set /p commandname=请输入要测试的是否存在命令
If errorlever==0 (echo 命令成功执行) else echo 命令没有成功执行
::曾经错误errorlever和0之间忘记了= =,echo和显示的信息之间没有空格
pause
例: @echo off
if not exist d:\myfolder\nul md d:\myfolder
if not exist d:\myfolder\word\nul md d:\myfolder\word
REM 在win98系统中,if语句无法检测到目录的存在,但可以检测空设备,所以为保证脚本正常运行,使用了nul。
If defined xxx command :判断xxx是否是被定义的变量
例:@echo off
Set var=123
If defined var (echo var是被定义的变量) else echo 未被定义
pause
If defined %var% (echo %var%是被定义的变量) else echo %var%是未被定义
::对var的值进行判断是否为变量
pause
Set 123=456
If defined 123 (echo 123是被定义的变量) else echo 未被定义
pause
9.Choice
Choice /c:参数 参数表示可输入的字符,由set /p代替,已经很少用
10.For
循环命令
FOR [%%f] in (集合) DO [命令]
/d 仅对目录操作有效,对文件无效
例:@echo off
for /d /r %%i in (*) do @echo %%i
::列出当前目录中的所有未隐藏的目录,文件不操作
pause
/r 递归(即对当前目录操作,其下的所有子目录也进行操作)
例:@echo off
for /d /r %%i in (*) do @echo %%i
::列出当前目录及其子目录中的所有未隐藏的目录,文件不操作
pause
/l 迭代数值范围
例:@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
/f 读取文本中的每一行内容赋值给变量或将命令的执行结果返给变量(很常用)
例:有一文本test.txt,内容为:
姓名 关系
; 显示对应关系
张仪 劳动
得 顾主
@echo off
for /f "eol=; tokens=1,2 delims= " %%a in (c:\test.txt) do @echo %%a %%b
::读取文本的内容赋值给变量%%a,之后显示文本中的两列内容,带分号的行不显示
::eol=;表示忽略以分号;开头的行,即使不写该参数,也默认执行该参数
::tokens=1,2表示打印/显示文本的第1,2列内容
::delims= 表示以空格为分隔符
Pause
例:@echo off
for /f "eol=; tokens=1,2 delims= " %%a in (‘net user’) do @echo %%a %%b
~I 表示删除引号
删除首尾的引号
删除开头的引号
尾部的和中间的引号不删除
例:有一test.txt文档,内容如下:
“afds”
“daf
Dfs”
Afd”dfa
执行以下代码
@echo off
for /f %%a in (c:\test.txt) do @echo %%~a
pause
结果如下:
afds
daf
Dfs”
Afd”dfa
%~fi 表示将%i扩展到一个完全合格的路径
例:@echo off
for /f %%i in ('dir /b') do @echo %%~fi
pause
%~di 表示将%i 扩展到一个磁盘驱动器号
%~pi 表示将%i扩展到路径
%~ni 表示将%i扩展到文件名
%~xi 表示将%i扩展到文件后缀
%~si 表示将%i扩展到文件短名
例:@echo off
for /f %%i in ('dir /b') do @echo %%~si
pause
如果根目录有documents and setting,则只显示documents这样形式的文件短名
%~ai 表示将%i扩展到文件属性
%~ti 表示将%i扩展到文件的大小和日期
%~zi 表示将%i扩展到文件的大小
%~$path:I 表示在指定的path下搜索指定的文件
例:@echo off
for /f "delims=" %%i in ("ping.exe") do @echo %%~$path:i
::曾经犯的错误,括号里使用双引号而不是单引号
pause
11.,
相当于空格
例:在CMD下执行dirc:会出现错误提示,使用dir,c:则不会
12. “ “
界定符,常用来界定“带空格的目录”
例:在CMD下执行dir c:\documents and setting会出现错误提示,使用dir “c:\document and setting”则不会
13. ^
转义字符,取消特殊符号的作用
例:如果想将>这个特殊符号写到文本文件中去
echo > >test.txt 错误
Echo ^> >test.txt正确,取消了>特殊符号的输出重定向功能
14. &
命令连接字符,不管&之前的命令执行正确与否,其后的命令都会顺序执行
15. &&
命令连接字符,只有&&之前的命令执行正确,其后的命令才会执行
16. ||
命令连接字符,只有||之前的命令执行错误,其后的命令才会执行
17. |
管道命令
把前一个命令的输出结果作为下一个命令的输入
18. >
输出重定向命令
把前一个命令的输出结果写到后面的设备中去,后面设备的内容被覆盖
19. >>
输出重定向命令
把前一个命令的输出结果写到后面的设备中去,后面设备的内容不被覆盖
20. <
输出重定向命令
把后一个设备的指定内容作为前一个设备的输入
21. *和?
通配符
*表示任意多个字符
?表示任意一个字符
22. 概念理解:变量扩展与延迟变量扩展
变量扩展:在批处理的执行中,用变量的值替换变量的名的过程。
延迟变量扩展(使用标志setlocal enabledelayedexpansion)
例:@echo off
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)
Pause
::代码解读,该代码段的执行结果显示“5个echo处于关闭状态”
::为什么呢?
::因为CMD执行批处理时首先是将每一个命令行读入内存进行匹配
::匹配的含义是检查命令行是否有语句格式的错误,而不是执行命令行
::红色代码是一行命令行
::变量var首先进行匹配而不能执行,所以此时var还没有被赋值,是空值
例:@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)
Pause
::代码解读,该代码段的执行结果显示“数列形式的1 2 3 4 5”
::为什么该代码段执行正确?
::因为它使用了“延迟环境变量扩展”
::延迟环境变量扩展中的变量用“! !”而不是“% %”
::使用延迟环境变量扩展的目的是先执行1次命令行在进行匹配
::因此,变量var先被赋值为1,之后匹配命令行
同理:
set var=test & echo %var% 会出现错误提示:echo处于关闭状态
setlocal enabledelayedexpansion
set var=test & echo !var! 被正确执行
23.;
当命令相同时,可以将不同目标分隔开
例:dir c:\;d:\;e:\相当于dir c:\ dir d:\ dir e:\
补充:
autoexec.bat :开机时自动运行的批处理文件
winstart.bat :选择进入windows状态时自动运行的批处理文件
Dosstart.bat :在windows下重新启动进入MS-DOS时自动运行的批处理文件
区别:执行的时间段不同
四、技巧集合
1.*.*可用.代替
Del *.* equ del .
2.无论命令是否正确执行,都屏蔽它的显示信息可将命令重定向到空设备NUL上
例:dir >nul 2>nul
3.向文本中添加内容
Type con >>文本名 REM 已测试,按F6键或CTRL+Z停止输入
Type con >filename equ copy con filename
type nul>filename 表示将文件内容清空,但filename的属性不能是只读和隐藏文件
4.DOS下的指法练习
Copy con nul
5.Regedit /e
导出注册表,例:regedit /e test,将注册表数据库导出到文件test.reg中
导入注册表,例:regedit/c test.reg,将test.reg导入到注册表中
例:regedit test.dat,将test.dat导入到注册表中
6.在“运行”或CMD下,直接运行“hh ntcmds.chm”,会启动“命令行参考”窗口,方便自学DOS命令
7.2>nul
2表示错误消息句柄
8.让程序一个接一个执行
start /w 第一个程序
start 第二个程序
9.查看与本地机器连接的用户列表
Net session
清除已经与本地连接的用户temp
Net session \\temp /delete
10.在子网内,ping不通网关,但可以与其它机器正常ping通
解决思路:获得网关正确的MAC地址,之后执行
arp -a 网关IP 网关MAC地址
11.新建一个文件
type nul>new.txt
例:建立批处理文件的方法总结
a. type nul>test.bat (test.bat空内容,需要进入编辑内容)
b. copy con test.bat
c. echo dir c:>test.bat
echo dir d:>>test.bat
d. edit test.bat
edlin test.bat
e. 在Windows下建立文本文件再改扩展名(需要进入编辑内容)
12.命令提示符被禁止
解决思路:reg delete HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows /f >nul
13.批处理执行遇到“bad command or filename”这样的错误提示该如何理解?
命令错误;
命令正确,但不在当前目录和PATH设置的搜索路径内;
批处理文件内容中有COMMAND无法解释的字符。
14.在用批处理编写菜单时,不要用特殊符号,如:| ,会引起歧义,造成错误。
15.想同别人QQ,可借鉴如下代码:Set/p qq=请输入你想和他/她聊的QQ号码(然后回车):
start tencent://Message/?Uin=%qq%
16.如何在批处理中加空行
@echo off
echo first^
echo second
rem ^是转义字符,可以将空行转义,其实自己也不太懂,但这个方法可行?
17.批处理中如何调用vbs文件(未测试)
start "" a.vbs 或 start c:\a.vbs
批处理中如何安装inf文件(在“工具”“文件夹选项”“文件类型”高级下查看“编辑”获取相关内容)
rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 c:\b.inf
18.如果用Cacls把硬盘锁定了的解决方法
Cacls D: /t /c /g dfdgdfghfh:f rem 解锁D盘
19.设置本机“用户帐户”操作
control userpasswords2
五、断章取义
1.@echo msgbox "下载完了",4096 >> e:\test.vbs
start e:\test.vbs
REM 4096的含义是:系统模式:在用户响应消息框前,所有应用程序都被挂起
2.在批处理中加弹出窗口
a、Msg %username% /time:5 “hello,zgk”
REM 需TermService服务支持;/time:5表示弹出窗口停留时间;“hello,zgk”表示弹出窗口的内容。
b、net send %computername% “弹出窗口显示内容” >nul
REM 需message信使服务支持
c、利用系统自带的mshta程序
利用vbscript自带的msgbox函数显示
mshta vbscrip:msgbox(“弹出窗口具体内容显示”,64,”弹出窗口标题”)(windows.close)
REM 64表示弹出窗口停留时间,windows.close表示停留64秒后关闭窗口
d、利用vbscript的popup功能
mshta vbscript:CreateObject("Wscript.Shell").popup("窗口显示内容",7,"窗口标题",64)(window.close)
e、mshta javascript:window.alert("警告窗口信息");window.close()
f、利用javascript的popup功能
mshta "javascript:new ActiveXObject('WScript.Shell').popup('Hello,lxmxn',7,'batch script',64);window.close();"
g、利用javascript的confirm功能
mshta javascript:confirm("ha");window.close()
3、不断弹出窗口的代码
@echo off
Start notepad.exe
%0
Rem 试了一下,确实挺狠,只有重新启动机器
4、设定循环次数启动某程序或命令
@echo off
:loop
If not exist c:\test.txt echo. >c:\test.txt &goto err1
If not exist c:\test1.txt echo. >c:\test1.txt &goto err1
If not exist c:\test2.txt echo. >c:\test2.txt &goto err1
If not exist c:\test3.txt echo. >c:\test3.txt &goto err1
:err1
Start notepad.exe
Goto loop
Rem 其实还可以用其它方法实现,只为学习!
5、记录登陆计算机时间的批处理
@echo off
Date /t >record.txt
Time /t >>record.txt
Attrib +s +h record.txt
Attrib +s +h record.bat
最后,把record.bat加入到注册表中的如下位置:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\WINDOWS\\system32\\userinit.exe,record.bat,"
注意:根据record.bat的实际路径书写,记住,它后面的逗号,不能不写!
9、隐藏运行批处理文件时“一闪而过的CMD窗口画面”
方法一:利用JS代码
new ActiveXObject('WScript.Shell').Run('cmd /c 隐藏的.bat',0);
方法二:利用VB代码
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c felix.bat",vbhide
方法三:利用VB代码
CreateObject("WScript.Shell").Run "cmd /c felix.bat",0
10、将某个文件拷贝到某个磁盘所有目录包括子目录下
@echo off
for /r D: %%i in (.) do copy /y 01.txt "%%i"
pause
REM 将01.txt拷贝到D盘下的所有目录
11、如何更干净的清除垃圾文件
关注 cookies、temp、tempor~1、history等目录和win386.swp和注册表信息
12、安静模式运行程序的脚本代码
On Error Resume Next
set wshshell=createobject("wscript.shell")
a=wshshell.run ("文件名",0)
rem 其中的文件名就是要运行的程序,0就是程序运行时不显示运行窗口
13、删除found.001/found.002等垃圾文件的批处理代码,不错!
for %%a in (c d e f g) do (
for /r %%a:\ %%i in (FOUND.00*) do (rd /s /q %%i >nul 2>nul)
)
14、清除重复行批处理代码
@echo off
for /f "delims=" %%i in (a.txt) do (
findstr /c:"%%i" b.txt 2>nul||echo %%i>>b.txt
)
Pause
rem 为何能实现?
rem 比如a.txt内容为“张三 李四 张三”三行,那么在将张三赋给变量%%i,后
rem 再执行在b.txt中查找“张三”,没有找到说明第2行语句前半段错误,所以
rem ||后的命令得以执行,那么第2次将“张三”赋给%%i再在b.txt中查找张三
Rem 就能够查到,语句正确,后者命令就不能执行,不知解释的是否正确
17、通过批处理修改注册表中的文件类型进而实现“某类型文件无法被打开”?
@echo off
reg add HKCR\.bat /f /ve /d bat >nul 2>nul
reg add HKCR\.cmd /f /ve /d cmd >nul 2>nul
echo.
echo 啊哦,bat/cmd文件无法打开或者编辑了!
pause >nul
Rem bat和cmd后缀类型的文件就无法被打开了,如果需要打开它们可恢复注册表,rem 当然前提是有注册表备份了
六、概念理解
1.什么是MD5:MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),它能将一串随机长度的信息(当然也包括文件)通过其加密函数算法生成一个惟一的128位值,相同信息的MD5值也是相同的,反之,文件即使略有改动,其MD5值也会产生变化。因此,只需比较文件的MD5值,就能知道文件是否经过改动了。
七、DEBUG的学习
H
:代表十六进制,DEBUG使用的是H,通过DEBUG可以建立工具用于批处理的使用。
学习示例:
在CMD下建立一“打印屏幕内容的工具”
Debug scrprint.com
rem scrprint.com是即将要建立程序或者说是工具
-a 100
rem –是debug的输入标志, “a 100”表示在以十六进制地址100所指定的地址输入命令
0b06:0100 100 int 5
rem 输入命令int 5,“int 5”表示将打印屏幕内容
0b06:0102 mov ah,4c
0b06:0104 int 21
rem 以上两条命令是表示通知MS-DOS,结束程序
0106 按ENTER
-r cx
rem cx是Debug用来存放程序大小的寄存器
:6
rem 6是该程序的大小,计算程序大小的方法是最后一行地址0106减去第一行地址0100,是6个字节
-w
rem 将程序写入到磁盘中
-q
Rem 退出MS-DOS
|
|
2008-3-11 16:42 |
|
|
tuliangwl
初级用户
九州散人
积分 55
发帖 28
注册 2007-9-14
状态 离线
|
|
2008-3-11 17:43 |
|
|
jydyx
新手上路
积分 14
发帖 8
注册 2009-1-24
状态 离线
|
『第
3 楼』:
学起走
|
我是新手,我怕怕!!! |
|
2009-2-9 13:58 |
|
|
cnmagician
初级用户
积分 38
发帖 32
注册 2009-1-12
状态 离线
|
『第
4 楼』:
慢慢学,不怕。
|
[fly] 我是新人,请大家多多照顾!谢谢
[/fly] |
|
2009-2-9 16:22 |
|
|
stlzlg
新手上路
积分 10
发帖 5
注册 2009-2-26
状态 离线
|
|
2009-3-2 12:34 |
|
|
cuihao1472
新手上路
积分 14
发帖 7
注册 2009-2-19 来自 北京
状态 离线
|
|
2009-3-4 00:33 |
|
|
fuagui
新手上路
积分 6
发帖 3
注册 2009-3-18 来自 湖南
状态 离线
|
『第
7 楼』:
樓主幸苦了,由淺入深的資料,真的很適合學習
|
|
2009-4-2 22:44 |
|
|
tinlin
初级用户
DOS菜鸟兼痴迷者
积分 160
发帖 76
注册 2008-2-23
状态 离线
|
『第
8 楼』:
THANK FOR YOU SHARING!
|
C:/>forum http://cks.5d6d.com
conneting...
cks>http://cks.5d6d.com
cks>
cks>open
cks>username:tinlin
cks>password:*********
cks>
|
|
2009-4-5 00:39 |
|
|
kida
初级用户
积分 139
发帖 63
注册 2007-10-20
状态 离线
|
|
2009-4-12 10:37 |
|
|
deaniqpl
新手上路
积分 14
发帖 8
注册 2008-8-22
状态 离线
|
『第
10 楼』:
从这笔记中学到很多东西,比较容易理解
|
|
2009-4-13 16:48 |
|
|
generalchd
新手上路
积分 10
发帖 5
注册 2008-8-26
状态 离线
|
|
2009-4-24 05:51 |
|
|
qiuzisiyu
新手上路
积分 4
发帖 3
注册 2009-4-21
状态 离线
|
『第
12 楼』:
学习是无止境的,真的谢谢楼主分享。辛苦了.
|
|
2009-4-27 14:16 |
|
|
dongbao1206
新手上路
积分 15
发帖 8
注册 2008-12-13
状态 离线
|
|
2009-5-1 23:54 |
|
|
cisheng97
初级用户
积分 31
发帖 24
注册 2009-4-4
状态 离线
|
|
2009-5-4 08:12 |
|
|
liaobin
新手上路
积分 10
发帖 5
注册 2009-5-13
状态 离线
|
|
2009-5-15 07:43 |
|
|