批处理 bat 常用命令【学习笔记二】

1、setlocal、endlocal 命令

SETLOCAL
[ENABLEEXTENSIONS | DISABLEEXTENSIONS] [ENABLEDELAYEDEXPANSION | DISABLEDELAYEDEXPANSION]
用法1:变量只在 setlocal 到 endlocal 范围内有效

@echo off

setlocal
set var=hahahah
echo %var%
endlocal

echo ========================
echo %var%

结果:

E:\workspaceForBat>11.setlocal.bat
hahahah
========================
ECHO 处于关闭状态。

用法2:如果变量支持拓展的话,setlocal disableextensions 会禁止变量的拓展写法

@echo off

for %%i in (*.txt) do echo %%i    %%~ti    %%~zi

echo =================

setlocal disableextensions
for %%i in (*.txt) do echo %%i    %%~ti    %%~zi
setlocal enableextensions

输出:

E:\workspaceForBat>11.setlocal.bat
1.txt    2018-12-17 20:51    0
=================
1.txt    %~ti    %~zi

用法3:禁止/启用变量延迟,该用法常常用在一组组合命令中,例如下面

@echo off

setlocal disabledelayedexpansion 
for /l %%i in (1,1,5) do (
  set var=%%i
  echo %var%
)
setlocal enabledelayedexpansion

echo =================

setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
  set var=%%i
  echo %var%
)
setlocal disabledelayedexpansion 

命令行解释器会把

for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)

看做一个整体,然而变量在命令行中是一组一组(一行一行)解释的,这个时候 set var=%%i,变量 i 还没有值,所以会出现取不到值的情况,禁用变量延迟就能解决这个问题了

2、shift 命令

SHIFT [/n] ,看下面的 demo 就会明白了,/n 参数有值的话取值范围是 0-8

@echo off
rem 12 13 15 16 18
echo %1   

rem shift 执行一下,所有参数往前移动一位,移动后是 13 15 16 18
shift     

rem 13 15 16 18
echo %4   

shift     

rem 15 16 18
echo %1   

rem 把第 2 个参数干掉,其他的往前移
shift /2

rem 15 16 18
echo %2

运行输出:

E:\workspaceForBat>12.shift.bat 12 13 15 16 18
12
18
15
18
3、type 命令

TYPE [drive:][path]filename 输出文件的所有内容

4、find 命令

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “string” [[drive:][path]filename[ …]]

参数解释
/V显示所有未包含指定字符串的行
/C仅显示包含字符串的行数
/N显示行号
/I搜索字符串时忽略大小写
/OFF[LINE]不要跳过具有脱机属性集的文件
“string”指定要搜索的文本字符串
[drive:][path]filename指定要搜索的文件
测试:
@echo off
echo ==================普通查找
find "FG" 1.txt

echo ==================显示所有未包含指定字符串的行
find /v "FG" 1.txt

echo ==================仅显示包含字符串的行数
find /c "FG" 1.txt

echo ==================显示行号
find /n "FG" 1.txt

echo ==================搜索字符串时忽略大小写
find /i "FG" 1.txt

echo ==================不要跳过具有脱机属性集的文件
find /OFF "FG" 1.txt

输出:

E:\workspaceForBat>13.find.bat
==================普通查找
---------- 1.TXT
ABCDEFG

==================显示所有未包含指定字符串的行
---------- 1.TXT
abcdefg

==================仅显示包含字符串的行数
---------- 1.TXT: 1

==================显示行号
---------- 1.TXT
[2]ABCDEFG

==================搜索字符串时忽略大小写
---------- 1.TXT
abcdefg
ABCDEFG

==================不要跳过具有脱机属性集的文件
---------- 1.TXT
ABCDEFG
5、findstr 命令

FINDSTR
[/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ …]]
参数说明不写了,自己用 cmd 执行 help findstr 看吧,写出来也没意义

==最普通的方式,一整行搜索
D:\workspaceForBat>findstr "333" 1.txt
;222 22 5555 333 22 22 22 22 22
2 22 444 333
333 2 22 444
测试文本 这是测试文本 字符 啊咧 23333


