您当前的位置: 首页 >  windows

顺其自然~

暂无认证

  • 4浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Windows BAT批处理命令详解

顺其自然~ 发布时间:2018-10-21 22:02:36 ,浏览量:4

批处理可以说是windows下的shell,虽然没有shell强大吧,但也足以用来完成很多任务了。这里记录了大部分的批处理用法。

先说使用批处理要注意的几点:

  • 尽量不要将批处理要操作的文件放在不同的盘符下,所有要处理的文件最好放在同一个目录下;
  • 文件/夹名最好不要空格,因为批处理的命令参数一般是用空格分隔的,有空格的话,用文件名做参数容易出错;
  • 尽量使用相对路径,不要用绝对路径;
  • 对于要使用但又不理解的命令,一定要先查看命令的使用说明:help cmdName;
  • 写bat时等号前后不能有空格。
常用命令

1、禁止命令回显 

echo off 表示此语句后的所有运行的命令都不显示命令本身(不包括输出结果)。@ 与 echo off 相似,但它是加在每个命令的最前面,只作用于当前命令,表示运行时不显示这一命令。

echo on 打开回显

注:echo [ˈekəʊ] 回响; 回声; 回音; 映现; 

2、注释 

rem 用来注释。rem全称remark(不确定),意为注释。3、输出信息 

echo 表示显示此命令后的字符,也可以用于将命令后的字符串输出到文件,如下面所示 echo abc to file >> targetfile.txt 上面的命令将把abc to fil写到targetfile.txt。

4、暂停 

pause 暂停执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续。

5、退出脚本 

exit /b code 加上/b选项表示退出当前批处理脚本(b是bat的缩写),而不是cmd.exe,相当于函数的return语句。code是个数字,表示执行结果。

6、调用其他批处理 

call 用来调用另一个批处理,就像函数调用(如果不用call而直接调用别的批处理文件,那么执行完成那个批处理文件后将无法返回当前文件后续的命令)

在被调用的批处理里,%[1-9] 表示传递进来的参数,参数是指调用者在文件名后加以空格分隔的字符串。 %0 表示批处理命令本身,其他参数字符串用%1到%9表示

批处理调用示例,不带参数

call for.bat firstparamvalue

7、输出文件内容 

type 用来输出文件内容,下面的命令输出subfor.bat文件的内容

type subfor.bat

8、定义变量 

set 用于定义变量。如set x=1

9、for 循环 

for循环遍历一个集合并执行指定命令:

FOR %%variable IN (set) DO command [command-parameters]

%%variable 指定一个单一字母可替换的参数。(用集合中取出的内容替换) (set) 指定一个或一组文件。可以使用通配符。(集合) command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 for 循环遍历集合 

subfor.bat

set items=a b c d
set letters=x y z
for %%a in (%items%) do (
    for %%b in (%letters%) do (
        call subfor.bat %%a %%b
    )
)

@echo off echo echo in subfor.bat :  %1 %2 for循环处理用通配符指定的一组文件 

for %%a in (*.txt) do (     rem 如果文件名有空格,必须使用""     rem type "%%a" )

for 循环处理文件内容 

rem 读取text.txt中的每一行作为参数%%a的值,调用循环体 for /F "delims=" %%a in (text.txt) do (     echo %%a ) 数值范围迭代 

格式: for /L %%i in (start, step, end) do cmd for /L %%i in (1, 1, 5) do echo %%i

for 循环命令的使用比较复杂,必须认真阅读使用说明。10、if语句 

if语句有三种格式:

判定参数是否符合期望值:if [not] "参数" == "字符串" 待执行的命令

if %1 == "abc 123"  (
    echo first var'value is :abc 123
) else (
    echo first var'value not excepted, it is :%1
)

判定文件是否存在:if [not] exist [路径\文件名] 待执行的命令

if exist "abc 123.txt"  (     echo content of file abc 123.txt is :     type "abc 123.txt" ) else (     echo abc 123.txt is exist . ) call subif.bat 3

根据errorlevel来执行命令

if errorlevel 待执行的命令

