天天看点

说说批处理

1、常用批处理内部命令

命令的使用参数均可以通过command /? 来获取,不在列举,只根据自己的使用,及自定义的常见使用做些描述,仅供参考。

注释: rem ::

rem

::

与rem不同的是,::后的字符行在执行时不会回显,无论是否打开命令行回显,因为命令解释器不认为他是一个有效的命令行,

另外,rem 可以用于config.sys 文件中。

echo off 关闭回显

@ 将这个符号放在批处理文件中其它命令的前面,运行时将不显示命令本身;与echo off 结合使用

@echo off 关闭此批处理文件中命令的所有回显。

cls 清屏

dos下命令的参数使用时不区分大小写

pause 暂停

errorlevel 运行退出状态 0/1

title 批处理脚本执行时cmd的抬头显示

color 设置批处理运行环境颜色 示例:color 0a 黑色 淡绿色 [第一个为背景,第二个则为前景]

mode 配置系统设备 mode

mode con cols=113 line=15 & color 0a 此命令设置DOS窗口大小:15行,113列,背景色为黑色,前景为淡绿色

goto : [与if判断语句结合使用]

if [not] string1 == string2 command

if [not] exist %path% command

if errorlevel 或 %errorlevel == 0 command

if /i %a% == %b% () else () ## /i 不区分大小写 注意 else一定要与前括号在同一行,

如: if /i %a% == %b% (

) else ()

::判断变量是否定义及定义变量是否为空

if defined var command 或 if not "var"=="" command

判断数字的符号

EQU - 等于 ;NEQ 不等于 ;LSS 小于 ;LEQ 小于或等于 ;GTR 大于 ; GEQ 大于或等于

find查找命令

参数不区分大小写;操作对象为文件,不可对目录执行查找操作;查找匹配,打印包含有该字段的行。

/v 显示所有未匹配的行

因为find查找的对象是文件,所以一般与 type结合使用,当然也可以通过 将要查找的文件路径放在文件中,

借助for /f来实现一行一行读取,再用find查找每个文件。

call :label arguments

调用本文件内命令段,相当于子程序。被调用的命令以标签:label开头,以命令goto :eof[要有空格]结尾

call :label运行完 标签,返回继续运行,相当于调用函数的意思;但当遇到刚才的定义的标签 仍然会继续执行;

使用起来也不很方便,较合理的方式 就是条件判断语句[if等] 与goto结合使用。

start

批处理调用外部程序的命令(在新新窗口中运行,批处理会继续往下运行,不理会外部程序的运行状况),如果直接

运行外部程序则必须等外部程序完成后才继续 执行剩下的指令。

setlocal与变量延迟

setlocal enabledelayedexpansion

用 ! 感叹号 来取变量, %var% ---> !var!

attrib 显示或更改文件属性

shift 更改批处理文件中可替换参数的位置 [表示很少用]

pushd popd

cd /d d:\mp4 #更改当前目录为d:\mp4

pushd c:\mp3 #保存当前目录,并切换当前目录为c:\mp3

popd #恢复当前目录为刚才保存的d:\mp4

一般用处不大,在当前目录名不确定时,并有些帮助, 但我感觉至少在切换目录时 加上/d 一定可以正常切换

assoc ftype

文件关联,感觉这个搞破坏 比较合适;或者是做修复时

assoc 设置‘文件扩展名’关联,关联到‘文件类型’

ftype 设置'文件类型'关联,关联到‘执行程序和参数’

命令字符串%0 或 %1被通过关联调用的文件名所代替。 %* 得到所有的参数, %2 得到第一个参数,%~n得到其余所有以nth 参数打头的参数;n 可以是从2到 9 的数字。

windows执行一个程序的过程,【安装时先通过assoc 设置正确的 文件扩展名 关联,再通过ftype 设置文件类型关联,关联到相应的执行程序和参数】

assoc与ftype 示例:

##显示系统默认的,同样【assoc .zip=HaoZip.zip ftype HaoZip.zip="C:\Program Files\HaoZip\HaoZip.exe" "%1" 就可以进行设置】

1

2

3

