batch批处理笔记

1. echo 和 @
回显命令
@  #关闭单行回显
echo off  #从下一行开始关闭回显
@echo off  #从本行开始关闭回显。一般批处理第一行都是这个
echo on #从下一行开始打开回显
echo #显示当前是 echo off 状态还是 echo on 状态
echo. #输出一个"回车换行",空白行 同echo, echo; echo+ echo[ echo] echo/ echo
bash使用\换命令行  bat使用^换命令行
@echo %i #加@符号 多个输出行时连续打印

2. errorlevel
echo %errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码;默认值为0,一般命令执行出错会设errorlevel为非0值
重置错误码输入 cd.

3. dir
显示文件夹内容
dir #显示当前目录中的文件和子目录
dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件
dir  /a:d #显示C盘当前目录中的目录
dir  /a:-d #显示C盘根目录中的文件 -d排除目录
dir /b/p #/b只显示文件名,/p分页显示
dir *.exe /s #显示当前目录和子目录里所有的.exe文件  /s显示指定目录和所有子目录中的文件。
  :后跟着属性   D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            I  无内容索引文件
               L  重新分析点          O  脱机文件
               -  表示"否"的前缀

4. cd
cd  #进入C盘
cd/     #进入根目录

5. md/mkdir
创建目录
md d:\a\b\c #如果目录不存在 则创建

6. rd/rmdir
删除目录
rd abc #删除当前目录里的 abc 子目录,要求为空目录
rd /s/q d:\temp #删除 d:\temp 文件夹及其子文件夹和文件,强制删除所有
/S      除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q      安静模式,带 /S 删除目录树时不要求确认

7. del
删除文件
del d:\a.txt #删除指定文件,不能是隐藏、系统、只读文件
del /q/a/f d:\temp*.*   #删除 d:\temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不删除子目录
del /q/a/f/s d:\temp*.* #删除 d:\temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不删除子目录
  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件

8. ren
重命名命令
ren d:\temp tmp #支持对文件夹的重命名

9. cls
清屏

10. type
显示文件内容

11. copy
拷贝文件
copy a.txt d:\test.bak  #复制 a.txt 文件到 d:\ ,并重命名为 test.bak
copy con a.txt      #从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为a.txt文件;类似bash的 cat > catfile
con代表屏幕,prn代表打印机,nul代表空设备
copy nul a.txt      #将文件置空/创建空文件 置空的话需要输入Yes怎么解决? echo Y|copy nul a.txt;或者使用copy /y强制覆盖
copy 1.txt+2.txt 3.txt  #合并1.txt和2.txt的内容,保存为3.txt文件,如果不指定 3.txt ,则保存到 1.txt;批量也可以copy * destination
copy a.txt +        #复制文件到自己,实际上是修改了文件日期

12. title
设置cmd窗口的标题
title 新标题 #可以看到cmd窗口的标题栏变了

13. ver
显示系统版本

14. label 和 vol
设置卷标
vol #显示卷标
label #显示卷标,同时提示输入新卷标

15.

pause 就是暂停命令,执行时会在命令行窗口显示"请按任意键继续. . ." 并等待你按键。 pause > nul的作用是同样的,区别是不打印"请按任意键继续. . ." ,nul相当于空文件,把这些文字隐去了。

16. rem 和 ::
注释命令
注释行不执行操作

17. date 和 time
日期和时间
date #显示当前日期,并提示输入新日期,按"回车"略过输入
date /t #只显示当前日期,不提示输入新日期
time #显示当前时间,并提示输入新时间,按"回车"略过输入
time /t #只显示当前时间,不提示输入新时间

18. goto 和 :
跳转命令
:label #行首为:表示该行是标签行,标签行不执行操作
goto label #跳转到指定的标签那一行

19. find (外部命令)
查找命令
find "abc" a.txt        #在 a.txt 文件里查找含 abc 字符串的行 如果找不到,将设 errorlevel 返回码为1
find /i "abc" a.txt #查找含 abc 的行,忽略大小写
find /c "abc" a.txt #显示含 abc 的行的行数

20. more (外部命令)
逐屏显示
more a.txt #逐屏显示 c:a.txt 的文件内容

21. tree
显示目录结构
tree d: #显示D盘的文件目录结构

22. &
顺序执行多条命令,而不管命令是否执行成功;和bash不同 bash是;

23. &&
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
find "ok" a.txt && echo 成功      #如果找到了"ok"字样,就显示"成功",找不到就不显示

24. ||
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
find "ok" a.txt || echo 不成功     #如果找不到"ok"字样,就显示"不成功",找到了就不显示

25. |
管道命令
dir * /s/a | find /c ".exe" #/s列出当前文件夹以及子文件夹;/c统计个数
echo Y|copy nul a.txt
type a.txt|more     #这个和 more a.txt 的效果是一样的