返回值必须按照从大到小的顺序排列 。     if errorlevel 3 (         echo errorlevel is three .     ) else if errorlevel 2 (         echo errorlevel is two .     ) else if errorlevel 1 (         echo errorlevel is one .     ) else (         echo execute success .     ) subif.bat @echo off if "%1" == "" (     rem 加上/b选项表示退出当前批处理,而不是退出cmd.exe     exit /b 0 ) else (     exit /b %1 )

11、goto 语句 

goto语句可以结合标签进行跳转。

标签就是用冒号加单词定义,单独放在一行如: :labelName

@echo off
if "%1" == "" (
    goto default
) else if "%1" == "helloworld" (
    goto helloworld
)
:default
echo you come to default .
goto end
:hellowrold
echo why you come to hello world ?
goto end
:end

一个输出系统命令帮助文档的脚本 

createHelp.bat 此脚本可以输出系统命令的帮助文档。

@echo off
set cmds=FIND SORT DISKPART
for /F "usebackq" %%i in (`help`) do (
    for %%a in (%cmds%) do (
        if not "%%a" == "%%i" (
            help "%%i" > help/%%i-help.txt
        )
    )
)

一个文件处理的示例 

以xml为例,增加字符串处理示例。config.xml文件:

< host>www.google.com.kh < port>8080 < /config> < /code>

dealContent.bat @echo off rem 把config.xml里的127.0.0.1替换成www.google.com.kh if exist config_tmp.xml del config_tmp.xml rem 使用for循环命令读取文件内容时,先从文件里读取一行,然后用默认的分隔符对行进行划分,再用得到的每一项调用循环体 rem 所以要处理的文件的行最好不要有空格或tab for /F %%i in (config.xml) do (     rem 如果项是xml的标签,要对转义     if %%i == ^127.0.0.1^^> (         rem >>前面是没有空格         echo ^www.google.com.kh^^>>> config_tmp.xml     ) else (         echo %%i>> config_tmp.xml     ) ) del config.xml ren config_tmp.xml config.xml

12、字符串处理 

主要是字符串截取、替换,通过替换删除指定字符串:字符串拼接 

语法:newStr=%str1%%str2%

set str1=abc set str2=123 set newStr=%str1%%str2% echo %newStr%字符串截取 

语法:%var:~x,y% (x,y∈Z)

说明:

当x为正数时表示从左到右第x+1位开始截取,当x为负数时表示从右到左第x位开始截取(右一位是-1)当省略x时采用默认值0;当y为正数时表示截取的长度,当y为负数时表示截取到从右到左的第y+1位,当省略y时采用默认值-1。

set src=abc  123 456 set trunk=%src:~2,4% echo %trunk% echo %src:~-5,4%字符串替换 

语法:%var:str1=str2%

说明:将字符串var中所有的str1替换为str2

echo %src:123=789%

替换功能也可以用于完成删除操作,只需要替换为空就行了。

删除字符串里的空格

set str5=abc 123 4 5 6 7 8 echo %str5: =%

删除字符串里的tab echo %str5: =%

13、特殊标记符: 

CR(0D)      命令行结束符 Space(20)   空格,常用的参数界定符 Tab(09)     不常用的参数界定符 +           命令文件连接符 *, ?        文件通配符 ""          字符串界定符^           转义符,其后面的特殊字符按原样输出 |           命令管道符 >>    文件重定向符 @           命令行回显屏蔽符 /           参数开关引导符 :           批处理标签引导符 %           批处理变量引导符

14、组合命令

 &

Usage: 第一条命令 & 第二条命令 [& 第三条命令...] 同时执行多条命令,而不管命令是否执行成功。

&&

Usage: 第一条命令 && 第二条命令 [&& 第三条命令...] 同时执行多条命令,当碰到执行出错的命令将不执行后面的命令,如果一直没有出错则一直执行完所以命令。

||

Usage: 第一条命令 || 第二条命令 [|| 第三条命令...] 同时执行多条命令,当碰到执行正确的命令将不执行后面的命令,如果一直没有出现正确执行的命令则一直执行完所以命令。

