[原]Windows XP下的DOS批处理
2021年8月26日 17:25
•
linux专区
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的提出出来了:
下载文件
点击这里下载文件
但该版本的参数已经与以前的有较大的区别:
引用
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
本地下载:
下载文件
点击这里下载文件
四、参考文档 上述只是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/110934.html