26. > 和 >>   输出重定向命令
>清除文件中原有的内容后再写入 >>追加内容到文件末尾,而不会清除原有的内容
echo hello world>con    #在屏幕上显示hello world
copy a.txt f:\ >nul #拷贝文件,并且不显示"文件复制成功"的提示信息,但如果f盘不存在,还是会显示出错信息
copy a.txt f:\ >nul 2>nul   #不显示信息;正确或者错误信息都是输入到nul
echo ^^W ^> ^W>a.txt            #生成的文件内容为 ^W > W   ^和>是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号

27. <
从文件中获得输入信息,而不是从屏幕上 一般用于 date time label 等需要等待输入的命令

28. %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*  命令行传递给批处理的参数
%0 批处理文件本身
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数
批参数(%n)的替代已被增强。您可以使用以下语法:
%~1 - 删除引号, 扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
#可以参照 call /? 或 for /? 看出每个参数的含意

29. if
IF [NOT] ERRORLEVEL number command  #ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
ELSE 子句必须出现在同一行上的 IF 之后(否则换行有问题 要用换行符^)。
    IF EXIST filename. (
        del filename.

    ) ELSE (    注意空格
        echo filename. missing.

    )
    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于
if "%1"=="/a" echo 第一个参数是/a
if /i "%1" equ "/a" echo 第一个参数是/a   #/i 表示不区分大小写,equ 和 == 是一样的,其它运算符参见 if/?

if exist test.bat echo 存在test.bat文件

30. setlocal(开始本地变量) 和 endlocal(结束本地变量) 参考31.set
设置"命令扩展名"和"延缓环境变量扩充"
setlocal enableextensions #启用"命令扩展名"
setlocal disableextensions #停用"命令扩展名"
setlocal enabledelayedexpansion #启用"延缓环境变量扩充"
setlocal disabledelayedexpansion #停用"延缓环境变量扩充"
endlocal #恢复到使用setlocal语句以前的状态
"命令扩展名"默认为启用
"延缓环境变量扩充"默认为停用
批处理结束系统会自动恢复默认值
可以修改注册表以禁用"命令扩展名",详见 cmd /? 。所以用到"命令扩展名"的程
序,建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句,以确
保程序能在其它系统上正确运行
"延缓环境变量扩充"主要用于 if 和 for 的符合语句,在 set 的说明里有其实用例程

31. set
设置变量
引用变量可在变量名前后加 % ,即 %变量名%
set #显示目前所有可用的变量,包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2
echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2
echo %p:~0,3% #显示前3个字符,即aa1
echo %p:~-2% #显示最后面的2个字符,即b2
echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #设置p为数值型变量,值为39
set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用
set /a p="1&0″ #"与"运算,要加引号。其它支持的运算符参见set/?

set p= #取消p变量
set /p p=please input:      #设置成键盘读取
set /p /a p=please input:   #/p参数在前

