Windows命令⾏脚本编写upd
⽼掉⽛的玩意,powershell是windows下更好的脚本语⾔
每⼀个命令实际上是某个系统⽂件夹下的 .exe ⽂件
利⽤PATH环境变量,可以配置这些命令,配置之后即可在cmd调⽤
说明
⽤来提⾼⼯作效率
cmd⾥⾯help findstr啥⽤法都出来了
常⽤的命令
:: 我是注释
exitst 检查⽂件,符号是否存在,注意空字符串判断不存在
defined 检查变量是否定义
find、findstr ⽂本搜索命令
cd cd不能直接切换到某个位置,⽤pushd即可
pushd
popd
exit 退出脚本
more 显⽰模式
sort
call 本窗⼝调⽤
start 新开窗⼝调⽤
md mkdir 新建⽂件夹
echo=& 新建⽂件
echo. 输出换⾏
dir 显⽰所有⽂件
dir /b 纯⽂件名
2.txt 改名字
for %%i in (...) do ( //空格必须打,否则解析失败
...
)
系统常识
批处理对命令格式很敏感,⽐如多⼀个空格少⼀个空格都影响很⼤
当你学习的时候,发现⼀模⼀样的批处理命令运⾏不了,⼀般就是细节不会,⽐如
in(*.*)不合法in (*.*)合法
延迟扩展
执⾏完⼀条语句,才对变量重新赋值
@echo off
set a=4
set a=5&echo %a%    // 这⾥输出 4,因为运⾏到这条语句时,a采⽤上⼀条语句运⾏完的值
pause
关闭延迟
@echo off
setlocal enabledelayedexpansion  // 写上该语句
set a=4
set a=5&echo !a!                  // 同时,采⽤ !a! ,%a%保持延迟
pause
强化实践,输出1 2 3 4 5
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!)
pause
@echo off            // 这样也可以,因为for中的i是不延迟的
for /l %%i in (1,1,5) do (
echo %%i)
pause
关系运算符,不区分⼤⼩写
EQU - 等于
NEQ - 不等于
LSS - ⼩于
LEQ - ⼩于或等于
GTR - ⼤于
GEQ - ⼤于或等于
%0 代表批处理⽂件的路径
%1 ~ %9 传递进来的1-9个参数 // call指令可以调⽤别的批处理并传递参数
echo.  换⾏
echo %PATH% 输出环境变量
echo %DATE%
echo %RANDOM% 输出⼀个随机数
echo %TIME%
echo %num%
set /p num=input a number:
ERRORLEVEL 调⽤完命令后可以通过ERRORLEVEL拿到返回值、错误码
REM 我是注释
con 屏幕
nul 空设备
prn 打印机
>> 产⽣的内容将追加进⽂件中
> 则将原⽂件内容覆盖
< 输⼊重定向
<<;代表当前标准输⼊来⾃命令⾏的⼀对分隔号的中间内容
&  顺序执⾏多条命令,⽽不管命令是否执⾏成功
&& 顺序执⾏多条命令,当碰到执⾏出错的命令后将不执⾏后⾯的命令
|| 顺序执⾏多条命令,当碰到执⾏正确的命令后将不执⾏后⾯的命令(即:只有前⾯命令执⾏错误时才执⾏后⾯命令)|  管道命令前⼀个命令的执⾏结果输出到后⼀个命令如:help|more
字符串操作
正则表达式
.        通配符: 任何字符
*        重复: 以前字符或类出现零或零以上次数
^        ⾏位置: ⾏的开始
$        ⾏位置: ⾏的终点
[class]  字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y]    范围: 在指定范围内的任何字符
\x      Escape: 元字符 x 的⽂字⽤法
\<xyz    字位置: 字的开始
xyz\>    字位置: 字的结束
基本的字符串操作
截取
@echo off
/
/ echo %str:~pos,len%
set str=abcdefg123456789
echo %str%
echo %str:~3,1%
echo %str:~,-5%
pause
字符串替换
@echo off
set str=hello,mzb,mzb,aaaaa
echo %str%
echo %str:aa=bb%
字符串截取指令pause
拼接
@echo off
set str=hello
set mzb=mzb
echo %str%,%mzb%
pause
其他命令
findstr
strlen  莫得库函数,得⾃⼰实现
@echo off
set /p str=Input:
if not defined str goto :eof
set num=0
:label
set /a num+=1
set str=%str:~,-1%
if defined str goto :label
echo %num%
pause
既定
if
goto end
:end
goto :eof直接退出
⽤户选择 + if
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errotlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
pause
普通if
@echo off
set a=""
if exist %a%  (
echo file exist
)
else (
echo file not found
)
pause
for
注意for (str)的时候,会按空格或者,分割字符串然后执⾏
@echo off
for %%c in (*.bat,*.txt) do (type %%c)
pause
for /D %%i in (*) do echo %%i 显⽰⽂件夹
for /L %%i in (1,1,100) do echo %%i 范围for
for /R %%i in ([路径]) do echo %%i  枚举路径下的所有⽂件夹
for /F是⽤来处理⽂本的,所以花样⽐较多
指定分割符
for /f "delims=.," %%i in () do echo %%i  按'.'或者','切割字符串
for /f 简单来说,默认每⾏按分隔符分割成⼀个,单词数组(下标从1开始),然后默认返回每⾏第1个单词定点提取
for /f "tokens=3" %%i in () do echo %%i 输出每⾏第3个单词
tokens=2,3
tokens=2-3,5
tokens=2,*  1丢弃,%a = 2,%b = 剩下的
for /f "tokens=3,4" %%i in () do echo %%i %%j
%%i,%%j,%%k分别接受tokens=
for /f "tokens=3,4" %%a in () do echo %%a %%b
%%a,%%b,%%c...按顺序⾛就⾏了
跳过前n⾏
for /f "skip=2 tokens=2" %%i in () do echo %%i  跳过前n⾏过滤以;开头的⾏
for /f "eol=; tokens=1" %%i in () do echo %%i
处理""⽆法识别的问题
for /f "usebackq" %%i in ("") do echo %%i

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。