部分参考自:https://www.jianshu.com/p/02f6fe974cfd?utm_campaign
http
文章目录
0. ^折行
我们知道在C/C++中,只要不是在关键字中,或标识符中,或字符串常量中,你随时都可以回车换行而不会提示有语法错误。还能在可使用空格的地方使用反斜杠\
实现换行,其前后可以有也可以没有空格,其后除空格外不能有其他符号包括注释符号。如:
#include <iostream>
using namespace std;
main
()
{
int a = 10;
cout << "a="<<
a <<endl;
int b \
= \
20 ;
cout <<
"b=" << b
<<endl;
return 0;
}
在Linux
中使用\
来实现折行。在BAT
中使用^
来折行。如:
for %%i in (resource1 ^
resource2 ^
resource3 ^
resource4) ^
do echo %%i
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!
请按任意键继续. . .
- echo.换行
换行命令,即echo后加一个点
- 新建文件、增加文件内容
@echo off
rem 格式:echo 文件内容>文件路径
echo @echo off>test1.bat
::其中>>在文末添加,>覆盖原内容
echo echo this is test>>test1.bat
echo pause>>test1.bat
rem 显示该文件内容
type test1.bat
pause
设置标题,可以用title
@echo off
::title设置标题
title 我测试一下!
pause
2. 注释、暂停
rem
::
@echo off
echo Hello World!
rem 我是一个注释
:: 巧了我也是一个注释
PAUSE
结果:
Hello World!
请按任意键继续. . .
- pause
pause暂停,命令行中出现"请按任意键继续…"
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、start
在程序中调用子脚本,在当前程序中运行子脚本代码,子脚本执行完后继续执行本程序之后的代码
- 调用另一个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)
注意:执行start
时将开启一个新线程
来执行该程序,原程序不受影响继续执行
@echo off
::打开test.txt文件
start e:\test.txt
::启动jar包
start java -jar e:\demo.jar
pause
- call一个标签
@echo off
call :b
start notepad.exe
exit
:b
start b.txt
结果:
先打开b.txt,然后打开了记事本。
bat中调用python脚本,如何获得返回码
Windows shell将返回代码保存在ERRORLEVEL
变量中:
python somescript.py
echo %ERRORLEVEL%
在python脚本中,您可以通过调用exit()
以下命令退出脚本并设置返回值:
exit(15) #退出并返回15
在旧版本的python中,您可能首先必须exit()从sys模块导入该函数:
from sys import exit
exit(15)
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!
请按任意键继续. .