------------------------
注意变量在 if 和 for 的复合语句里是一次性全部替换的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p%
)
结果将显示
aaa
aaa
因为在读取 if 语句时已经将所有 %p% 替换为aaa 这里的"替换",在 /? 帮助里就是指"扩充"、"环境变量扩充";可以启用"延缓环境变量扩充",用!来引用变量,即!变量名!

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo !p!

)
ENDLOCAL
结果将显示
aaa
bbb
`end-----------------------------

还有几个动态变量,运行set看不到;参考set /?

%CD% #代表当前目录的字符串
%DATE% #当前日期
%TIME% #当前时间
%RANDOM% #随机整数,介于0~32767
%ERRORLEVEL% #当前 ERRORLEVEL 值
%CMDEXTVERSION% #当前命令处理器扩展名版本号
%CMDCMDLINE% #调用命令处理器的原始命令行
可以用echo命令查看每个变量值,如 echo %time%
注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到

批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令

33. call
批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行,有时有的应用程序用start调用出错的,也可以call调用

34. choice (外部命令)
在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列
#eg:
@ECHO OFF
:BEGIN
CHOICE /c abc /m "please select"    #/c自定义字符,erroelevel的值从1开始;/m 打印内容
IF %ERRORLEVEL%==3 GOTO END
IF %ERRORLEVEL%==2 GOTO two
IF %ERRORLEVEL%==1 GOTO one
:one
ECHO 1
GOTO BEGIN
:two
ECHO 2
GOTO BEGIN
:END
ECHO over

35. pushd 和 popd
切换当前目录
@echo off
c: & cd & md mp3 #在 C: 建立 mp3 文件夹
md d:mp4 #在 D: 建立 mp4 文件夹
cd /d d:mp4 #更改当前目录为 d:mp4
pushd c:mp3 #保存当前目录,并切换当前目录为 c:mp3
popd #恢复当前目录为刚才保存的 d:mp4

36. for
循环命令这个比较复杂,请对照 for/? 来看
for %%i in (c:\ d:\ e:\ f:\) do echo %%i #依次调用小括号里的每个字符串,执行 do 后面的命令 注意%%i,在批处理中 for 语句调用参数用2个% 默认的字符串分隔符是"空格键","Tab键","回车键"
for %%i in (*.txt) do find "abc" %%i    #对当前目录里所有的txt文件执行 find 命令
for /r . %%i in (*.txt) do find "abc" %%i   #在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行
for /r . %%i in (.) do echo %%~pni  #显示当前目录名和所有子目录名,包括路径,不包括盘符
for /r d:\mp3 %%i in (*.mp3) do echo %%i>>d:\mp3.txt    #把 d:\mp3 及其子目录里的mp3文件的文件名都存到 d:\mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i   #生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1
for /f %%i in ('set') do echo %%i   #对 set 命令的输出结果循环调用,每行一个
for /f "eol=P" %%i in ('set') do echo %%i   #取 set 命令的输出结果,忽略以 P 开头的那几行
for /f %%i in (d:\mp3.txt) do echo %%i  #显示 d:\mp3.txt 里的每个文件名,每行一个,不支持带空格的名称
for /f "delims=" %%i in (d:\mp3.txt) do echo %%i    #显示 d:\mp3.txt 里的每个文件名,每行一个,支持带空格的名称
for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a #对 dir 命令的结果,跳过前面5行,余下的每行取第4列 每列之间的分隔符为默认的"空格" 可以注意到 dir 命令输出的前5行是没有文件名的
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)
对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和"空格",注意 delims=- 后面有个"空格"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的
for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b
取第2列给 %%a ,其后的列都给 %%b

37. subst (外部命令)
映射磁盘。
subst z: serverd #这样输入z:就可以访问serverd了
subst z: /d #取消该映射
subst #显示目前所有的映时

38. xcopy (外部命令)
文件拷贝
xcopy d:\mp3 e:\mp3 /s/e/i/y    #复制 d:\mp3 文件夹、所有子文件夹和文件到 e: ,覆盖已有文件加 /i 表示如果 e: 没有 mp3 文件夹就自动新建一个,否则会有询问

39. net

40.

1.&#x5728;cmd&#x7A97;&#x53E3;&#x4E2D;&#x4F7F;&#x7528;&#xFF0C;&#x53D8;&#x91CF;&#x540D;&#x5FC5;&#x987B;&#x7528;&#x5355;%&#x5F15;&#x7528;&#xFF08;&#x5373;&#xFF1A;%variable&#xFF09;&#xFF1B;&#x5728;&#x6279;&#x5904;&#x7406;&#x811A;&#x672C;&#x4E2D;&#x4F7F;&#x7528;&#xFF0C;&#x53D8;&#x91CF;&#x540D;&#x5FC5;&#x987B;&#x7528;&#x53CC;%&#x5F15;&#x7528;&#xFF08;&#x5373;&#xFF1A;%%variable&#xFF09;
2.for&#x3001;in&#x548C;do &#x4E09;&#x4E2A;&#x5173;&#x952E;&#x5B57;&#x7F3A;&#x4E00;&#x4E0D;&#x53EF;
3.for&#x547D;&#x4EE4;&#x7684;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x53EA;&#x80FD;&#x662F;26&#x4E2A;&#x5B57;&#x6BCD;&#x4E2D;&#x7684;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;
4.&#x5B57;&#x6BCD;&#x533A;&#x5206;&#x5927;&#x5C0F;&#x5199;&#xFF08;&#x5373;&#x5C31;&#x662F; %%a &#x548C; %%A &#x662F;&#x4E24;&#x4E2A;&#x4E0D;&#x540C;&#x7684;&#x53D8;&#x91CF;&#x540D;&#xFF09;

for /l l&#x662F;&#x6307;loop,&#x5373;&#x5FAA;&#x73AF;&#x7684;&#x610F;&#x601D;&#x3002;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#xFF1A;for /l %variable in (start,step,end) do command [command-parameters]
[1] start&#x6307;&#x8D77;&#x59CB;&#x503C;&#xFF1B;step&#x6307;&#x6B65;&#x95F4;&#x8DDD;&#xFF1B;end&#x6307;&#x7EC8;&#x6B62;&#x503C;&#x3002;
[2] start&#x3001;step&#x548C;end&#x90FD;&#x53EA;&#x80FD;&#x53D6;&#x6574;&#x6570;&#xFF08;&#x6B63;&#x8D1F;&#x7686;&#x53EF;&#xFF09;&#x3002;
[3] &#x6B65;&#x95F4;&#x8DDD;step&#x7684;&#x503C;&#x4E0D;&#x80FD;&#x4E3A;0&#x3002;
[4] &#x5F53;&#x6B65;&#x95F4;&#x8DDD;step&#x7684;&#x503C;&#x4E3A;&#x6B63;&#x6574;&#x6570;&#x65F6;&#xFF0C;&#x7EC8;&#x6B62;&#x503C;end&#x4E0D;&#x80FD;&#x5C0F;&#x4E8E;&#x521D;&#x59CB;&#x503C;start&#x3002;
[5] &#x5F53;&#x6B65;&#x95F4;&#x8DDD;step&#x7684;&#x503C;&#x4E3A;&#x8D1F;&#x6574;&#x6570;&#x65F6;&#xFF0C;&#x7EC8;&#x6B62;&#x503C;end&#x4E0D;&#x80FD;&#x5927;&#x4E8E;&#x521D;&#x59CB;&#x503C;start&#x3002;
&#x5177;&#x4F53;&#x542B;&#x4E49;&#xFF1A;&#x4ECE;start&#x5F00;&#x59CB;&#x8BA1;&#x6570;&#xFF0C;&#x4EE5;step&#x4E3A;&#x6B65;&#x957F;&#xFF0C;&#x76F4;&#x81F3;&#x6700;&#x63A5;&#x8FD1;end&#x7684;&#x90A3;&#x4E2A;&#x6574;&#x6570;&#x503C;&#x4E3A;&#x6B62;&#xFF0C;&#x8FD9;&#x4E4B;&#x95F4;&#x6709;&#x591A;&#x5C11;&#x4E2A;&#x6570;&#xFF0C;do&#x540E;&#x7684;&#x8BED;&#x53E5;&#x5C31;&#x6267;&#x884C;&#x591A;&#x5C11;&#x6B21;&#x3002;
&#x5F53;&#x5FAA;&#x73AF;&#x6B21;&#x6570;&#x786E;&#x5B9A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9996;&#x9009;for /l&#x8BED;&#x53E5;&#xFF0C;&#x4E5F;&#x53EF;&#x4F7F;&#x7528;goto&#x8BED;&#x53E5;&#x4F46;&#x4E0D;&#x63A8;&#x8350;&#xFF1B;
&#x5F53;&#x5FAA;&#x73AF;&#x6B21;&#x6570;&#x4E0D;&#x786E;&#x5B9A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7528;goto&#x8BED;&#x53E5;&#x5C06;&#x662F;&#x552F;&#x4E00;&#x7684;&#x9009;&#x62E9;&#xFF0C;&#x56E0;&#x4E3A;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x9700;&#x8981;&#x7528;if&#x4E4B;&#x7C7B;&#x7684;&#x6761;&#x4EF6;&#x8BED;&#x53E5;&#x6765;&#x5224;&#x65AD;&#x4F55;&#x65F6;&#x7ED3;&#x675F;goto&#x8DF3;&#x8F6C;&#x3002;

@echo off
for /l %%i in (1,2,10) do @echo %%i     #1开始 步长2 打印1 3 5 7 9
pause>nul
for /l %%i in (-1,-2,-10) do @echo %%i  #-1开始 步长-2 打印-1 -3 -5 -7 -9
pause>nul

/d &#x5373; /dictionary&#xFF0C;&#x4E3A;&#x4E86;&#x5904;&#x7406;&#x6587;&#x4EF6;&#x5939;&#x76F8;&#x5173;&#x3002;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#xFF1A;for /d %variable in (set) do command [command-parameters]
[1] &#x6709;&#x901A;&#x914D;&#x7B26;&#x3002;&#x5F53;&#x201C;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x201D;&#x4E2D;&#x5305;&#x542B;&#x6709;&#x901A;&#x914D;&#x7B26; ? &#x6216; * &#x65F6;&#xFF0C;&#x5B83;&#x4F1A;&#x5339;&#x914D;&#x6587;&#x4EF6;&#x5939;&#x3002;&#x5B83;&#x4EC5;&#x80FD;&#x5339;&#x914D;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x7B2C;&#x4E00;&#x7EA7;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x6216;&#x662F;&#x6307;&#x5B9A;&#x76EE;&#x5F55;&#x4F4D;&#x7F6E;&#x4E0A;&#x7684;&#x4E00;&#x7EA7;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x800C;&#x4E0D;&#x80FD;&#x5339;&#x914D;&#x66F4;&#x6DF1;&#x8DEF;&#x5F84;&#x4E0B;&#x7684;&#x5B50;&#x6587;&#x4EF6;&#x5939;&#x3002;&#x548C;/r&#x7684;&#x5C40;&#x9650;&#x90FD;&#x662F;&#xFF1A;&#x4E0D;&#x80FD;&#x5904;&#x7406;&#x9690;&#x85CF;&#x5C5E;&#x6027;&#x7684;&#x6587;&#x4EF6;&#x5939;

@echo off
for /d %%i in (f:\test*) do echo %%i    #仅匹配到test*的文件夹 没有这样的文件夹的话则不会打印
pause>nul

[2] &#x65E0;&#x901A;&#x914D;&#x7B26;&#x3002;&#x4F5C;&#x7528;&#x548C; "for %%i in (&#x5143;&#x7D20;&#x96C6;&#x5408;) do &#x547D;&#x4EE4;&#x8BED;&#x53E5;&#x96C6;&#x5408;" &#x8FD9;&#x6837;&#x7684;&#x8BED;&#x53E5;&#x65E0;&#x4EFB;&#x4F55;&#x533A;&#x522B;
[3] for /r /d&#x4E00;&#x8D77;&#x4F7F;&#x7528;&#x3002;(&#x5728;for&#x6709;&#x9650;&#x7684;4&#x4E2A;&#x53C2;&#x6570;&#x4E2D; &#x53EA;&#x6709;/r /d&#x53EF;&#x4EE5;&#x4E00;&#x8D77;&#x4F7F;&#x7528;)&#xFF1B;&#x53EF;&#x4EE5;&#x8BA4;&#x4E3A;/r /d&#x662F;&#x5BF9;/d&#x7684;&#x6269;&#x5C55;
&#x6240;&#x4EE5;&#x4F7F;&#x7528;for /r /d&#x7684;&#x6761;&#x4EF6;&#x662F;&#xFF1A;(1)&#x8981;&#x5BF9;&#x6587;&#x4EF6;&#x5939;&#x64CD;&#x4F5C;(dir /ad /s /b&#x53EF;&#x4EE5;&#x663E;&#x793A;&#x4E0D;&#x80FD;&#x64CD;&#x4F5C;) (2)&#x4E0D;&#x5904;&#x7406;&#x9690;&#x85CF;&#x5C5E;&#x6027;&#x7684;&#x6587;&#x4EF6;&#x5939;(&#x770B;&#x4E0B;&#x6587;for /f&#x548C;dir&#x7684;&#x7ED3;&#x5408;)

@echo off
for /r /d %%i in (*) do echo %%i    #显示当前目录下的所有文件夹以及子文件夹 等价dir /ad /s /b
pause>nul

&#x8F83;/d&#x53EF;&#x4EE5;&#x9012;&#x5F52;&#xFF0C;&#x5BF9;&#x6587;&#x4EF6;&#x5939;&#x904D;&#x5386;&#x3002;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#xFF1A;for /r [[drive:]path] %%variable in (set) do command [command-parameters]
[1] &#x5217;&#x4E3E;&#x201C;&#x76EE;&#x5F55;&#x201D;&#x53CA;&#x8BE5;&#x76EE;&#x5F55;&#x8DEF;&#x5F84;&#x4E0B;&#x6240;&#x6709;&#x5B50;&#x76EE;&#x5F55;&#xFF0C;&#x5E76;&#x628A;&#x5217;&#x4E3E;&#x51FA;&#x6765;&#x7684;&#x76EE;&#x5F55;&#x8DEF;&#x5F84;&#x548C;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x62FC;&#x63A5;&#x6210;&#x5F62;&#x5982;&#x201C;&#x76EE;&#x5F55;&#x8DEF;&#x5F84;\&#x5143;&#x7D20;&#x201D;&#x683C;&#x5F0F;&#x7684;&#x65B0;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x7136;&#x540E;&#xFF0C;&#x5BF9;&#x6BCF;&#x4E00;&#x6761;&#x8FD9;&#x6837;&#x7684;&#x65B0;&#x5B57;&#x7B26;&#x4E32;&#x6267;&#x884C;&#x201C;&#x547D;&#x4EE4;&#x8BED;&#x53E5;&#x96C6;&#x5408;&#x201D;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x6761;&#x547D;&#x4EE4;&#xFF1B; &#x7279;&#x522B;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF1A;&#x5F53;&#x201C;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x201D;&#x5E26;&#x4EE5;&#x70B9;&#x53F7;&#x5206;&#x9694;&#x7684;&#x901A;&#x914D;&#x7B26; ? &#x6216; * &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x628A;&#x201C;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x201D;&#x89C6;&#x4E3A;&#x6587;&#x4EF6;&#xFF08;&#x4E0D;&#x89C6;&#x4E3A;&#x6587;&#x4EF6;&#x5939;&#x5373;&#x76EE;&#x5F55;&#xFF09;&#xFF0C;&#x6574;&#x6761;&#x8BED;&#x53E5;&#x7684;&#x4F5C;&#x7528;&#x662F;&#x5339;&#x914D;&#x201C;&#x76EE;&#x5F55;&#x201D;&#x6240;&#x6307;&#x6587;&#x4EF6;&#x5939;&#x53CA;&#x5176;&#x6240;&#x6709;&#x5B50;&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x5339;&#x914D;&#x7684;&#x6587;&#x4EF6;&#xFF1B;&#x82E5;&#x4E0D;&#x4EE5;&#x70B9;&#x53F7;&#x5206;&#x9694;&#xFF0C;&#x5219;&#x628A;&#x201C;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x201D;&#x89C6;&#x4E3A;&#x6587;&#x4EF6;&#x5939;&#xFF08;&#x4E0D;&#x89C6;&#x4E3A;&#x6587;&#x4EF6;&#xFF09;&#xFF1B;
[2] &#x5F53;&#x7701;&#x7565;&#x6389;&#x201C;&#x76EE;&#x5F55;&#x201D;&#x65F6;&#xFF0C;&#x5219;&#x9ED8;&#x8BA4;&#x9488;&#x5BF9;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x8FDB;&#x884C;&#xFF1B; &#x3000;&#x3000;
[3] &#x5F53;&#x5143;&#x7D20;&#x96C6;&#x5408;&#x4E2D;&#x4EC5;&#x4EC5;&#x662F;&#x4E00;&#x4E2A;&#x70B9;&#x53F7;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5C06;&#x53EA;&#x5217;&#x4E3E;&#x76EE;&#x5F55;&#x8DEF;&#x5F84;&#xFF1B;

@echo off
for /r f:\test %%i in (a b c) do echo %%i   #列举 f:\test 及其所有的子目录,对所有的目录路径都分别拼接a、b、c之后再显示出来
pause
@echo off
for /f %%i in ('dir /ad /b /s') do echo %%i #使用dir /a可以获取指定属性的目录 更加灵活
pause>nul
#&#x6D4B;&#x8BD5;&#x6587;&#x672C;
&#x672C;&#x6587;&#x7684;&#x76EE;&#x6807;&#x662F;&#xFF1A;&#x4E0D;&#x6C42;&#x6700;&#x597D;&#xFF0C;&#x4F46;&#x6C42;&#x66F4;&#x597D;&#xFF0C;&#x505A;&#x6700;&#x5B9E;&#x7528;&#x7684;&#x6279;&#x5904;&#x7406;&#x5206;&#x4EAB;&#x3002;
&#x672C;&#x6587;&#x5730;&#x5740;&#xFF1A;http://www.cnblogs.com/Braveliu/p/5081087.html&#x3002;
&#x8FD9;&#x91CC;&#x662F;&#xFF1A;&#x987A;&#x5E8F;&#x9009;&#x62E9;&#x5FAA;&#x73AF;&#x7684;&#x535A;&#x5BA2;&#xFF0C;&#x65B0;&#x624B;&#x5B66;&#x4E60;&#x63D0;&#x5347;&#x7684;&#x798F;&#x5730;&#x3002;
1 @echo off
2 for /f "delims=" %%i in (test.txt) do echo %%i    #没有分割 读取文本内容;不加"delims="则默认以空格键为分割
3 pause>nul

"delims="&#x7B49;&#x53F7;&#x540E;&#x52A0;&#x7684;&#x662F;&#x5B57;&#x7B26;&#x96C6;&#xFF0C;&#x6BD4;&#x5982;&#x4EE5;;&#x548C;?&#x4E3A;&#x5206;&#x5272; &#x5219;"delims=;?"
&#x9ED8;&#x8BA4;&#x53EA;&#x63D0;&#x53D6;&#x7B2C;&#x4E00;&#x8282;&#x7684;&#x5B57;&#x7B26;&#x4E32; &#x5173;&#x4E8E;&#x5176;&#x4ED6;&#x8282;&#x7684;&#x63D0;&#x53D6;&#x53C2;&#x8003; tokens=

@echo off
for /f "delims=," %%i in (test.txt) do echo %%i #以逗号为分隔符,只打印逗号之前的内容
pause>nul
&#x6D4B;&#x8BD5;&#x6587;&#x672C;&#xFF1A;
&#x6D4B;&#x8BD5;1,&#x6D4B;&#x8BD5;2,&#x6D4B;&#x8BD5;3,&#x6D4B;&#x8BD5;4&#x3002;

tokens= &#x540E;&#x9762;&#x4E00;&#x822C;&#x8DDF;&#x7684;&#x662F;&#x6570;&#x5B57;&#xFF0C;&#x5982; tokens=2&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x8DDF;&#x591A;&#x4E2A;&#xFF1B;&#x4F46;&#x662F;&#x6BCF;&#x4E2A;&#x6570;&#x5B57;&#x4E4B;&#x95F4;&#x7528;&#x9017;&#x53F7;&#x5206;&#x9694;&#xFF0C;&#x5982; tokens=3,5,8&#xFF0C;&#x63D0;&#x53D6;&#x7B2C;3&#x3001;&#x7B2C;5&#x548C;&#x7B2C;8&#x8282;&#x5B57;&#x7B26;&#x4E32;&#xFF08;&#x6CE8;&#x610F;&#xFF0C;&#x8FD9;&#x91CC;&#x6240;&#x8BF4;&#x7684;&#x201C;&#x8282;&#x201D;&#xFF0C;&#x662F;&#x7531; delims= &#x8FD9;&#x4E00;&#x5F00;&#x5173;&#x5212;&#x5206;&#x7684;&#xFF09;
&#x5982;&#x679C; tokens= &#x540E;&#x9762;&#x6307;&#x5B9A;&#x4E86;&#x591A;&#x4E2A;&#x6570;&#x5B57;&#xFF0C;&#x5982;&#x679C;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x4E3A;%%i&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x6570;&#x5B57;&#x6307;&#x4EE3;&#x7684;&#x5185;&#x5BB9;&#x7528;&#x7B2C;&#x4E00;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF; %%i &#x6765;&#x63A5;&#x6536;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x6570;&#x5B57;&#x6307;&#x4EE3;&#x7684;&#x5185;&#x5BB9;&#x7528;&#x7B2C;&#x4E8C;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF; %%j &#x6765;&#x63A5;&#x6536;&#xFF0C;&#x7B2C;&#x4E09;&#x4E2A;&#x6570;&#x5B57;&#x6307;&#x4EE3;&#x7684;&#x5185;&#x5BB9;&#x7528;&#x7B2C;&#x4E09;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF; %%k &#x6765;&#x63A5;&#x6536;&#x2026;&#x2026;&#x7B2C;N&#x4E2A;&#x6570;&#x5B57;&#x6307;&#x4EE3;&#x7684;&#x5185;&#x5BB9;&#x7528;&#x7B2C;N&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x6765;&#x63A5;&#x6536;&#x3002;&#x5176;&#x4E2D;&#xFF0C;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x9075;&#x5FAA;&#x5B57;&#x6BCD;&#x7684;&#x6392;&#x5E8F;&#xFF0C;&#x7B2C;N&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x5177;&#x4F53;&#x662F;&#x4EC0;&#x4E48;&#x7B26;&#x53F7;&#xFF0C;&#x7531;&#x7B2C;&#x4E00;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x6765;&#x51B3;&#x5B9A;&#xFF1A;&#x5982;&#x679C;&#x7B2C;&#x4E00;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x662F;%%i&#xFF0C;&#x90A3;&#x4E48;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x5C31;&#x662F;%%j&#xFF1B;&#x5982;&#x679C;&#x7B2C;&#x4E00;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x7528;&#x7684;&#x662F;%%x&#xFF0C;&#x90A3;&#x4E48;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x5F62;&#x5F0F;&#x53D8;&#x91CF;&#x5C31;&#x662F;%%y
tokens=1,2-4 &#x8868;&#x793A;&#x63D0;&#x53D6;1 2&#x5230;4
token=n,* *&#x8868;&#x793A;&#x4F9D;&#x5207;&#x5206;&#x5B57;&#x7B26;&#xFF0C;&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x5207;&#x5206;&#x6210;&#x7D27;&#x8DDF;&#x5728;*&#x4E4B;&#x524D;&#x6700;&#x5927;&#x6570;&#x503C;&#x6240;&#x8868;&#x793A;&#x7684;&#x8282;&#x6570;&#x4E4B;&#x540E;&#xFF0C;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5176;&#x4F59;&#x90E8;&#x5206;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#xFF0C;&#x4E14;&#x6574;&#x4F53;&#x88AB;*&#x6240;&#x8868;&#x793A;&#x7684;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x63A5;&#x6536;&#x3002;

@echo off
for /f "delims=, tokens=3,4" %%i in (c.txt) do echo %%i %%j #以,为分割 提取第三、第四节内容
exit /b 0
#打印内容:测试3 测试4。
@echo off
for /f "delims=, tokens=1,*" %%i in (test3.txt) do echo %%i %%j
pause>nul
#打印内容:测试1 测试2,测试3,测试4。
@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe') do (
    set /a num+=1
    echo num 当前的值是 %num%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
    echo 存在含有 test 字符串的文本本件
) || echo 不存在含有 test 字符串的文本文件
if exist test.ini (
    echo 存在 test.ini 文件
) else echo 不存在 test.ini 文件
pause
#批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量%1,%2,%3等从批处理文件中调用
1.cd. > a.txt       #cd.表示改变当前目录为当前目录,即等于没改变;而且此命令不会有输出。
2.copy nul a.txt    #nul表示空设备 需要Y确认 优化 echo Y|copy nul a.txt
3.type nul > a.txt  #不需要Y确认 优选
4.echo a 2 > a.txt  #"2"表示错误输出的句柄,此例中没有错误输出,所以创建了没有内容的空文件;其实>默认都是重定向了句柄1,即标准输出句柄。比如cd.>a.txt,其实就是cd. 1>a.txt。同样,句柄3到9也可以使用在本例中,它们是未经定义的句柄,也不会有输出,如echo a 3>a.txt。
5.fsutil file createnew d:\a.txt 0 #使用fsutil创建
6.echo. > a.txt #创建一个空文件 >重导向
1.echo a > a.txt
2.type a.txt > b.txt
3.copy a.txt b.txt
4.fsutil file createnew d:\a.txt 1
:start
choice /t 5 /d y /n >nul (5秒执行一次下面的指令)
tasklist|find /i "ngrok.exe" (检查是否存在ngrok.exe进程,如果检测到,下面比较的值为0,为0表示存在。)
if %errorlevel%==0 (
    echo "yes"
) else (
    echo "No"
    start startup.bat (新窗口启动startup.bat脚本)
)
goto start  (循环)

1.call &#x539F;&#x7A97;&#x53E3;
2.start &#x65B0;&#x7A97;&#x53E3;

Original: https://www.cnblogs.com/sunfankun/p/16266853.html
Author: 孙犯困
Title: batch批处理笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583116/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 应用配置管理,基础原理分析

    工程可以有点小乱,但配置不能含糊; 一、配置架构 在微服务的代码工程中,配置管理是一项复杂的事情,即需要做好各个环境的配置隔离措施,还需要确保生产环境的配置安全;如果划分的微服务足…

    Linux 2023年6月14日
    094
  • js中div显示和隐藏钮为什么页面总是跳一下到最上面

    中心动态 产权动态 财经聚焦 点击onclick事件 是因为的href属性,使用了#的缘故,你点击a的时候回到页面的开始,然后才在做click函数,你可以不使用href属性。但是这…

    Linux 2023年6月13日
    089
  • Java秒杀系统三:web层

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    083
  • Teamviewer解决方式–Win10

    用teamviewer远程时,如果被检测为商用,会给出提示,表示本次远程只能持续几分钟。下面给出win10的解决方案。 1、卸载teamviewer 从控制面板-程序与功能中卸载 …

    Linux 2023年6月8日
    078
  • SF Symbols

    SF符号提供了一套超过2400个一致的、高度可配置的符号,你可以在你的应用程序中使用。苹果公司设计的SF符号能够与旧金山系统字体无缝整合,因此这些符号能够自动确保与所有重量和尺寸的…

    Linux 2023年6月7日
    072
  • 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子。记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决。但是那时候我没有主…

    Linux 2023年6月14日
    099
  • Linux的NIS配置

    快速命令 Server和Client设置NIS域名 nisdomainname nis_server echo ‘NISDOMAIN=nis_server’ >> /e…

    Linux 2023年6月6日
    096
  • NAT回流(Twice NAT)Hairping 参数详解

    内网用户需要通过域名访问内网的服务器,一般商用环境是无法访问的,需要经过以下配置,原理不说了,直接说配置。 nat (inside,inside) source dynamic i…

    Linux 2023年6月6日
    086
  • LVM 逻辑卷管理 Logical Volume Management

    管理磁盘、使用磁盘的一种方式的称呼 优势: 1、在不影响数据的情况下, 扩容、缩容 2、支持快照功能, 方便数据备份 LVM工作流程: 磁盘/分区 —> pv(物…

    Linux 2023年6月7日
    0105
  • Shell alias命令详解:给命令设置别名

    给命令设置别名,你可以把它当作命令的”小名”,但是这样做有什么意义呢? 比如笔者刚接触 Linux 时,使用的编辑器是 Vi,但是现在 Vim 的功能明显比…

    Linux 2023年5月28日
    052
  • django.template.exceptions.TemplateDoesNotExist: django_filters/rest_framework/form.html

    django.template.exceptions.TemplateDoesNotExist: django_filters/rest_framework/form.htmlER…

    Linux 2023年6月14日
    0145
  • redis的事件处理机制

    redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,”工作的工人”那么少,可那么为什么redi…

    Linux 2023年5月28日
    090
  • git的 .gitignore 配置概述

    学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitignore配置忽略包含的子项…

    Linux 2023年6月13日
    061
  • 安装Redis6.x

    gcc安装完毕以后,接下来可以按照redis了,解压redis6安装包 tar -zxvf redis-6.0.9.tar.gz * 查看日志,表示运行成功 vim /usr/lo…

    Linux 2023年5月28日
    062
  • ElementUI table无缝循环滚动

    ElementUI table无缝循环滚动 恰好实习的时候遇到了这个需求,而且网上的代码有点僵硬,所以我改了改,顺手水一篇博客出来,其实是很简单的东西。 部分思路来源:https:…

    Linux 2023年6月7日
    0173
  • 【已解决】Windows环境下启动redis服务失败

    在redis安装目录下打开cmd窗口: 依次输入: redis-cli.exe shutdown exit redis-server.exe redis.windows.conf …

    Linux 2023年6月14日
    049
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球