bat文件常用语法学习

1.echo命令

①echo 用于显示此命令后的字符。

echo Hello World!

PAUSE

注:pause是用来暂停的,直到用户输入任意键关闭。

结果:

E:\>echo Hello World!

Hello World!

E:\>PAUSE

请按任意键继续. . .


②echo off 表示此命令后的所有命令都不显示命令本身。

③@ 与echo off相似,但只是不显示当行的命令。

@echo off 是经常组合放在开头的。

@echo off

echo Hello World!

PAUSE

结果:

Hello World!

请按任意键继续. . .

2.注释

①rem

②::

@echo off

echo Hello World!

rem 我是一个注释

:: 巧了我也是一个注释

PAUSE

结果:

Hello World!

请按任意键继续. . .

3.参数标识符  %

①代表参数

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

@echo off

type %1

type %2

pause

使用cmd,进入到对应目录下:

E:\>test a.txt b.txt

我是a我是b请按任意键继续. . .

注:test是我们写入内容的bat文件,a.txt和b.txt分别是当前目录下的两个txt,内容分别为“我是a”和“我是b”。

或者也可以新创建一个bat文件调用刚才写的bat文件:

@echo off

call test a.txt b.txt

pause

②非for语句引用变量

@echo off

set a=HelloWorld!

echo %a%

pause

注意:“set a=HelloWorld!”这句,由于编程习惯,原意在等号两边加空格,但是这样的话就会出现“ECHO处于关闭状态”的错误了。

结果:

HelloWorld!

请按任意键继续. . .

③for语句要用“%%”

@echo off

for %%i in (1 2 3 4 5) do echo %%i

pause

结果:

1

2

3

4

5

请按任意键继续. . .

4. call

①调用另一个bat文件

@echo off

echo 调用另一个bat文件:

call another

pause

another.bat:

@echo off

echo 我是另一个bat文件

pause

结果:

调用另一个bat文件:

我是另一个bat文件

请按任意键继续. . .

②带参数的

test.bat:

@echo off

echo %0 %1

pause

another.bat:

@echo off

call test.bat 我是参数

pause

运行another.bat,结果:

test.bat 我是参数

请按任意键继续. . .

③call一个应用程序(但一般都用start)

④call一个标签

@echo off

call :b

start notepad.exe

exit

:b

start b.txt

结果:

先打开b.txt,然后打开了记事本。

5. if

用于判断,类似C语言的if

①字符串判断

if [not] "参数" == "字符串" 待执行的命令

another.bat:

@echo off

call test.bat a

pause

test.bat

@echo off

if not "%1"=="a" (echo 参数不是a)else (echo 参数是a)

pause

注意:判断结束后,要和“(”之间留一个空格,“else”也要和“(”之间留一个空格。

运行结果:

参数是a

请按任意键继续. . .

②判断数值相等

@echo off

if 1 equ 2 (echo 1等于2) else (echo 1不等于2)

pause

结果:

1不等于2

请按任意键继续. . .

注:大于不能使用符号“>”,而应该使用GTR。

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

③文件判断

@echo off

if exist e:\b.txt (echo e盘下有b.txt) else (echo e盘下没有b.txt)

pause

结果:

e盘下有b.txt

请按任意键继续. . .

④判断某个变量是否已经被赋值,用 if defined str 语句

@echo off

set str=HelloWorld!

if defined str (echo 变量的值为%str%) else (echo 变量没有被赋值)

pause

结果:

变量的值为HelloWorld!

请按任意键继续. . .

⑤ if结合errorlevel使用

@echo off

xcopy e:\b.txt f:\

if errorlevel 1 echo 文件拷贝失败

if errorlevel 0 echo 文件拷贝成功

pause

注:返回值必须按照从大到小的顺序排列。

结果:

E:\b.txt

复制了 1 个文件

文件拷贝成功

请按任意键继续. . .

几个常用命令的返回值及其代表的意义:

diskcomp

0 盘比较相同

1 盘比较不同

2 用户通过ctrl-c中止比较操作

3 由于致命的错误使比较操作中止

4 预置错误中止比较

diskcopy

0 盘拷贝操作成功

1 非致命盘读/写错

2 用户通过ctrl-c结束拷贝操作

3 因致命的处理错误使盘拷贝中止

4 预置错误阻止拷贝操作

format

0 格式化成功

3 用户通过ctrl-c中止格式化处理

4 因致命的处理错误使格式化中止

5 在提示"proceed with format(y/n)?"下用户键入n结束

xcopy

0 成功拷贝文件

1 未找到拷贝文件

2 用户通过ctrl-c中止拷贝操作

4 预置错误阻止文件拷贝操作

5 拷贝过程中写盘错误

6. goto

goto是跳到指定的标签位置

@echo off

goto end

echo 这里是结束标签之前的显示

:end

echo 这里是结束标签

pause

结果:

这里是结束标签

请按任意键继续. . .

7. for

(1) /f

①/f 解析文本读取字符串

@echo off

for /f %%i in (歌曲列表.txt) do echo %%i

pause>nul

结果:

序号、歌手名-歌曲名.后缀名

1、徐秉龙/桃十五-空心.MP3

2、是阿涵啊-不断电.mp3

3、河豚-二号位.MP3

4、原·味-褐瞳.lrc

5、徐薇-空心.mp3

可以显示文件的内容。如果去掉“/f”,并且把“歌曲列表.txt”改成“*.txt”,就可以搜索当前目录下txt文件并显示文件名:

@echo off

for %%i in (*.txt) do echo %%i

pause>nul

结果:

b.txt

歌曲列表.txt

② delims

做分隔符使用,只会保留分隔符之前的内容。

@echo off

for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i

pause>nul

结果:

序号、歌手名

1、徐秉龙/桃十五

2、是阿涵啊

3、河豚

4、原·味

5、徐薇

注:若要填入多个分隔符,则写在等号后就好,中间无需加空格

③ tokens

选定分割之后的内容。

@echo off

for /f "tokens=1,2 delims=、." %%i in (歌曲列表.txt) do echo %%i %%j

pause>nul

结果:

序号 歌手名-歌曲名

1 徐秉龙/桃十五-空心

2 是阿涵啊-不断电

3 河豚-二号位

4 原·味-褐瞳

5 徐薇-空心

说明:

tokens=有时表示提取全部。

tokens=m表示提取第m列。

tokens=m,n表示提取第m列和第n列。

tokens=m-n表示提取第m列至第n列。

Tokens=*表示删除每行前面的空格。忽略行首的所有空格。

tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。

tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。

“%%i %%j”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。

(2) /L

/L参数是以增量形式从开始到结束的一个数字序列的迭代数值范围。

@echo off

for /l %%i in (1,1,5) do @echo %%i

pause

结果:

1

2

3

4

5

请按任意键继续. . .



8. rd

删除文件夹

① rd d:\test

只能删除空的文件夹,否则会提示:目录不是空的。

② rd /s test

能达到删除文件夹的作用,但是会询问是否确认(Y/N)?

③ rd /q /s test

安静模式,带 /S 删除目录树时不要求确认。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,665评论 0 11
  • 批处理符号简介 回显屏蔽 @ 重定向1 >与>> 重定向2 < 管道符号 | 转义符 ^ 逻辑命令符包括:&、&&...
    wyude阅读 2,953评论 2 5
  • 部分内容转载自搜狗百科 cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上阅读 2,379评论 0 24
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 5,115评论 0 11
  • 去年,心血来潮买了一套练字帖,里面有配套笔和那个红色的,我一直都不知道这个红色的是干嘛用的,还嘀咕这个笔握着不舒服...
    隽妈杂记阅读 376评论 3 2