bat 文件多条命令的执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat 文件多条命令的执行相关的知识,希望对你有一定的参考价值。
我想要执行maven里的一些命令,但是中途要涉及到目录的切换,但是用了cd命令切换后,cd后面的命令就都没执行,不知道怎么回事,我想文件里面的内容全部执行,其中bat的文件内容如下:
mvn eclipse:eclipse>1.txt
cd ../uniframework
mvn eclipse:eclipse>2.txt
cd ../unibizibe
mvn eclipse:eclipse>3.txt
cd ../unilaputa
mvn eclipse:eclipse>4.txt
结果就产生了一个1.txt的文件第一条命令的输出信息到了1.txt里面,其他的都没有执行,也没有文件产生。另外写了
if exsit 1.txt
del 1.txt 好像会报错
mvn eclipse:eclipse>%~dp1.txt
cd ../uniframework
mvn eclipse:eclipse>%~dp2.txt
cd ../unibizibe
mvn eclipse:eclipse>%~dp3.txt
cd ../unilaputa
mvn eclipse:eclipse>%~dp4.txt
如果还不行的话,把第一行echo off删除,最后加pause
运行后看看提示信息,需要的话粘贴上来帮你分析分析。 参考技术A 楼上的代码是错误的
@echo off
set a=%~dp0
mvn eclipse:eclipse>%a%1.txt
cd ../uniframework
mvn eclipse:eclipse>%a%2.txt
cd ../unibizibe
mvn eclipse:eclipse>%a%3.txt
cd ../unilaputa
mvn eclipse:eclipse>%a%4.txt
这个如果不行的话,问题可能就出在cd命令上,
如果是这样,可以用下面这个
pushd 和cd用处差不多,但是pushd还可以指定盘符,更方便
@echo off
set a=%~dp0
mvn eclipse:eclipse>%a%1.txt
pushd ../uniframework
mvn eclipse:eclipse>%a%2.txt
pushd ../unibizibe
mvn eclipse:eclipse>%a%3.txt
pushd ../unilaputa
mvn eclipse:eclipse>%a%4.txt
Windows下批处理文件(.bat)的使用
批处理(Batch),就是进行批量的处理。英文译文BATCH,批处理文件后缀BAT就取的前三个字母,通常被觉得是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件是扩展名为.bat或.cmd的文本文件,包括一条或多条命令,由DOS或Windows系统内嵌的命令解释器来解释执行。批处理程序尽管是在命令行环境中执行,但不仅仅能使用命令行软件,不论什么当前系统下可执行的程序都能够放在批处理文件里执行。
批处理文件是无格式的文本文件。在命令提示符下键入批处理文件的名称,或者双击该批处理文件。系统就会调用cmd.exe依照该文件里各个命令出现的顺序来逐个执行它们。批处理文件是一种简单的程序,能够通过条件语句(if)和流程控制语句(goto)来控制命令执行的流程。在批处理中也能够使用循环语句(for)来循环执行一条命令。
每一个编写好的批处理文件都相当于一个DOS的外部命令,你能够把它所在的文件夹放到你的DOS搜索路径(path)中来使得它能够在任何位置执行。
批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。不论什么在命令提示符下可使用的命令都可用在批处理程序中。
批处理文件的格式:每一行可视为一个命令,每一个命令里能够含多条子命令,从第一行開始执行,直到最后一行结束,它执行的平台是DOS。
批处理文件里全然能够使用非dos命令,甚至能够使用不具有可执行特性的普通数据性文件。
批处理经常使用命令:批处理命令是不区分大写和小写的
1. echo:显示此命令后的字符。
2. echo. :显示一个空行(相当于输入一个回车的结果)。
3. echo off:在此语句后全部执行的命令都不显示命令行本身。
4. @:@与echo off类似,但它是加在其他命令行的最前面,表示执行时不显示命令行本身;
5. call:调用还有一条批处理文件(假设直接调用别的批处理文件,执行完那条命令后将无法执行当前文件兴许命令)。
6. start:调用外部程序。全部的DOS命令和命令行程序都能够由start命令来调用。等外部程序完毕后才继续执行剩下的指令;
7. pause:执行此句会暂停,显示Pressany key to continue… 等待用户按随意键后继续;
8. rem:与::类似,表示此命令后的字符为解释行。不执行,仅仅是给自己今后查找用的;
9. %:表示參数。參数是指在执行批处理文件时在文件名称后加的字符串。变量能够从%0到%9。%0表示文件名称本身,字符串用%1到%9顺序表示。
10. if:将推断是否符合规定的条件,从而决定执行不同的命令。
11. for:循环命令,仅仅要条件符合,它将多次执行同一命令。
12. choice:在批处理程序中,通过显示提示信息并暂停批处理程序,用户能够从一组选项键中进行选择;
13. goto:跳转命令,程序指针跳转到指定的标签,从标签后的第一条命令開始继续执行批处理程序。
14. set:显示、设置或删除变量,批处理中的变量是不区分类型的。不须要像C语言中的变量那样还要区分int、float、char等;
15. cls:清屏。
16. ver:显示版本号
17. >、>>:都是输出重定向命令,就是把前面命令的输出写入到一个文件里;两者的差别是”>”会清除掉原有文件里的内容后把新的内容写入原文件。而”>>”仅仅会另起一行追加新的内容到原文件里,而不会修改当中的原有内容;
18. errorlevel:每一个命令执行结束。能够用这个命令行格式查看返回码,默认值为0,一般命令执行出错会设errorlevel为1;
以下是个简单的样例:autotest.bat
@echo off :: auto run unit test mkdir "E:/tmp/32" mkdir "E:/tmp/64" echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% echo. echo start auto test ... set exePath=E:/tmp/api_x64/bin if "%1"=="32" set exePath=E:/tmp/api_x86/bin if "%1"=="64" set exePath=E:/tmp/api_x64/bin :: echo %1 set srcImagePath=E:/tmp/testImages set dstImagePath=E:/tmp/%1 :: echo %dstImagePath% set txtOutput=%dstImagePath%/result.txt :: echo %txtOutput% echo A.exe >> %txtOutput% start /b /wait %exePath%/A.exe %srcImagePath%/cat.jpg %dstImagePath%/result_cat.jpg >> %txtOutput% echo A.exe %errorlevel% echo. echo B.exe >> %txtOutput% start /b /wait %exePath%/B.exe %srcImagePath%/dog.jpg 10 20 %dstImagePath%/result_dog.jpg >> %txtOutput% echo B.exe %errorlevel% echo. echo end auto test ...
參考文献:
以上是关于bat 文件多条命令的执行的主要内容,如果未能解决你的问题,请参考以下文章