做公众好号的网站吗,免费注册com的网站,初学者学做网站用什么软件,last login wordpress1. 打印变量 set a 123echo %a%2. if errorlevel 测试前一程序的返回状态。如果该程序的返回状态大与或等于所说明的值就执行所说明的DOS命令
if errorlevel 命令让批处理文件测试一程序的返回状态值#xff0c;然后根据测试结果作相应的进一步处理#xff0c;当MS-DOS遇到…
1. 打印变量 set a 123echo %a%2. if errorlevel 测试前一程序的返回状态。如果该程序的返回状态大与或等于所说明的值就执行所说明的DOS命令
if errorlevel 命令让批处理文件测试一程序的返回状态值然后根据测试结果作相应的进一步处理当MS-DOS遇到一条 IF errorlevel 命令时它就将前一条MS-DOS命令的返回状态值与在IF命令中所说的值想比较如果该程序的返回状态大于或等于IF命令所说明的值MS-DOS就执行 相应的命令如果返回状态值小于所说明的值MS-DOS就从批处理文件中的下一条命令继续执行如果用的是IF NOT ERRORLEVEL命令就正好相反
3. call有几种用法 1) 第一种用法也就是最常用的一种调用另一个批处理在被调用的批处理执行完后在执行call下面的命令。如
echo off
call a.bat
dir c:\
pause2) 调用一个命令如call ping 127.1这和直接ping 127.1看似是一样的但还是有区别的。主要用法就是call set在后面讲延迟环境变量的时候慢慢体会。3) 第三种用法调用一个应用程序call notepad.exe。call可以这么用但一般在调用应用程序的时候会使用start很少用call。4) 第四种用法调用本批处理中的一个标签。如echo off
call :no1
start notepad.exe
exit
:no1
start calc
ping /n 2 127.1nul在这里会先打开计算器然后打开记事本。在call标签的时候要加上“”。
这与goto有什么区别呢在看一个例子echo off
goto :no1
start notepad.exe
exit
:no1
start calc
ping /n 2 127.1nul这里只会打开计算器并不打开记事本。
因为goto :no1是转到标签:no1处运行运行完就退出而call是调用:no1运行完继续执行call下面的命令4. %cd%与%~dp0%cd%代表的是执行文件的当前目录强调bat是在哪里启动的
%~dp0代表的是bat文件所在的文件目录强调bat的文件位置 5. Bat 批处理之 for/f 详解含有/F的for
格式
FOR /F [options] %%i IN (file) DO command
FOR /F [options] %%i IN (string) DO command
FOR /F [options] %%i IN (command) DO command这个可能是最常用的也是最强的命令主要用来处理文件和一些命令的输出结果。
file代表一个或多个文件
string 代表字符串
command代表命令
[options] 可选对于FOR /F %%i IN (file) DO command
file为文件名按照官方的说法是for会依次将file中的文件打开并且在进行到下一个文件之前将每个文件读取到内存按照每一行分成一个一个的元素忽略空白的行看个例子。
假如文件a.txt中有如下内容
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
你想显示a.txt中的内容会用什么命令呢当然是typetype a.txt
for也可以完成同样的命令
for /f %%i in (a.txt) do echo %%i
还是先从括号执行因为含有参数/f,所以for会先打开a.txt然后读出a.txt里面的所有内容把它作为一个集合并且以每一行作为一个元素所以会产生这样的集合
{“第1行第1列 第1行第2列 第1行第3列” //第一个元素
“第2行第1列 第2行第2列 第2行第3列” //第二个元素
“第3行第1列 第3行第2列 第3行第3列”} //第三个元素
集合中只有3个元素同样用%%i依次代替每个元素然后执行do后面的命令。
具体过程
用%%i代替“第1行第1列 第1行第2列 第1行第3列”执行do后面的echo %%i显示“第1行第1列 第1行第2列 第1行第3列”
用%%i代替“第2行第1列 第2行第2列 第2行第3列”执行echo %%i显示“第2行第1列 第2行第2列 第2行第3列”
依次直到每个元素都代替完为止。
为了加强理解/f的作用请执行一下两个命令对比即可明白
for /f %%i in (a.txt) do echo %%i //这个会显示a.txt里面的内容因为/f的作用会读出a.txt中的内容。
for %%i in (a.txt) do echo %%i //而这个只会显示a.txt这个名字并不会读取其中的内容。
通过上面的学习我们发现for /f会默认以每一行来作为一个元素但是如果我们还想把每一行再分解更小的内容该怎么办呢不用担心for命令还为我们提供了更详细的参数使我们将每一行分为更小的元素成为可能。
它们就是delims和tokens
delims 用来告诉for每一行应该拿什么作为分隔符默认的分隔符是空格和tab键
比如还是上面的文件我们执行下面的命令
for /f delims %%i in (a.txt) do echo %%i
显示的结果是
第1行第1列
第2行第1列
第3行第1列
为什么是这样的呢。因为这里有了delims这个参数后面有一个空格意思是再将每个元素以空格分割默认是只取分割之后的第一个元素。
执行过程是
将第一个元素“第1行第1列 第1行第2列 第1行第3列”分成三个元素“第1行第1列” “第1行第2列” “第1行第3列”它默认只取第一个即“第1行第1列”然后执行do后面的命令依次类推。
但是这样还是有局限的如果我们想要每一行的第二列元素那又如何呢
这时候tokens跳出来说我能做到。
它的作用就是当你通过delims将每一行分为更小的元素时由它来控制要取哪一个或哪几个。
还是上面的例子执行如下命令
for /f tokens2 delims %%i in (a.txt) do echo %%i
执行结果
第1行第2列
第2行第2列
第3行第2列
如果要显示第三列那就换成tokens3。
同时tokens支持通配符*以及限定范围。
如果要显示第二列和第三列则换成tokens2,3或tokens2-3,如果还有更多的则为tokens2-10之类的。
此时的命令为
for /f tokens2,3 delims %%i in (a.txt) do echo %%i %%j
怎么多出一个%%j
这是因为你的tokens后面要取每一行的两列用%%i来替换第二列用%%j来替换第三列。
并且必须是按照英文字母顺序排列的%%j不能换成%%k因为i后面是j
执行结果为
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
对以通配符*就是把这一行全部或者这一行的剩余部分当作一个元素了。
比如
for /f tokens* delims %%i in (a.txt) do echo %%i
执行结果为
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。
再如
for /f tokens2,* delims %%i in (a.txt) do echo %%i %%j
执行结果为
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
用%%i代替第二列用%%j代替剩余的所有
最后还有skip合eol这俩个简单skip就是要忽略文件的前多少行而eol用来指定当一行以什么符号开始时就忽略它。
比如
for /f skip2 tokens* %%i in (a.txt) do echo %%i
结果为:
第3行第1列 第3行第2列 第3行第3列
用skip来告诉for跳过前两行。
如果不加tokens*的话执行结果为
第3行第1列
不知道怎么回事。
再如当a.txt内容变成
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
执行for /f eol. tokens* %%i in (a.txt) do echo %%i结果是
第3行第1列 第3行第2列 第3行第3列
用eol来告诉for忽略以“.”开头的行。
同样也必须加tokens*否则只会显示“第3行第1列” 6. PUSHD命令保存当前目录以供 POPD 命令使用然后改到指定的目录。
PUSHD [path | ..]
path 指定要成为当前目录的目录。
如果命令扩展被启用除了一般驱动器号和路径PUSHD
命令还接受网络路径。如果指定了网络路径PUSHD 将创建一个
指向指定网络资源的临时驱动器号然后再用刚定义的驱动器
号更改当前的驱动器和目录。可以从 Z: 往下分配临时驱动器
号使用找到的第一个没有用过的驱动器号。 7. POPD命令 更改到 PUSHD 命令存储的目录。
如果命令扩展被启用从推目录堆栈 POPD 驱动器时POPD
命令会删除 PUSHD 创建的临时驱动器号。
例如
pushd c:就是记录下c盘当你转去E:盘后用popd就可以转回c盘