[原]Windows XP下的DOS批处理

    Linux下的脚本文件可能很多人都写过,例如:bash、ksh等。同样的,Windows下也提供了很多字符命令,及批处理(.bat)文件。过去,在Windows XP之前,都是依赖于Dos环境的,若要对系统进行自动化的动作,不可避免的就需要编写这些批处理文件,实际上它们也就是自动化脚本。通过对比发现,Windows XP下的Dos命令减少了很多,而且有部分变量引用方式也发生了改变。这里,特把常使用到的命令做个介绍,如何实现您需要的功能,就要靠您进一步学习了。(批处理文件与Windows PowerShell 不同,那是另一种脚本工具)

一、帮助
首先,我想说的是,Windows虽然不再依赖Dos环境,但还是提供了Dos的字符界面的。
通过,在开始菜单,点击“运行”,然后在弹出框中输入cmd,就可以打开字符界面:
点击在新窗口中浏览此图片

引用
help ← 获取内置命令的帮助信息
regsvr32 ← 进行注册与卸载控件
regedit ← 编辑注册表文件
net ← Windows提供的网络管理命令
……

这些命令随着您陆续安装新的软件,可能会有更多的命令供您选择。这就需要看到底您安装的软件是否提供了命令行的工具了,例如:winrar、f-secure ssh等,这些命令就需要参考其说明来使用了。
此外,Dos环境中获取命令的帮助信息也会Linux有点不同,一般使用/?表示,例如:

net /?
start /?
net help use

二、常见批处理控制命令
下面进入我们的主要话题,就是如何编写批处理文件。正如编写脚本一样,批处理文件也是由控制语句和实际命令组成的。这些常见的控制命令有:
1、if 语句
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
a、 if "参数" == "字符串"  待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如:

if "%1"=="a" format a:

b、 if exist 文件名  待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。如:

if exist config.sys edit config.sys

c、 if errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如:

if errorlevel 2 goto x2

DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,根据该值就可以进行判断了。
如要引用这个返回码,可以使用%errorlevel%变量。
※ Dos环境中是没有大小写区分的。

2、goto 语句
goto 用于让批处理文件运行到这里,然后跳转到所指定的标号处,每个标号使用“:”开头来定义,例如:

goto end
:end
echo this is the end

3、for 语句
for 是个循环,可以用你指定的循环范围生成一系列命令。例如:

for %a in (c: d: e: f:) do @dir %a|find "可用字节"

这个命令与Linux下的for比较相似,上面的find相当于grep。该命令就不想多说了,详细可看☞这里。
否则,研究下去就会变成学Dos脚本的编写了,我暂时没这个时间啊! O(∩_∩)O哈哈~

4、choice 命令
该命令原来是Dos下创建简单选择菜单的基础,但Windows XP后取消了该命令。网上有朋友把Win2003的提出出来了:

[原]Windows XP下的DOS批处理下载文件
点击这里下载文件

但该版本的参数已经与以前的有较大的区别:

引用
C:\Documents and Settings\hyphen\桌面>choice /?
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]        指定可以使用的关键字,默认是 YN
/N           在提示符的最后,不显示选择项和?符号
/S           让选择的时候区分大小写
/T[:]c,nn    设定默认选择项,和等待时间
text         显示的Prompt字符串

选上选项后,ERRORLEVEL 变量会被choice设置为对应的值,第一项是1,第二项是2,依次类推

5、 start 命令
start 用于启动另一个窗口运行指定的程序或命令,该命令很重要,可用于弹出一个文件夹到桌面等功能,这里不一一说明了,看看start /?就明白。
OK,Dos批处理命令的介绍暂时到这里,若还需要更深入的了解,/?是您的选择。下面,我举一个简单的实例。

三、举例
最近,我需要在Linux和Windows之间来回换交换数据,用的是网上邻居共享。期间,为了方便,我需要把远程的共享映射为到一个盘符上。若每次都需要从“我的电脑”上点击映射,用完后再断开,太麻烦了。
所以,我就写了一个简单的批处理文件。通过它,运行后只要输入一个字母,即能完成我的工作。
源码:

@echo off
REM 是注释
REM  先判断远端是否可以联通,然后再连接共享,否则直接退出
ping 192.168.16.129 -n 1
if /i "%ERRORLEVEL%"=="1" goto end

REM 提供三个选项,C 表示连接共享、D 表示断开、E表示直接结束
echo "C means Connect Asianux3 Server."
echo "D means Disconnnect."
echo "E means End."
choice /c:CDE /T:E,10 请选择
if /i "%ERRORLEVEL%"=="1" goto connect
if /i "%ERRORLEVEL%"=="2" goto over
if /i "%ERRORLEVEL%"=="3" goto end

REM 每个段执行不同的操作
:connect
if exist z: net use z: /delete
net use z: \\Asianux3\perlscripts
start explorer z:
goto end

:over
if exist z: net use z: /delete
goto end

:end
echo good bye

运行情况:

引用
C:\Documents and Settings\hyphen\桌面\>netuse.bat
"C means Connect Asianux3 Server."
"D means Disconnnect."
"E means End."
请选择[C,D,E]?E
good bye

本地下载:

[原]Windows XP下的DOS批处理下载文件
点击这里下载文件

四、参考文档
上述只是Dos批处理的简单用法示例,如需要实现更多的目的,还需要您进一步学习。下面的参考文档中,有不少代码都是相当不错的示例:
http://www.cnblogs.com/markor/archive/2007/06/04/771337.html
http://www.fz49.com/view-337.html
http://www.wb688.com/news_view.asp?newsid=2359
http://www.jb51.net/article/7373.htm
http://www.it101.cn/edu/os/Windows/Win/news-5734.html

把远程桌面连接放到第二个显示器上显示
在打开Windows 7 防火墙环境下访问网络文件共享
把Windows 7 用户文件夹挪移到非系统分区
Windows 命令行控制关机休眠等操作
打开Win7的telnet支持

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/110934.html

(0)
上一篇 2021年8月26日 17:25
下一篇 2021年8月26日 17:26

相关推荐

发表回复

登录后才能评论