初尝Windows 下批处理编程
本文叫“ 初尝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 下批处理编程的更多相关文章
- 初探WINDOWS下IME编程
初探WINDOWS下IME编程作者:广东南海市昭信科技有限公司-李建国 大家知道,DELPHI许多控件有IME属性.这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现.下面说一下本 ...
- Windows下串口编程
造冰箱的大熊猫@cnblogs 2019/1/27 将Windows下串口编程相关信息进行下简单小结,以备后用. 1.打开串口 打开串口使用CreateFile()函数.以打开COM6为例: HAN ...
- Windows下GUI编程——窗口
windows下创建一个基于GUI的窗口程序很简单,使用MFC或者Win32 API都可以实现.本文简单整理下windows API创建GUI应用程序的基本编码框架. 比较常见的窗口包括:桌面窗口.应 ...
- Windows下多线程编程(一)
前言 熟练掌握Windows下的多线程编程,能够让我们编写出更规范多线程代码,避免不要的异常.Windows下的多线程编程非常复杂,但是了解一些常用的特性,已经能够满足我们普通多线程对性能及其他要求. ...
- Windows下Hadoop编程环境配置指南
刘勇 Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于最近在研究 ...
- windows下socket编程:区分shutdown()及closesocket()
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- Windows下C编程获取软件安装列表信息
代码如下: #include <windows.h> #include <stdio.h> #include <iostream> #include <vec ...
- Windows下批处理执行MySQL脚本文件
转载至http://my.oschina.net/u/660932/blog/117929 一. @echo offSetlocal enabledelayedexpansion::CODER BY ...
- windows下网络编程UDP
转载 C++ UDP客户端服务器Socket编程 UDPServer.cpp #include<winsock2.h>#include<stdio.h>#include< ...
随机推荐
- 射频识别技术漫谈(7)——ID卡【worldsing笔记】
ID(Identification)是识别的意思,ID卡就是识别卡.ID卡包含范围广泛,只要具有识别功能的卡片都可以叫ID卡,例如条码卡,磁卡都可以是ID卡,我们这儿说的当然是射频识别卡. 射频ID卡 ...
- 【WIN32进阶之路】:线程同步技术纲要
前面博客讲了互斥量(MUTEX)和关键段(CRITICAL SECTION)的使用,想来总觉不妥,就如盲人摸象一般,窥其一脚而言象,难免以偏概全,追加一篇博客查遗补漏. win32下的线程同步技术分为 ...
- 解决SenTestingKit/SenTestingKit.h: No such file or directory
在一个iOS项目中引入了单元测试,感觉项目间的依赖关系有些乱,就建了一个新的Project,再把原来的.h和.m加进去,编译时竟然出现“SenTestingKit/SenTestingKit.h: N ...
- Applied Functional Analysis(Applications to Mathematical Physics ) E.Zeidler
Applied Functional Analysis(Applications to Mathematical Physics ) E.Zeidler More: QQ565055403
- 记一次js中和php中的字符串长度计算截取的终极问题和完美解决方案
1.js是用unicode算长度的,比如单字节的算1,中文也算1,但是正常我们想让两个单字节算1,如何计算这个长度 第一种解决方案,用正则,如下 /[\u0x00-\u0xff]/,天真的想着,这样就 ...
- 利用存储过程将表中的数据生成Insert语句
1.创建存储过程 CREATE PROC [dbo].[sp_get_InsertSql] @dbName VARCHAR ( )= '' , -- 数据库名称 @tabList VARCHAR ( ...
- [Bootstrap] 2. class 'row' & 'col-md-x' & 'col-md-offset-x'
Usually when desgin a web page, we think building the page in grid. Bootstrap can help us to do that ...
- interactive_timeout
[mysqld] interactive_timeout 交互式连接 会话1 [root@localhost ~]# mysql -umysql -p Enter password: Welcome ...
- 学习PHP时的一些总结(五)
mysql中启用事务的数据表类型建议使用InnoDB 利用PHP代码调用mysql中的事务过程: 1>关闭自动提交过程 $mysqli->autocommit(0); 2>执行sql ...
- iOS9横竖屏设置的处理方法
在一般的视频类APP播放的时候都会支持横屏,这样做的好处就是便于观看.你的项目中支持横屏吗?我们一起了解一下,在iOS9中横竖屏设置的处理方法吧! 支持横竖屏配置 在iOS6以后,如果APP需要支持横 ...