==在一行的开始配对模式,如果开头没有匹配到就忽略该行
D:\workspaceForBat>findstr /b "333" 1.txt
333 2 22 444


==在一行的结尾配对模式,如果结尾没有匹配到就忽略该行
D:\workspaceForBat>findstr /e "333" 1.txt
2 22 444 333
测试文本 这是测试文本 字符 啊咧 23333

==按字使用搜索字符串,按照每个符号精确匹配,正则等模糊匹配的符号将会禁止
D:\workspaceForBat>findstr /l "*333" 1.txt


==最普通的方式,一整行搜索
D:\workspaceForBat>findstr "111*" 1.txt
7777777 111111 111111 111111 111111 111111 666666
11


==将搜索字符串作为正则表达式使用
D:\workspaceForBat>findstr /r "111*" 1.txt
7777777 111111 111111 111111 111111 111111 666666
11


==在当前目录和所有子目录中搜索匹配的文件 1.txt 并在所有匹配的文件中搜索 111*
D:\workspaceForBat>findstr /s "111*" 1.txt
1.txt:7777777 111111 111111 111111 111111 111111 666666
1.txt:11
文 件 夹 1\1.txt:111111 111111 111111 111111 111111


==完全匹配的查找
D:\workspaceForBat>findstr /x "11" 1.txt
11


==完全匹配的查找
D:\workspaceForBat>findstr /x "1@1" 1.txt
1@1


==完全匹配的查找
D:\workspaceForBat>findstr /x "asdf" 1.txt
asdf


==完全匹配的查找,不知为何有空格就找不到
D:\workspaceForBat>findstr /x "jfjfjf jfjfjf" 1.txt


==完全匹配的查找,中文也不行
D:\workspaceForBat>findstr /x "这是一串很长的字符串" 1.txt
这是一串很长的字符串


==普通查找
D:\workspaceForBat>findstr "符串" 1.txt
这是一串很长的字符串


==如果文件含有匹配项,只打印其文件名
D:\workspaceForBat>findstr /m "11" 1.txt
1.txt


==从指定文件读文件列表
D:\workspaceForBat>findstr /f:1.txt "符串"
FINDSTR: 无法打开 7777777 111111 111111 111111 111111 111111 666666
FINDSTR: 无法打开 ;222 22 5555 333 22 22 22 22 22
FINDSTR: 无法打开 11
FINDSTR: 无法打开 1@1
FINDSTR: 无法打开 asdf
FINDSTR: 无法打开 jfjfjf jfjfjf
FINDSTR: 无法打开 2 22 444 333
FINDSTR: 无法打开 333 2 22 444
FINDSTR: 无法打开 测试文本 这是测试文本 字符 啊咧 23333
FINDSTR: 无法打开 这是一串很长的字符串
1.txt:这是一串很长的字符串


==从3这个文件中读取出来要搜索的文字(以行分开),然后在 2.txt 中搜索
D:\workspaceForBat>findstr /g:3 "2.txt"
FOR /F "skip=1 eol=; tokens=2,3,6-9 delims= " %%i in (1.txt) do @echo %%i %%j %%k
33333
aaaaaa  aaaaaa
aaaaaaaaa

文件 1.txt 内容

7777777 111111 111111 111111 111111 111111 666666
;222 22 5555 333 22 22 22 22 22 
11
1@1
asdf
jfjfjf jfjfjf
2 22 444 333
333 2 22 444
测试文本 这是测试文本 字符 啊咧 23333
这是一串很长的字符串
1.txt

文件 3 内容:

aaaa
FOR
33

文件 2.txt 内容

这是2.txt的内容  这是2.txt的内容  这是2.txt的内容
这是2.txt的内容  这是2.txt的内容   这是2.txt的内容  这是2.txt的内容

@echo off
FOR /F "skip=1 eol=; tokens=2,3,6-9 delims= " %%i in (1.txt) do @echo %%i %%j %%k

for %%a in (*.txt) do echo %%~ta

4.txt

33333

aaaaaa  aaaaaa

aaaaaaaaa

其他命令用法类似,貌似没什么特别的了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值