dos 命令

这里写目录标题

#dos的特殊符号
1、@: 执行本行命令时,命令内容在cmd中不显示
echo off:关闭所有命令显示
在这里插入图片描述
在这里插入图片描述
2、%: 批处理变量引导符

%a      FOR循环时用,CMD直接执行使用
%%a     FOR循环时用,BAT脚本中使用
%a%     调用普通变量
!a!     普通变量

3、>、<、>>、<< 重定向符号

1>       重定向符号,且覆盖文件
echo 123> 1.txt        # 默认多一行空行
2>>      重定向符号,追加文件内容
echo 456>> 1.txt       # 默认多一行空行
3<       重定向符号,反向输入命令
echo 2005-05-01> temp.txt 
date < temp.txt         #这样就可以不等待输入直接修改当前日期
4>&,     将一个句柄的输出写入到另一个句柄的输入中。 
5<&,     刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中
6)1>nul    表示禁止输出正确的信息 
  2>nul    表示禁止输出错误信息。
句柄 0:标准输入 stdin,键盘输入 
句柄 1:标准输出 stdout,输出到命令提示符窗口(console,代码为 CON) 
句柄 2:标准错误 stderr,输出到命令提示符窗口(console,代码为 CON) 
其中的 stdin 可被<重定向,stdout 可被>>>重定向

在这里插入图片描述
在这里插入图片描述
4、管道符号: |、||
| :将第一条命令的结果作为第二条命令的参数来使用
格式: 第一条命令 | 第二条命令 [ | 第三条命令… ]
|| :仅当一条命令失败后才执行第二条命令
格式:第一条命令 || 第二条命令 [ || 第三条命令… ]
查看d盘目录的txt文件:dir d:\|find “txt”
在这里插入图片描述
5、组合命令: &、&&
&:按顺序执行,前一个命令失败了,不影响后面命令执行
语法:第一条命令 & 第二条命令 [ & 第三条命令… ]
&&:按顺序执行,前一个命令失败了,后面命令不会执行
语法:第一条命令 && 第二条命令 [ && 第三条命令… ]
在这里插入图片描述
6、命令执行: 分号;
命令相同时,可以将不同目标用;分隔
如执行过程中发生错误,返回错误报告,但程序仍会执行
dir d: ; dir e:
在这里插入图片描述
7、转义字符: ^
echo 123^> 1.txt
在这里插入图片描述
8、字符串界定符: 双引号"
在这里插入图片描述
9、逗号,
逗号相当于空格
dir,d:
在这里插入图片描述
10、括号()
小括号在批处理编程中有特殊的作用,左右括号必须成对使用
括号中可以包括多行命令,这些命令将被 看成一个整体,视为一条命令行

echo 1 & echo 2 & echo 3 
等同于
( 
echo 1 
echo 2 
echo 3 
) 

11、设备文件名:
nul:空设备,不显示结果(显示器上)
prn:打印机
con:显示器
在这里插入图片描述
12、编码: chcp
chcp 65001 #改变代码页,UTF-8的代码页为65001、GBK–936
13、批处理中可能会见到的其它特殊标记符
CR(0D) 命令行结束符
Escape(1B) ANSI 转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符

  • COPY 命令文件连接符
  • ? 文件通配符
    / 参数开关引导符
    : 批处理标签引导符

for /f

       提取文本信息,则是for /f的拿手好戏:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样,for /f 都会想方设法帮你办到,因为,for /f 就是被设计成专门用于解析文本的
1、普通用法:
两个小案例:把test.bat、test.txt放在同目录
test.txt:

无论:是文件、窗体、还是控件,在所有的非机器语言看来。
无外乎都:是形如"c:test.txt""CWnd"之类的文本信息
都只有:转化为具有一定格式的文本信息,方可被代码识别、操控

test.bat:

@echo off
chcp 65001               #改变代码页,UTF-8的代码页为65001、GBK--936
for /f  %%i in (test.txt) do echo %%i       # 打印text.txt的内容
pause

在这里插入图片描述
test2.bat:

@echo off
chcp 65001
for /f %%i in (test.txt) do echo %%i&pause   # 一行行打印,每次需要点击确认
pause

在这里插入图片描述
2、切分字符串的利器:“delims=[符号列表]”
以逗号作为被处理的字符串的分隔符号,换句话说 只显示每行的逗号前的内容

