建站指南shell批处理

bat文件常用语法学习

2017-11-11  本文已影响29人  早上起来闹钟又丢了

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 删除目录树时不要求确认。

上一篇下一篇

猜你喜欢

热点阅读