4

<code>C:\Users\liuyuan&gt;assoc  .zip</code>

<code> </code><code>.zip=HaoZip.zip</code>

<code> </code><code>C:\Users\liuyuan&gt;ftype HaoZip.zip</code>

<code> </code><code>HaoZip.zip=</code><code>"C:\Program Files\HaoZip\HaoZip.exe"</code> <code>"%1"</code>

恢复:exefile的正确关联

如果该关联已经被破坏,可以运行command.com,再运行 ftype exefile="%1" %*

2、常用特殊符号

@ 命令行回显屏蔽符

% 批处理变量引导符

引用变量用%var%,调用程序外部参数用%1到%9等

%0 批处理文件本身, 包括完整的路径和扩展名

%1 第一个参数 %9 第九个参数

|管道命令

^ 转义字符 &amp;

&amp;&amp; || 逻辑与 或

3、dos应用

1)for

for /d %%variable IN (set) do command

(set)相当于设置条件

通配符 * ?

* 任意N个字符, ?表示任意一个字符

5

6

7

8

9

10

11

12

13

14

<code>@echo off</code>

<code>color 0a</code>

<code>for</code> <code>/D  %%i </code><code>in</code> <code>(c:\*) </code><code>do</code> <code>echo %%i</code>

<code>::递归显示c:\abd目录下以.txt和.html结尾的文件输出定向到 result.txt</code>

<code>for</code> <code>/R </code><code>"c:\abd"</code> <code>%%i </code><code>in</code>  <code>(*.txt;*.html) </code><code>do</code> <code>if</code> <code>exist %%i  echo %%i&gt;&gt; result.txt</code>

<code>::读取结果中的每行,会自动忽略空白行  下例:排除以#开头的行,以空格为分隔,并输出第</code><code>1</code><code>,</code><code>2</code><code>字段。</code>

<code>for</code> <code>/F </code><code>"eol=# tokens=1,2 delims= "</code>   <code>%%x  </code><code>in</code> <code>(result.txt)  </code><code>do</code> <code>( echo %%x,%%y)</code>

<code>rem </code><code>for</code> <code>/L %</code><code>var</code><code>iable IN (start,step,end) </code><code>do</code> <code>command</code>

<code>:: 从</code><code>1</code><code>开始,另开启</code><code>5</code><code>个cmd窗口</code>

<code>for</code> <code>/L  %%i  </code><code>in</code> <code>(</code><code>1</code><code>,</code><code>1</code><code>,</code><code>5</code><code>)  </code><code>do</code> <code>start cmd</code>

<code>::从</code><code>5</code><code>开始,每次减</code><code>1</code><code>,开启</code><code>5</code><code>个cmd窗口</code>

<code>for</code> <code>/L  %%i  </code><code>in</code> <code>(</code><code>5</code><code>,-</code><code>1</code><code>,</code><code>1</code><code>)  </code><code>do</code> <code>start cmd</code>

<code>echo.</code>

<code>pause</code>

注: /R [[drive:]path] 路径不支持通配符

2)系统变量

取了几个感觉 有用的:

%userdomain% 本地 返回包含用户帐户的域的名称

%username% 返回当前登录的用户的名称

%userprofile% 本地 返回当前用户的配置文件的位置

%windir% 系统 返回操作系统目录的位置

3)set

赋值 set var=[string]

set /a

set /p path=请输入:

echo %path%

替换

set %path:str1=str2% 这种替换 很有鸡肋的感觉,不能在原文件中直接替换,也许是我没发现。

echo %path% 对文件进行替换,还有通过输出重定向的方式,汗。。。

截取

%a:~[m[,n]%

m为偏移量,n为截取长度

set a=bbs.verybat.cn

::偏移量为0,去掉最后的3个单位

set var1=%a:~0,-3%

echo var1=%var1%

::偏移量为1,从左边开始截取3个单位

set var2=%a:~1,3%

echo var2=%var2%

pause

运行结果:

result: var1=bbs.verybat

var2=bs.

本文转自 刘园  51CTO博客,原文链接:http://blog.51cto.com/colynn/1317401