@echo off
chcp 65001
for /f "delims=, " %%i in (test.txt) do echo %%i  # 默认是空格或回车
pause

在这里插入图片描述
delims指定的是符号列表,所以可以指定多个分隔符号。

  • 多个符号挨着写
  • 每行存在多个指定符号的,分隔成多份,但for /f只会提取第一份的内容
  • 不存在指定符号的,不进行分割
@echo off
for /f "delims=、," %%i in (test.txt) do echo %%i
pause

在这里插入图片描述
3、定点提取: tokens=
for /f 只能提取到第一份内容,有局限性,如果要提取其他份的内容呢,那么就需要用到tokens

  • 一般跟数字,选择第几份的内容
  • 选取多份内容时,数字之间用逗号相连

test2.txt

人生为棋,我愿为卒,行动虽慢,可谁又曾看见我后退一步

获取第2份内容:

@echo off
chcp 65001
for /f "delims=, tokens=2" %%i in (test2.txt) do echo %%i
pause

在这里插入图片描述
获取多份内容试试:

@echo off
chcp 65001
for /f "delims=, tokens=2,3" %%i in (test2.txt) do echo %%i
pause

结果如何呢,还是只有第2份内容,原因是选择第2、3份的内容,但却没有打印出来
只需要在%%i 后面再加一个变量即可,如%%j
如果需要更多个份数呢?当然是在后面添加更多的对应的变量

@echo off
chcp 65001
for /f "delims=, tokens=2,3" %%i in (test2.txt) do echo %%i %%j
pause

在这里插入图片描述
数字还可以用-进行多个选择

@echo off
chcp 65001
for /f "delims=, tokens=1,3-4" %%i in (test2.txt) do echo %%i %%j %%k %%l
pause

在这里插入图片描述
也可以用*表示后面的所有份数
从结果可以看出,*号只使用1个变量(有两个变量未使用,打印了出来)

@echo off
chcp 65001
for /f "delims=, tokens=2,*" %%i in (test2.txt) do echo %%i %%j %%k %%l
pause

在这里插入图片描述
4、跳过无关内容: skip=n(行数)
全文并不是都需要的,为了提高文本处理的效率,for /f 允许跳过无用行
从N+1行开始处理
N是正整数
还是拿test.txt举例

@echo off
chcp 65001
for /f "skip=2" %%i in (test.txt) do echo %%i %%j %%k %%l
pause

在这里插入图片描述
5、忽略以指定字符打头的行: eol=

  • 指定忽略以什么开头的内容,默认是空格或回车
  • eol与delims冲突时,以eol为准
  • 行中出现指定符号,不受影响
    这次使用test3.txt
君不见黄河之水天上来,奔流到海不复回
君不见高堂明镜悲白发,朝如青丝暮成雪
;人生得意须尽欢,莫使金樽空对月
天生我材必有用;千金散尽还复来
烹羊宰牛且为乐;会须一饮三百杯

1)默认空格或回车(没实现)
即使没有这个参数,默认也是去空格和空行的

2)eol与delims冲突时,以eol为准

@echo off
chcp 65001
for /f "delims=, eol=;" %%i in (test3.txt) do echo %%i %%j %%k %%l
pause

在这里插入图片描述

3)开头是;号的被忽略了,而行中有;号的不受影响

@echo off
chcp 65001
for /f "eol=;" %%i in (test3.txt) do echo %%i %%j %%k %%l
pause

在这里插入图片描述
6、for /f 格式句式

1、for /f %%i in (文件名) do (……)
2、for /f %%i in ('命令语句') do (……)
3、for /f %%i in ("字符串") do (……)
4、for /f "usebackq" %%i in ("文件名") do (……)
5、for /f "usebackq" %%i in (`命令语句`) do (……)
6、for /f "usebackq" %%i in ('字符串') do (……)

1)第一种很好理解,就是上述举例子:for /f %%i in (test.txt) do echo %%i;
2)读取(遍历)的内容是执行命令的结果时,必须用单引号包裹
for /f %%i in (‘dir /a-d /b *.txt’) do echo %%i
3)字符串用双引号
for /f “delims=. tokens=1-3” %%i in (“www.baidu.com”) do echo %%i-%%j-%%k
在这里插入图片描述
4)当使用usebackq时,符号发生变化

结果赋值给变量

@echo off
for /f %%i in ('echo "helloworld"') do set var=%%i
echo %var%
pause
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值