中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
<<   [1] [2]  >>   >
作者:
标题: 自断断续续学习的笔记 上一主题 | 下一主题
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


   此帖被 +13 点积分        点击查看详情   
评分人:【 tuliangwl 分数: +2  时间:2008-3-11 17:43
评分人:【 plp626 分数: +11  时间:2008-5-8 12:22


2008-3-11 16:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tuliangwl
初级用户

九州散人


积分 55
发帖 28
注册 2007-9-14
状态 离线
『第 2 楼』:  

沙发一个,嘿嘿!学习下...


2008-3-11 17:43
查看资料  发送邮件  发短消息 网志  OICQ (375565837)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (314547139)  编辑帖子  回复  引用回复
stlzlg
新手上路





积分 10
发帖 5
注册 2009-2-26
状态 离线
『第 5 楼』:  

挺长的笔记的,看来得慢慢消化.


2009-3-2 12:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cuihao1472
新手上路





积分 14
发帖 7
注册 2009-2-19
来自 北京
状态 离线
『第 6 楼』:  

很实用啊!~


2009-3-4 00:33
查看资料  发送邮件  发短消息 网志  OICQ (286813084)  编辑帖子  回复  引用回复
fuagui
新手上路





积分 6
发帖 3
注册 2009-3-18
来自 湖南
状态 离线
『第 7 楼』:  

樓主幸苦了,由淺入深的資料,真的很適合學習


2009-4-2 22:44
查看资料  发送邮件  发短消息 网志  OICQ (50439932)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (903336698)  编辑帖子  回复  引用回复
kida
初级用户




积分 139
发帖 63
注册 2007-10-20
状态 离线
『第 9 楼』:  

哇,这么长啊,呵呵,学习


2009-4-12 10:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
deaniqpl
新手上路





积分 14
发帖 8
注册 2008-8-22
状态 离线
『第 10 楼』:  

从这笔记中学到很多东西,比较容易理解


2009-4-13 16:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
generalchd
新手上路





积分 10
发帖 5
注册 2008-8-26
状态 离线
『第 11 楼』:  

樓主幸苦了


2009-4-24 05:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qiuzisiyu
新手上路





积分 4
发帖 3
注册 2009-4-21
状态 离线
『第 12 楼』:  

学习是无止境的,真的谢谢楼主分享。辛苦了.


2009-4-27 14:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dongbao1206
新手上路





积分 15
发帖 8
注册 2008-12-13
状态 离线
『第 13 楼』:  

谢谢分享


2009-5-1 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cisheng97
初级用户





积分 31
发帖 24
注册 2009-4-4
状态 离线
『第 14 楼』:  

恩很好 喜欢就去学


2009-5-4 08:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
liaobin
新手上路





积分 10
发帖 5
注册 2009-5-13
状态 离线
『第 15 楼』:  

谢谢LZ。。强


2009-5-15 07:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: