本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了。

本文包括以下内容

1、什么是批处理

2、常用批处理命令

3、简介批处理编程结构

4、一个批处理游戏代码欣赏

5、总结


什么叫批处理

批处理(Batch)通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的解释器(通常是COMMAND.COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名。在Windows下运用批出处理的主要目的是完成自动化操作(如无人值守安装程序、批量处理txt数据等或许这些操作需要调用外部程序)

Shell 在计算机科学中,是指“提供用户使用界面”的软件,通常指的是命令行界面的解析器。一般来说,这个词是指操作系统中,提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。因此与之相对的是程序内核(英语:Core),内核不提供和用户的交互功能。

通常将Shell分为两类:命令行与图形界面。命令行壳层提供一个命令行界面(CLI);而图形壳层提供一个图形用户界面(GUI)

常用批处理命令

一、DOS下的常用批处理命令

屏幕显示控制:

① echo 回显控制(在命令提示符或DOS下,每执行一条命令都会显示在屏幕上,这就叫回显)

echo on :: 打开回显

echo off :: 关闭回显

@echo off :: 关闭回显,且连这句都不显示,常用

echo hello world :: echo 还有打印的功能

② cls 清屏命令

③ @ 符号

如某条命令前加@关闭该命令的回显

@cls
@echo hello World

文件控制:

① edit 文本文件的创建和编辑

② del 文件的删除

格式: del [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

③ copy/move 文件的复制和移动

常用格式: copy/move 原文件路径/原文件名 新路径

move a.txt c:\xx    ::将 当前目录下的a.txt 移动c:\xx目录下

指令其余格式可以查看命令帮助

④ ren 文件重命名

格式: REN [drive:][path]filename1 filename2.

例:

:: 将当前目录下的所有文件改为jpg文件
:: * 是通配符,代表任意数量的字符
ren * *.jpg

⑤ attrib 设置或更改文件属性

例:

attrib +s +a +h +r Z:\bak\tools  :: 对照上面解释不言自明

文件夹控制:

① cd(chdir) 显示或改变当前目录名称

格式:cd [drive:]path

常用格式列举:

cd
cd..     返回上级目录

cd\     返回根目录

cd fullPath

效果:

② md(mkdir) 创建文件夹

格式 md [drive:]path

可以嵌套创建文件夹,如 md a\b\c\d

③ rd(rmdir) 删除一个文件夹

格式:rd [/s] [/q] [drive:]path

/s 的意思删除指定目录下的所有文件以及子目录

/q 安静模式,不向用户询问是否删除

比如删除上面建立的文件夹

rd /s /q z:\a

文件和文件夹共同的命令:

① dir 显式目录中文件和子目录列表,详细参数见下图

② tree 显式目录结构

常用格式:

tree > z:\C_result.txt  :: 当前路径为C盘根目录

运行结果:

一些特殊符号:

① 重定向符号  > 与 >>

重定向符号就是传递和覆盖的意思,它所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台,即命令提示符)。

例: tree /f > z:\result.txt :: 把当前目录的树形目录结构打印到 result.txt 文件中

> 与 >> 的区别

> 是完全覆盖以前文件内容

>> 是在以前文件内容后面接着写

② 命令管道符  |

表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,即,就是把它之前的输出作为它之后的输入。

例:

:: 查找qq.exe进程 如找到就结束
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe

③ 组合命令  & 与 && 及 ||

& 顺序执行多条命令,前面命令执行失败了,不影响后边的命令执行

:: 查找电脑  Z盘 Y 盘 以及 C盘下目录和文件
dir z:\ & dir y:\ & dir c:\

&& 顺序执行多条命令,当碰到执行错误的命令则停止执行,如无错则一直执行下去

:: 由于我的电脑没有y盘,故批处理执行到 dir y:\ 出错后就停止
dir z:\ && dir y:\ && dir c:\

|| 顺序执行多条命令,当碰到执行错误的命令才往后执行,如遇到执行正确的命令则停止

:: 大家敲下这代码就不言自明了
dir y:\ || dir z:\ || dir c:\

④ 转义字符 ^

如 echo ^>

⑤ 变量引用符 %

定义变量(后面批处理编程结构会提到)var 后,用两个%%包围变量的方式引用此变量 %var%

⑥ 界定符 ””

当路径中有空格,需用英文状态下的双引号“ ”” ”  包围路径

如:

cd "c:\Program Files"

其余指令和符号:

命令 /? 命令帮助

pause 暂停批处理程序

type  显式文本文件的内容

ver   显式操作系统版本

rem 注释符号

:: 注释符号

xcopy 复制文件和目录

* 通配符 表示任意多个字符

? 通配符 表示一个字符

find 搜索字符串

exit 退出命令

二、Windows 下的命令

网络相关:

① ping

常用参数
-t 一直 ping

-l 指定包的字节数,最大 65500 字节

ping  [-l 65500 最大字节数] IP [-t]

② ipconfig 显示当前电脑TCP/IP 配置

常用参数:

/all 显示所有信息

/flushdns 刷新DNS信息

/renew 更新 DHCP 配置

③ arp   显式或修改ARP

arp –a :: 显式 ARP表

更多命令参见 arp /?

④ netstat TCP统计

常用

netstat -nao

netstat -nao > z:\tcpstat.txt

⑤ tracert 路由追踪命令

例: tracert www.baidu.com

更多命令参见 tracert /?

⑥ pathping 路程信息查看

例: pathping www.baidu.cm

更多参数详见 pathping /?

⑦ telnet (推荐用 SecureCRT)

磁盘相关:

①chkdsk 磁盘检测和修复(弱弱的修复

详见 chkdsk /?

② subst 将驱动器与路径关联(在第一家公司写代码需要指定统一路径时用过)
创建 subst 虚拟磁盘: 物理磁盘路径

删除 subst 虚拟磁盘: /d

系统相关:

①driverquery 显示已安装驱动(个人觉得用处不大 

② systeminfo 获取系统配置信息(个人觉得用处不大

③ regsvr32 注册或卸载某个动态链接库

regsvr32 /u或/i *.dll(*.ocx)

更多参数 详见 regsvr32 /?

④ tasklist 显式进程列表

用法相见 tasklist /?

⑤ taskkill 结束指定进程

我常用的格式:

taskkill /f /im 映像名
例如 关闭所有 IE 进程
taskkill /f /im iexplore.exe 结合 tasklist 和 taskkill 使用
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe

⑥ shutdown 关闭计算机

shutdown/s    关闭计算机
shutdown/r    重启计算机

shutdown/a    放弃关闭计算机

更多参数详见shutdown/?

⑦ sc 命令系列

sc create 创建服务

例:

::创建MyService,执行文件为c:\windows\system32\zfServ.exe
sc create MyService binpath=c:\windows\system32\zfServ.exe

sc delete 删除服务

::  删除MyService
sc delete MyService

sc start 启动服务

:: 启动服务 MyService
sc start MyService

sc stop 停止服务

::停止服务 MyService
sc delete MyService

更多参数详见 sc/?

简介批处理编程结构

批处理作为一个脚本语言也有编程语言的基本结构——变量、条件语句、循环语句、函数(批处理中与此类似的是过程)

一、变量

键入set命令 查看所有已知变量(环境变量、内置系统变量)

批处理变量命名:不区分大小写

set varA =311
变量都是弱类型的(脚本语言嘛

区分空格

set varA = "sss"

set varA="ss"

是两个变量

如果需要用局部变量则用

setlocal

set 语句

endlocal

引用变量用 两个 %% 包围 如 %varA%

数学运算

+ 加、-减、*乘、/除、%求模

set /a 数学表达式

::total 自加1

set /a total+=1

二、条件语句——if 语句

格式:

if cond (

statement_1

...

statement_n

)

[else(

statement_1

..

statement_n

)]

方括号“[]”的含义为可选

例子

if "%1"=="1" (echo is one) else ( echo is not one)

比较运算符

==  判断相等

equ 判断相等

lss 小于

leq 小于或等于

gtr 大于

geq 大于或等于

三、循环语句——for 循环

基本格式: for iterator do (statements)

①遍历一系列的值

格式 :

for /L %%var in (start, step, end) do (statements) rem var 是单字母变量 如 %%i,如果是多字母变量如 %%aa 会报错

@echo off
for /l %%B in (0,1,15) do echo %%B

② 对文件的遍历
格式:

for %%var in (fileSets) do (statements)  rem fileSets 文件的集合

例1:

rem 打印 C盘下的txt文件

@echo off
for %%i in (C:\*.txt) do echo %%i

rem 打印 C盘下的txt和 sys 文件

@echo off
for %%i in (C:\*.txt C:\*.sys) do echo %%i

③ 对文件夹的遍历
格式:

for /d %%var in (directorySet) do (statements)  rem directorySet 目录的集合

例:

@echo off
for /d %%i in (Z:\) do echo %%i
:: 对 Z:\ 下目录的遍历
@echo off
for /d %%i in (Z:\*) do echo %%i
::多个目录的例子
@echo off
for /d %%i in (%SystemRoot%\* Z:\*) do echo %%i

④ 递归对文件遍历
格式:

for /r [path] %%var in (fileSet) do (statements)

例子

@echo off
for /r C:\ %%i in (*.txt) do echo %%i

⑤ /r 与 /d 结合

::输出 %SystemRoot% 下的所有目录及子目录
@echo off
for /r %SystemRoot% /d %%i in (*) do echo %%i

四、函数——在批处理编程中称过程

① 不带参数的函数

@echo off
echo 调用前
pause call :sub
::调用子过程 echo 调用后
pause
exit :sub
echo 子过程调用中
pause
goto :eof

② 带参数的函数

@echo off
set a=5
set b=4 call :add %a% %b%
::调用子过程 echo 两个数的和为%sum%
pause
exit :add
set /a sum=%1+%2
goto :eof

一个批处理游戏代码欣赏

先看效果

源码:

@echo off & setlocal enabledelayedexpansion
mode con cols=22 lines=11
color b0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set touzhu=100
:begin
set count=10000
echo 你现在有10000元赌资
ping -n 3 127.0.0.1>nul
cls :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:first
cls
set/p touzhu=请输入投注钱数
echo 按任意键开始游戏
if %touzhu% gtr %count% goto err
pause>nul
set/a user=%random%%%6+1
for /l %%i in (1,1,500) do (
cls
echo ○
echo.
echo ○
cls
echo ● ●
echo ○ ○
echo ○ ○
cls
echo ○ ○
echo ●
echo ○ ○
cls
echo.
echo ●
echo.
cls
echo ○ ○
echo.
echo ○ ○
cls
echo ○
echo ●
echo ○
cls )
goto %user%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:start
set/a computer=%random%%%6+1
if %user% equ %computer% echo 电脑的点数是%computer% & echo. & echo 打平了! & echo 你现在的赌资是!count! & pause & goto end
if %user% gtr %computer% echo 电脑的点数是%computer% & echo. & echo 你赢了! & set/a count=%count%+%touzhu% & echo 你现在的赌资是!count! & pause & goto end
if %user% lss %computer% echo 电脑的点数是%computer% & echo. & echo 你输了! & set/a count=%count%-%touzhu% & echo 你现在的赌资是!count! & pause & goto end
goto err
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:6
echo ● ●
echo ○ ○
echo ○ ○
echo.
ping -n 2 127.0.0.1>nul
goto start :5
echo ○ ○
echo ●
echo ○ ○
echo.
ping -n 2 127.0.0.1>nul
goto start :4
echo ○ ○
echo.
echo ○ ○
echo.
ping -n 2 127.0.0.1>nul
goto start :3
echo ○
echo ●
echo ○
echo.
ping -n 2 127.0.0.1>nul
goto start :2
echo ○
echo.
echo ○
echo.
ping -n 2 127.0.0.1>nul
goto start :1
echo.
echo ●
echo.
ping -n 2 127.0.0.1>nul
goto start
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:err
echo 错误……
ping -n 2 127.0.0.1>nul goto first
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:end if %count% leq 0 echo 你输光了! & goto last
if %count% geq 20000 echo 电脑输光了! & goto last
cls
echo 按任意键进行下一轮赌博
pause>nul
cls
goto first
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:last
echo 重玩?(是/y,否/n)
set/p aa=
if %aa% equ y cls & goto begin
if %aa% equ Y cls & goto begin
exit

总结

在Windows平台下批处理还是很有用的,一些简单的任务用批处理来实现会效果不错,但是比较复杂的任务用批处理编程实现就有点力有不逮了,或许能实现但是比其他语言比起来费力得多。总之简单的任务用简单的方法实现(考虑下批处理),这也许就是批处理脚本语言最好的归宿。

本文完

初尝Windows 下批处理编程的更多相关文章

  1. 初探WINDOWS下IME编程

    初探WINDOWS下IME编程作者:广东南海市昭信科技有限公司-李建国 大家知道,DELPHI许多控件有IME属性.这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现.下面说一下本 ...

  2. Windows下串口编程

     造冰箱的大熊猫@cnblogs 2019/1/27 将Windows下串口编程相关信息进行下简单小结,以备后用. 1.打开串口 打开串口使用CreateFile()函数.以打开COM6为例: HAN ...

  3. Windows下GUI编程——窗口

    windows下创建一个基于GUI的窗口程序很简单,使用MFC或者Win32 API都可以实现.本文简单整理下windows API创建GUI应用程序的基本编码框架. 比较常见的窗口包括:桌面窗口.应 ...

  4. Windows下多线程编程(一)

    前言 熟练掌握Windows下的多线程编程,能够让我们编写出更规范多线程代码,避免不要的异常.Windows下的多线程编程非常复杂,但是了解一些常用的特性,已经能够满足我们普通多线程对性能及其他要求. ...

  5. Windows下Hadoop编程环境配置指南

    刘勇    Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于最近在研究 ...

  6. windows下socket编程:区分shutdown()及closesocket()

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  7. Windows下C编程获取软件安装列表信息

    代码如下: #include <windows.h> #include <stdio.h> #include <iostream> #include <vec ...

  8. Windows下批处理执行MySQL脚本文件

    转载至http://my.oschina.net/u/660932/blog/117929 一. @echo offSetlocal enabledelayedexpansion::CODER BY ...

  9. windows下网络编程UDP

    转载 C++ UDP客户端服务器Socket编程 UDPServer.cpp #include<winsock2.h>#include<stdio.h>#include< ...

随机推荐

  1. 灰色蓝色系简洁自适应登录HTML页面

    自己写了一个简介的登录页面,页面背景为灰色,居中为登录框,登录面板为半透明效果,整体十分美观,登录按钮有JS效果.自己感觉还不错,拿出来分享一下. 页面效果图 源码下载链接:http://files. ...

  2. sql order by 排序多个字段

    order by 多个字段,每个字段后面都有排序方式,默认ASC 例如:select table a order by a.time1 ,a.time2 desc,a.time3 asc

  3. ZOJ 2674 Strange Limit

    欧拉函数. #include<iostream> #include<stdio.h> #include<string.h> #include<algorith ...

  4. XML基础总结2

    在上篇的博客中,我们系统的介绍了一下xml与html之间的异同以及一部分xml的特性或者说是优点,接下来,我们就xml文档的一些语法规则具体向大家阐述一下: 1.xml文档形成了一种"树结构 ...

  5. MFC和GDI+一起使用

    VS2010,新建MFC项目,在头文件stdafx.h中添加: #include <gdiplus.h> using namespace Gdiplus; #pragma comment ...

  6. magento问题集

    magento产品页面价格出现2遍 In app\design\frontend\default\default\template\catalog\product\view\type\Simple.p ...

  7. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)

    一个不错的UI多线程操作类 http://www.cnblogs.com/net66/archive/2005/08/03/206132.html

  8. PMP考试--价值工程法

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 ValueEngineering,简称VE,是降低成本提高经济效益的有效方法,价值工 ...

  9. Cisco asa 5510升级IOS和ASDM

    asa asa(config)# dir                                                                                 ...

  10. lucene 结合数据库做搜索

    package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...