15、| 管道命令 

Usage: 第一条命令 | 第二条命令 [| 第三条命令...]

将第一条命令的结果作为第二条命令的参数来使用

sample: netstat -n -p tcp | find "49194"

16、重定向 

> , >>, 输出重定向命令 将一条命令或某个程序输出结果重定向到特定文件中。

> 与 >> 的区别在于:

> 会清除原有文件中的内容后写入指定文件, >> 只会追加内容到指定文件中,而不会改变其中的内容。

&, & 将一个句柄的输出写入到另一个句柄的输入中。             逻辑移位 & | ^              位运算 + += -= *= /= %= &= ^= |= = 赋值 ,                  表达式分隔符 如果使用逻辑(&|)或模(%)运算符,要用引号将表达式字符串引起来。表达式中的非数字字符串将被视为环境变量名 (运行对环境变量进行算术运算,而不需要使用%),其值将被转化成数字然后进行处理。如果指定的当前环境中 没有定义的环境变量名,将会分配零值。

19、提供交互界面(使用/p) 

set /p var=请输入变量的值: echo %var%

20、变量增强 

用 if [not] defined variable 可以判断变量是否有内容

21、环境变量 

如果没有任何参数,set命令将显示当前环境变量 当指定变量和字符串的值时,指定的变量值将被添加到该环境,而且该字符串与该变量关联。如果环境中已存在该变量,新的字符串值将替代旧的字符串值。 如果只为set命令指定一个变量和一个等号(没有字符串),则与该变量关联的字符串值将被消除(就像变量根本不存在一样)

22、延迟环境变量说明与启用 

延迟环境变量扩展的功能,即变量延迟解析功能。此功能默认是停用的,可以谈过cmd.exe /V 或 setlocal EnableDelayedExpansion来开启。使用延迟变量时需要用”!”括起。

23、动态环境变量 

变量                               说明 %CD%                           扩充为当前目录(current directory) %DATE%                      扩充为当前日期 %TIME%                       扩充为当前时间 %RANDOM%                扩充为0到32767的随机数 %ERRORLEVEL%        扩充为当前命令处理器命令扩展版本号 %CMDCMDLINE%        扩充为调用命令处理器的原始命令行,即控制台路径

24、变量增强(文件名路径处理) 

变量          说明 %~I            扩充%I为删除外围"引号(有就删) %~fI           扩充%I为一个完整的路径 %~dI           仅扩充%I为一个驱动器号 %~pI           仅扩充%I为一个路径 %~nI           仅扩充%I为一个文件名 %~xI           仅扩充%I为一个文件扩展名 %~sI           扩充%I为完整的短命路径 %~aI           扩充为文件的属性(arsh) %~$PATH:I      变量可以是其他的,如:windDir、programfiles等在环境变量PATH指定的路径总搜索文件,扩充%I为找到的第一个文件的完整路径;若未找到文件,则扩充%I为空。 组合扩展参数效果: %~dpI:     仅扩充%I为驱动器号和路径 %~nxI:     仅扩充%I为文件名加扩展名 %~fsI:     扩充%I为完整的短名路径(%~sI)

25、用批处理调用yuicompressor压缩js、css的脚本 

@echo off setlocal enabledelayedexpansion set pwd=%CD% set srcDir=%pwd%testcompress set dstDir=%pwd%testcompressres del /F /Q /S %dstDir%* for /R %srcDir% %%D in (*) do (     set pth=%%~dpD     set pth=!pth:%srcDir%=%dstDir%!     set fname=%%~nD     set ext=%%~xD     if not exist !pth!  mkdir !pth!     set dst=!pth!!fname!!ext!     if /I "!ext!" == ".css" (         java -jar yuicompressor-2.4.7buildyuicompressor-2.4.7.jar --charset utf8 --type css -o !dst! %%D     ) else if "!ext!" == ".js" (         java -jar yuicompressor-2.4.7buildyuicompressor-2.4.7.jar --charset utf8 --type js  -o !dst! %%D     )

)

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0501s