概述
下面的bat脚本是 g++编译当前文件夹中的*.cpp文件
@echo off
setlocal enabledelayedexpansion %扩展本地环境变量延迟%
for %%i in (*.cpp) do (
set var=%%i
echo compiling %%i ~~~~
g++ %%i -o !var:~0,-4! -std=c++11
)
------------------------------------------------------------------
dos的用法
在命令行中查看帮助 command /? 例如: for /? , set /? , mkdir /?
(1)自定义变量
@echo off
set myname=okbase.net
set myage=3
echo %myname% is about %myage% years old
pause
结果:alice is about 3 years old
关键是set命令的使用,set var=变量值,var是变量的名称,当需要在其它地方使用这个变量时,需要用两个%括起来,如%var%
(2)变量的算术运算
在进行算术运算时,我们需要给set命令加上 /a 参数,后面再跟表达式。
例如:
set var=100
set /a var=200+10
set /a var+=15
echo %var%
运行结果为225
这里的var+=15 相当于 var=%var%+15
(3)变量的逻辑运算与取余运算
需要将运算符用双引号表示出来:
set /a var=3 "&"7
set /a var=2 "^"6
set /a var=2 "<<"3
set /a var=256 ">>"2
set /a var=83 "%"10
批处理支持的运算符按优先权顺序:
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
& - 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 复合赋值运算符
&= ^= |= <<= >>= - 复合赋值运算符
, - 表达式分隔符
表达式分隔符的作用是在一行中写多个表达式,例如:
(4)变量的高级特性:变量延时
例1:
@echo off
set a=4
set a=5 & echo %a%
pause
结果:4
解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在读取某行命令时,如果其中有变量,则变量值应该取 上一行的值。所以在读取命令“set a=5 & echo %a%”时,dos将其预处理为“set a=5 & echo 4”,然后执行。而其中的a=5所做的数值变更,只能在下一命令行才能体现了。
为了能够及时感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而是边执行边赋值。
例2:
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是 "setlocal enabledelayedexpansion "
并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
两个%%引起来的部分作为注释,变量也用%%引起来,若echo %var%,其中var没有定义,则输出“ECHO 处于关闭状态。”若启用了变量延时,则 !! 与%% 等价,没有启用延时,则 !! 无效
@echo off
setlocal enabledelayedexpansion
set str=123456789
echo 第一个字符为:%str:~0,1%
echo 头两个字符为:%str:~0,2%
echo 头5个字符为:%str:~0,5%
echo 去掉最后一个字符后的字符串为:%str:~0,-1%
echo 去掉最后3个字符后的字符串为:%str:~0,-3%
echo 第4个字符为:%str:~3,1%
echo 第4个及其之后的3个字符为:%str:~3,4%
echo 最后一个字符为:%str:~-1%
echo 最后一个字符为:%str:~-1,1%
echo 倒数第4个字符为:%str:~-4,1%
echo 倒数第4个及其之后的2个字符为:%str:~-4,3%
echo 倒数第4个及其之后的字符为:%str:~-4%
%注释若启用了变量延时,用叹号引起来变量与用百分号一起来等价 %
echo 倒数第4个及其之后的2个字符为:!str:~-4,3!
echo 倒数第4个及其之后的字符为:!str:~-4!
pause
(5)for语句的用法 (dos自带的帮助文档:for /?)
格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令
注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r
1,无参数
格式:FOR %%variable IN (set) DO command
打印当前目录所有的 .txt 文件: for %%i in (*.txt) do echo %%i
2,参数 “/d” (显示当前目录下的目录名字)
格式:FOR /D %variable IN (set) DO command [command-parameters]
- for /d %%i in (c:/*) do echo %%i --显示c盘根目录下的所有目录
- for /d %%i in (???) do echo %%i --显示当前目录下名字只有1-3个字母的目录
3,参数 “/r” (r:递归搜索,搜索指定路径及所有子目录中与set相符合的所有文件)
格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
例:for /r d:/ %%i in (*.exe) do echo %%i --把D盘根目录,和每个目录的子目录下面全部的exe文件都列出来
4,参数 “/l” (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
- 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
- 该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step
- 示例:
- for /l %%i in (1,1,5) do @echo %%i --输出1 2 3 4 5
- for /l %%i in (1,2,10) do @echo %%i --输出1,3,5,7,9
- for /l %%i in (100,-20,1) do @echo %%i --输出100,80,60,40,20
- for /l %%i in (1,1,5) do start cmd --打开5个CMD窗口
- for /l %%i in (1,1,5) do md %%i --建立从1~5共5个文件夹
- for /l %%i in (1,1,5) do rd /q %%i --删除从1~5共5个文件夹
最后
以上就是愉快月亮为你收集整理的dos运行g++编译当前文件夹中的*.cpp文件(含dos用法)的全部内容,希望文章能够帮你解决dos运行g++编译当前文件夹中的*.cpp文件(含dos用法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复