windows批处理命令
2022-07-12 09:40:37 2 举报
AI智能生成
windows下cmd批处理脚本命令使用及其例程,入门到精通,
作者其他创作
大纲/内容
基础知识
纯DOS与窗口DOS区别
实模式
保护模式
虚拟8086模式
windos命令环境常用符号
rem 注释 :: 也是注释<br>: 盘符 <br>\根目录 <br>.当前目录<br> ..上一级目录 <br>“”把包含空格的字串定义为一个字符串
自定义窗口
设置标题:title<br>设置大小:mode 长,宽<br>修改颜色:color<br>
环境变量
查看环境变量
电脑->属性-》高级->环境变量 查看
cmd窗口,输入"set" 查看
set 命令
作用:<br> 可显示、设置或删除 cmd.exe 环境变量等等。
用法:
预定义的变量
<i><font color="#f15a23">被底层定义好可直接使用的变量:不会出现在 SET 显示的变量列表中</font></i><br>
常用符号和程序
引用变量值:%xxx% (用两个%把变量包起来)
给path变量增加一个环境变量路径<br>set path=%path%;c;\users
<font color="#f15a23"><b>变量errorlevel对应当前errorlevel数值</b>:(查看前一个命令执行的状态)</font><br><ul><li>正确是:0 错误是:非0 (判断时 1代表非0)<br></li></ul><span style="font-size: inherit;">查看方式:<br><ul><li>echo %errorlevel%<br></li></ul></span>
exit 退出命令<br>正常情况是批处理文件执行完最后一行后退出<br>但必要时,可用exit在任意位置直接结束cmd窗口<br><ul><li>退出时可设置错误码errorlevel<br>exit /b 3 rem 退出批处理文件设置错误码为3<br>(/b 指退出批处理,不关闭cmd窗口)</li></ul>
<font color="#f15a23">补充</font>:/b 退出批处理,不关闭cmd窗口<br>意思是:在cmd窗口里打开并运行包含有exit /b 3的批处理文件时<br>cmd窗口不会关闭,同时可以查看设置的errorlevel值。<br>如果只是在文件夹下双击包含该命令的批处理文件,窗口是会被关闭的
findstr 查找并输出包含指定信息的行<br><ul><li>ipconfig /all | findstr DIR<br></li></ul>
echo 回显数据
"echo. " 表示换行
echo截取字符串 (<font color="#f15a23">补充</font>)<br>set string=abcdefg<br><font color="#f68b1f">截取前五个字符 echo %string:~0,5%<br>截取最后五个 echo %string:~,-5%<br>从第4个字符开始,截取5个字符 echo %string:~3,5%</font><br>
批处理文件
什么是批处理
批处理(Batch),也称为批处理脚本。顾名思义,对某对象进行批量处理<br>就像生产线传送带上的设备,产线就是文件,传送带上的设备就是命令,用一个文件保存若干条命令并依次执行
语法
rem 注释<br>@ 跟在该符号后面的命令不回显(不显示在屏幕上)<br>echo on/off 该命令后的所有命令都不回显
常用命令
重定向
输入重定向<<br>输出重定向>、>>
<b><font color="#f15a23">数字代码描述:</font></b><font color="#c41230"><br>0:键盘输入 1:输出命令提示符到窗口 2:错误输出</font>
例如:<br>dir >right.txt 2>error.txt //错误输出 就输出到error.txt,正确就输到right.txt<br>dir 2>error.txt<br>
作用:把错误信息以文件的形式保存下来,便于分析错误
虚拟设备文件
CON:<br>根据在命令行中的位置,可分别代表键盘或显示器
<font color="#5c5c5c">[例]<br></font><font color="#f68b1f">copy con test.txt </font><br>con --代表键盘,可写一些短小的文本文件<br><br><font color="#f68b1f">copy test.txt con <br></font>con --代表显示器,将test.txt内容显示出来
NUL:<br>代表空设备,常与输出重定向搭配来隐藏程序运行的信息
dir >nul 2>nul<br>意思是无论该语句执行是否成功,都屏蔽执行结果在屏幕上的显示。
特殊字符命令
"|" 管道命令符, 将第一条命令的结果作为第二条命令的参数使用
比如:<br>dir d:\ | find "P" 查找<br>dir d:\ | findstr "a" 筛选<br>
<font color="#f15a23">学以致用:将预置答复语作为人机对话命令的输入</font><br> del /p a.txt rem会要求人确认是否删除<br><font color="#e5e5e5">ECHO 答复语|命令文件名</font><br>
“&”:把两个命令放在同一行,从左到右顺序执行<br>
例:<br>dir & dir /b
&& 第一个命令失败时,后面的命令就不会执行
例:<br>di && c: & dir /b
"||" 第一个命令失败后才执行第二条命令
例<br>di || c: & dir /b
"( )"把多条命令集合当成一条命令,但是不能在里面对同一个变量即赋值又使用
if - else
紧跟if的语句结果为真,则执行接下来的语句<br>
<b><font color="#381e11">1、如果存在(不存在)某文件 则运行命令<br></font></b><font color="#0076b3">if [NOT] exist filename command</font><br>
if exist a.com del *.com<br>如果当前目录下存在a.com,则删除a.com
if not exist test1.txt (md test1) else (md test2)<br>如果当前目录下不存在test1.txt就建个test1目录,否则建立test2目录
<b><font color="#381e11">2、根据比较两个字串结果来运行</font>命令行</b><br>if <font color="#f15a23"> </font>[NOT] string1==string2 command<br><br>注:字符串比较是区分大小写的<br> 要<font color="#f15a23">不区分大小写,需要加 /I</font>
例<br>@echo off<br>set /p var1=请输入第一个比较的字符:<br>set /p var2=请输入第二个比软的字符:<br>if "%var1%"=="%var2%" (echo 输入的两个字符相同) else echo 输入的两个字符不相同<br>pause <br><br>
<font color="#381e11"><b>3、比较两个数值是否相等</b><br>if num1 关系符 num2 command</font>
<font color="#c41230">批处理中大于小于不能用:“>”,"<"</font>
set /p num=请输入一个数字<br>if %num% equ 10 (echo 输入正确) else (echo 输入错误)
4、根据errolevel来运行命令<br>if %errorlevel% ==2 echo 相等
for
见后面
goto
作用:程序跳转,使用独占一行的冒号加字串来定义标签
格式:<br>echo hello word<br>goto part<br>echo im no1<br>:part<br>echo i am no2<br>pause<br>
注意:在if或者for语句内执行goto跳转<br>会使if和for失去原本的功能
sort
定义:排序命令
作用:可以对文件里的字符串进行排序<br>(看帮助信息)
a.txt<br>group<br>dog<br>apple<br>escap<br>fly<br>little<br>big<br>
start
定义:启动一个单独的窗口,运行指定的程序
作用:可运行 盘符目录/文件/文件夹/程序
打开计算器:start calc
用法:start 盘符/文件/文件夹/程序<br> (属性看帮助信息 最大化|最小化)
call
定义:程序的调用命令<br>
作用:从一个批处理脚本中调用另一个批处理脚本,<font color="#c41230">不会终止父批处理程序</font>
例:一个批处理中调用另一个批处理<br><font color="#c41230">(</font><font color="#c41230">若不使用call ,会在运行完另一个批处理后直接退出<br>不会继续运行)</font><br><br>
例1<br>@echo off rem call<br>echo 开始调用<br>call call1.bat<br>echo 调用成功<br>pause
rem call.bat<br>echo 我被调用了<br>
例2<br>@echo off<br>call call4.bat
@echo off<br>call :label<br>echo 1<br>echo 2<br> :label<br>echo 3<br>echo 4
批处理文件之间的参数传递:
参数:%0-%9 <br><ul><li>%0:是指批处理文件的本身 (可以调用批处理自身,实现自身循环)<br></li><li>%1-%9:批处理的参数<font color="#16884a">(相当于C中的形参)</font><br>%1 代表传入的第一个参数,%2 传入的第二个参数,其他同理<br><br></li></ul><span style="font-size: inherit;">【作用】:可把一个批处理里的数据在调用另一个批处理文件时</span>传给它<span style="font-size: inherit;"><br></span>【使用格式】: <br><ol><li>调用一个批处理文件时:文件名[空格] 参数1 参数2...<br></li><li>cmd打开一个批文件时:文件名[空格] 参数1 参数2..<br></li></ol>
cd %~dp0 切换到当前批处理所在路径
pushd和popd
pushd和popd:是对一个目录栈进行操作,往往是配对使用<br>格式:pushd [path] <br>path:指定要成为当前目录的目录。
例:<br>假设当前工作目录为 c:\windows<br>pushd d:\"Program Files" <font color="#662c90">--将当前工作目录压入栈中,改变工作目录路径为d:\Program Files--</font><br>然后输入命令: popd之后, --<font color="#662c90">工作目录就会变回 c:\windows</font><br>
ping
作用:检测网络连通性/网络质量 是否丢包
原理:<br>主机发送icmp数据包到另一台主机,另一台主机接收到后,返回一个icmp echo<br>通过两个数据包时间间隔,判断网络延时
其他参数 /?
实战:网络故障,通过ping 排查
故障原因:TCP/IP协议出错、TCP/IP配置出错、物理故障、中毒等<br>
排查:<br><ol><li>检查本地TCP/IP是否安装正常:ping locahost</li><li>检查网关是否通畅(相当于出国的海关):ping 默认网关</li><li>检查电脑与外网是否通畅:ping 外网</li></ol><br>
FC
文件比较命令<br>功能:比较文件的异同<br>格式:FC[盘符:][路径名]〈文件名〉[盘符:][路径名][文件名][/A][/B][/C][/N]<br>参数说明:<br>(1)选用/A参数,为ASCII码比较模式; <br>(2)选用/B参数,为二进制比较模式; <br>(3)选用/C参数,将大小写字符看成是相同的字符。 <br>
shutdown
关闭计算机 <br>(看帮助信息)
高级命令
设置开机自启动
1、加入启动目录
GUI:<br>将文件快捷方式拖到:开始->所有程序->启动文件夹下<br>
CLI:<br>将文件copy到启动目录下<br>启动目录:<font color="#c41230">%userprofile%</font>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
2、创建计划任务<br>(<font color="#c41230">该计划任务可在系统启动后执行,其他的属于用户态,需要登录后才能执行</font>)<br> 用于对程序进行定时启动的操作<br>
GUI:<br>1。控制面板->管理工具->任务计划程序->创建基本任务<br>2.打开运行窗口,输入:taskschd.msc->创建基本任务
CLI:<br>SCHTASKS /create /delete /showsid /change<br> 允许管理员创建/删除/查询/更改运行和中止本地/远程系统上的计划任务<br>格式:<br>schtasks /create /tn TaskName /tr TaskRun <br>/scschedule[/momodifier][/dday][/mmonth[,month...]<br>[/st StartTime] [/sd StartDate] [/ed EndDate]<br>[/s computer [/u [domain\] user<br>/p password]] [/ru{[Domain\] User|"System"} [/rpPassword]]/?
例1。计划任务在每次系统启动的时候运行test程序<br>schtasks /create /tn test /tr d:\test.bat /sc onstart
例3.计划foxmail程序从 2020年9月14日起每五小时运行一次<br>schtasks /create /tn test3 /tr d:\foxmail\foxmail.exe /sc hourly /mo 5 /sd 09/14/2020 <br>
例2.计划每天运行一次test1程序<br>schtasks /create /tn test1 /tr d:test.bat <font color="#c41230">/sc daily</font> <font color="#f384ae">/mo 1</font>/st 8:00:00 <font color="#fdb813">/sd 09/14/2020</font> <font color="#16884a">/ed 09/30/2020</font><br><ul><li><font color="#662c90">/mo 1 --mo默认为1,设置为2时 表示隔一天运行一次<br></font></li><li><font color="#662c90">/sd和/ed --可以只设置其中一个or不设置,/sd 不设置,默认为当前日期 /ed 不适用于onstart onlogon onidle</font><br></li></ul>
<font color="#381e11">更多例程,详见帮助文档或 https://www.cnblogs.com/mq0036/p/6761684.html</font>
4、设置注册表1 LOCAL MACHINE
GUI:<br>打开运行窗口,输入regedit.找到注册表启动项位置:<br>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run主键<br>右键新建->字符串值->双击创建的字符串->"数值数据"输入要开机自启的软件绝对路径+文件名<br><font color="#924517">【注意:该操作默认路径为C:\Windows\System32,若在批处理文件里有创建文件的命令,又未设置<br>文件创建的绝对路径,那么,批处理创建的文件将会在这个目录下,而不是批处理文件所在的目录下】</font>
CLI: 使用reg命令操作注册表<br><font color="#f15a23">reg add</font> <font color="#924517">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run </font><font color="#f15a23">/v</font><font color="#924517"> test </font><font color="#f15a23">/t</font><font color="#924517"> reg_sz </font><font color="#f15a23">/d</font><font color="#924517"> d:\test.bad</font>
reg add 命令格式<br>reg add KeyName [/v EntryName|/ve] [/t DataType] [/s separator] [/d value] [/f]<br>KeyName:注册表项的完整名<br>/v:所选项下要添加的值得名称<br>/t:要添加的值得数据类型,有 REG_SZ/REG_DWORD/REG_QWORD/REG_BINARY等待
5、设置注册表2 Current User
GUI:<br>打开运行窗口,输入regedit.找到注册表启动项位置:<br>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce<br><font color="#924517">【注意:该操作默认路径为C:\Windows\System32,若在批处理文件里有创建文件的命令,又未设置<br>文件创建的绝对路径,那么,批处理创建的文件将会在这个目录下,而不是批处理文件所在的目录下】</font><br>
CLI: 使用reg命令操作注册表<br><font color="#f15a23">reg add</font> <font color="#924517">HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run </font><font color="#f15a23">/v</font><font color="#924517"> test </font><font color="#f15a23">/t</font><font color="#924517"> reg_sz </font><font color="#f15a23">/d</font><font color="#924517"> d:\test.bad</font>
3、加到服务里<br>
GUI:<br>1、右键“计算机”->管理->服务和应用程序->服务<br>2、打开运行窗口,输入:“services.msc”
CLI:<br>1、创建服务:sc create <font color="#0076b3">Test</font> binPath= <font color="#0076b3">C:\test.bat</font> <br>2、设置服务启动方式:sc config Test start= AUTO<br>3、启动服务:net start Test<br>4、删除服务:sc delete Test <font color="#0076b3">(Test为服务名称)</font>
注意:<br>sc命令:用于与服务控制管理器和服务进行通信的命令行程序<br>“=”号后要有空格<br><br>
管理员模式和非管理员模式的区别
管理员是系统最高权限所有者,一个系统只能有一个最高权限的管理员。<br>新建的用户也是管理员,但指示管理员组中的一员,权限不如系统默认的Administrator<br>以管理员身份运行,是指用Administrator管理员身份运行。<br>普通双击运行程序是用的当前用户是:C:\User\SZ4343<br>管理员身份运行是用的Administrator,路径为:C\Windows\system32\
<font color="#c41230">管理员权限运行</font>
自行检查如果不是管理员权限运行就提示<br>
>nul 2>&1 cacls %SystemRoot%\System32\config<br>if errorlevel 1 (<br> echo 请以管理员权限运行<br> pause<br> exit )<br>pushd %~dp0 压栈 进入批处理所在文件夹,操作完再popd
NET
NET START
作用:启动服务,或显示已启动服务的列表。<br>命令格式:net start [service]
例如:net start w32time --开启时间服务器<br>注意:如果服务名有空格,要用双引号将服务名引起来
NET STOP
作用:停止 Windows NT 网络服务。<br>命令格式:net stop [service]
NET TIME
作用:使计算机的时钟与另一台计算机或域的时间同步。<br>命令格式:net time [\\computername | /domain[:name]] [/set]<br>参数介绍:<br>(1)\\computername --指定要检查或与之同步的服务器的名称<br>(2)/domain[:name] --指定要与其时间同步的域。<br>(3)/set --使本计算机时钟与指定计算机或域的时钟同步<br>
开启时间服务器:net start w32time
获取本地时间:net time \\127.0.0.1<br>
获取并显示其他服务器的时间:net time \\[ip地址] 192.168.99.194
设置本计算机与指定计算机时钟同步:net time \\[ip地址] /set
显示本地实际与指定计算机的时间差:<font color="#0076b3"> (帮助文档)</font><br>w32tm /stripchart /computer:192.168.99.194 /dataonly
Net Pause
作用:暂停正在运行的服务。<br>命令格式:net pause [service]
Net Continue
作用:重新激活挂起的服务。<br>命令格式:net continue [service]
NET USER
作用:添加或更改用户帐号或显示用户帐号信息。该命令也可以写为 net users。<br>命令格式:net user [username [password | *] [options]] [/domain]<br>参数介绍:(1)键入不带参数的net user查看计算机上的用户帐号列表。<br>(2)username添加、删除、更改或查看用户帐号名。<br>(3)password为用户帐号分配或更改密码。<br>(4)*提示输入密码。<br>(5)/domain在计算机主域的主域控制器中执行操作。<br>简单事例:net user yfang查看用户YFANG的信息
NET VIEW
作用:显示域列表、计算机列表或指定计算机的共享资源列表。<br>命令格式:net view [\\computername | /domain[:domainname]]<br>参数介绍:<br> (1)键入不带参数的net view显示当前域的计算机列表。<br>(2)\\computername 指定要查看其共享资源的计算机。<br>(3)/domain[:domainname]指定要查看其可用计算机的域。<br>简单事例:(1)net view \\YFANG查看YFANG的共享资源列表。<br>(2)net view /domain:LOVE查看LOVE域中的机器列表。<br>
NET USE
作用:连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息。<br>命令格式:net use [devicename | *] [\\computername\sharename[\volume]]<br>[password | *]] [/user:[domainname\]username] [[/delete] |<br>[/persistent:{yes | no}]]<br>参数介绍: <br>(1) 键入不带参数的net use列出网络连接。<br>(2) devicename指定要连接到的资源名称或要断开的设备名称。<br>(3) \\computername\sharename服务器及共享资源的名称。<br>(4) password访问共享资源的密码。<br>(5) *提示键入密码。<br>(6) /user指定进行连接的另外一个用户。<br>(7) domainname指定另一个域。<br>(8) username指定登录的用户名。<br>(9) /home将用户连接到其宿主目录。<br>(10) /delete取消指定网络连接。<br>(11)/persistent控制永久网络连接的使用。<br>简单事例: (1)net use e: \\YFANG\TEMP将\\YFANG\TEMP目录建立为E盘<br>(2)net use e: \\YFANG\TEMP /delete断开连接<br>
操作磁盘
convert: 将FAT格式磁盘转换为NTFS格式
配置磁盘:diskpart<br><ul><li>列出磁盘:list disk</li><li><span style="font-size: inherit;">选择磁盘0:select disk 0</span></li><li><span style="font-size: inherit;">格式化磁盘:clean</span></li><li><span style="font-size: inherit;">创建主分区:creat partition primary</span></li><li><span style="font-size: inherit;">定义磁盘:format fs=ntfs quick label="E"</span></li></ul>
如果要配置磁盘,可以将其写到批处理中<br>可以简化操作,提高效率<br><br>
有时候非法/强制关机,造成磁盘错误<br>磁盘修复:chkdsk (见帮助信息/f /r )<br><br>
netstat
网络管理命令<br>用来查询或统计 计算机本地的tcp/ip网络链接<br> /? /a/n/o
状态:<br><ul><li>Listening 监听状态,等待连接</li><li>establishd 已经建立了连接</li><li>time_wait 超时,等待连接时未成功建立连接</li></ul>
在用软件时,报错误:某端口被占用。怎么办?<br><span style="font-size: inherit;">查看时哪个进程占用了端口,把进程杀掉,解除占用</span><br style="font-size: inherit;"><ol><li><span style="font-size: inherit;">netstat /ano 查看端口被占用的进程号 |findstr</span></li><li><span style="font-size: inherit;"><font color="#5c5c5c">tasklist 枚举任务进程 |findstr</font></span></li><li><span style="font-size: inherit;"><font color="#5c5c5c">taskkill 杀死任务进程 /im *exe /f</font></span></li></ol>
80端口为例,浏览网页时用的
<font color="#c41230">tasklist</font>:显示在本地或远程机器上,当前运行的进程<br>
查看远程系统的进程::<br>“tasklist /s 218.22.123.26 /u jtdd /p 12345678”<br>提示:tasklist查看远程系统进程时,需要远程机器RPC 服务器的支持,否则,该命令不能正常使用。<br>
<font color="#c41230">taskkill 杀死进程</font><br>按进程名查杀:/IM /F<br> taskkill /IM notepad.exe<br>按PID查杀:<br> taskkill /pid 4333
<font color="#381e11">wmic 命令<br></font>
是windows下提供访问硬件和系统信息的接口<br><span style="font-size: inherit;"><br>例:<br>1、显示CPU信息</span><br>wmic cpu list brief<br><span style="font-size: inherit;">2、显示磁盘信息</span><br>wmic diskdrive list brief<br><span style="font-size: inherit;">3、显示虚拟内存信息</span><br>wmic pagefile<br>4、显示c盘的相关信息<br>wmic logicaldisk where name="c:" get deviceid,size,freespace,filesystem,description<br>
<b>磁盘管理:</b>可查看磁盘相关属性,更改卷标、盘符等等
<b>进程管理</b><br>结束进程、创建进程、查询指定进程信息<br>在远程计算机上创建或结束进程,<br>重启或关闭远程计算机<br>
<b>系统服务进程管理:</b><br>如:<br>获取指定服务进程pid号、显示正在进行的服务<br>启动一个服务、停止一个服务、显示开机自启动切正运行的服务 等等<br>
<b>文件管理</b><br>复制/删除/更名文件<br>全盘查找指定文件<br>获取文件的创建、访问、修改时间
ipconfig
显示系统中网卡IP地址和mac地址等信息<br>ipconfig /all
for命令
分析“假病毒.bat”
格式:<br><b>for <font color="#f15a23">%%variable</font> IN (<font color="#16884a">set</font>) DO <font color="#c41230">command [command-parameters]</font></b><br><b>for <font color="#f384ae">[参数]</font> <font color="#f15a23">%%变量名 </font> IN <font color="#16884a">(相关文件或命令)</font> DO <font color="#c41230">执行的命令</font></b><br><br><ul><li><font color="#f384ae" style="font-size: inherit;">参数:</font><span style="font-size: inherit;">for有4个参数 /d /l /r /f 他们的作用我在右边用例子解释</span><br></li><li><font color="#f15a23" style="font-size: inherit;">%%变量名 :</font><font style="font-size: inherit;" color="#381e11">制定一个单一字母,</font><span style="font-size: inherit;">可以是小写a-z或者大写A-Z,区分大小写,FOR会把每个读取到的值给他;</span><br></li><li>IN:命令固定格式,照写就是了;<br></li><li><font color="#16884a" style="font-size: inherit;">(set/相关文件或命令)</font><span style="font-size: inherit;"> :指定一个或一组文件。可以使用通配符。FOR要把什么东西读取然后赋值给前面的变量</span><br></li><li>do:命令固定格式,照写!<br></li><li><font color="#c41230" style="font-size: inherit;">执行的命令:</font><span style="font-size: inherit;">对每个变量的值要执行什么操作就写在这.</span><br></li></ul>
注意:
在批处理里,%%variable要用两个%<br>在cmd里 只用一个%
<b><font color="#f15a23">/d</font> 仅目录<br></b><span style="font-size: inherit;">格式 </span><font color="#0076b3" style="font-size: inherit;">for</font><span style="font-size: inherit;"> </span><b style="font-size: inherit;"><font color="#c41230">/d</font></b><span style="font-size: inherit;"> </span><font color="#381e11" style="font-size: inherit;">%%variable</font><span style="font-size: inherit;"> </span><font color="#0076b3" style="font-size: inherit;">in</font><span style="font-size: inherit;"> (</span><font color="#16884a" style="font-size: inherit;">set</font><span style="font-size: inherit;">) </span><font color="#0076b3" style="font-size: inherit;">do</font><span style="font-size: inherit;"> command</span><br><ul><li>如果 set ( 相关文件或命令) 包含通配符(* 和 ?),<br>将对与 set 相匹配的每个目录执行指定的 命令。</li><li>主要用于搜索目录,不会搜索文件<br></li></ul>例如1:显示当前目录下所有目录名字 (<font color="#f15a23">见历程</font>)<br>for /d %%i in (*) do @echo %%i<br>pause<br><br>例2:显示当前目录下名字只有1-3个字母的目录<br>
主要用于目录搜索,不会搜索文件,<br>/D 参数只能显示当前目录下的目录名字<br><font color="#c41230">特别说明:</font>只会搜索指定目录下的目录,<br>不会搜索再下一级的目录。只能显示当前目录下的目录名字
<b><font color="#c41230">/r </font></b>比/d更强大,可以进入根目录树,并把指定目录及其子目录里的每个文件名都读出来<br>在每个目录中都去执行 for 语句。如果在 /R 后没有指定目录,则认为是<br>当前目录。<br><br>例:找出D盘所有的exe文件 或者.txt 或者YouDao的可执行文件<br> for /r c:/ %%i in (*.exe) do @echo %%i<br>
<b>/L </b>表示以以增量形式从开始到结束的一个数字序列。可以使用负的 Step<br><b>格式:<font color="#0076b3">for /L %% Variable in (Start#,Step#,End#) do Command</font><br> </b>起始值 (Start#),然后逐步执行一组范围的Setp#值,直到该值超过终止值 (End#) 循环结束<br><ul><li>例1:生成序列<br></li></ul>@echo off<br><font color="#662c90">for /l %%i in (1,1,5) do @echo %%i rem 步进增步(1,1,5),步进递减(5,-1,1)</font><br>pause<br><ul><li>例2:打开多个cmd <br></li><li>例3:一次连续创建多个目录文件夹 for /l %%i in (1,1,5) do md %%i<br>例4:将a.txt例每行的字符作为文件名,创建文件夹 for /f %%i in (a.txt) do md %%i<br></li></ul>
<b>/f </b>迭代及文件解析-使用文件解析来处理命令输出、字符串及文件内容<br>格式:<br><font color="#662c90">FOR /F ["options"] %%i IN (file) DO command remile代表一个或多个文件<br>FOR /F ["options"] %%i IN ("string") DO command remstring 代表字符串<br>FOR /F ["options"] %%i IN ('command') DO command ["options"] 可选项</font><br>【说明】:file为文件名,for会依次将file中的文件打开,并且在进行到下一个文件之前将文件读取到内存,<br> 读取方式:是把文件逐行读入,以空格或TAB为默认分隔符将每行切片<br><font color="#f15a23">例1:显示a.txt中的内容。type F.txt<br></font><span style="font-size: inherit; color: rgb(241, 90, 35);"> </span><span style="font-size: inherit;"><font color="#0076b3">for /f %%i in Fa.txt) do echo %%i</font></span><font color="#f15a23"><br></font>【执行顺序:先从括号执行,因为有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,<br>把它作为一个集合,并且以每一行作为一个元素】<br> 这里显示不全,<br><br>对比加深印象:<br>for /f %%i in (a.txt,b.txt) do echo %%i<br>for %%i in (a.txt) do echo %%i<br>
<font color="#c41230"> ["options"]关键字参数</font><br><font color="#f15a23">1、delims= 用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键</font><br><ul><li><font color="#381e11" style="font-size: inherit;">用法:</font><font style="font-size: inherit;"><font color="#0076b3"> for /f "delims= " %%i in (F.txt) do echo %%i </font><b><font color="#5c5c5c">(</font></b></font><b style="font-size: inherit;"><font color="#5c5c5c"><font style="font-size: inherit;">例2</font><font style="font-size: inherit;">)</font></font></b><br></li></ul><b style="font-size: inherit;"><font color="#000000"><br>delims将数据分割后,第一个分隔符前面的数据赋值给变量,要显示后面部分的 怎么办呢?</font></b><br><font color="#f15a23">2、tokens=x,y, m-n 取以行为元素被分割后的哪一个或者哪几个</font><br><ul><li>用法:<font color="#0076b3">for /f "tokens=2 delims= "%%i in (F.txt) do echo %%i </font><b>(例3)</b><br></li><li>token支持*通配符,如果要以空格分开的第2、3列的,就 token=2,3 或 token=2-3<br></li></ul><span style="font-size: inherit;"> 注意: 当有2个token时,</span>因为你的tokens后面要取每一行的两列,用%%i来保存第二列数据,用%%j来保存第三列。<br>当有多个token时,变量必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j,要显示更多列,往后依次排列<br style="font-size: inherit;"><ul><li>通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素。<br></li></ul><span style="font-size: inherit;"><font color="#f15a23">3、skip=n 忽略文件的前多少行 <br></font></span><font color="#0076b3"> for /f "skip=2 delims=" %%i in (F.txt) do echo %%i<span style="font-size: inherit;"><br></span></font><font color="#f1753f">4、eol=c 指定当一行以什么符号开始时,就忽略它 <br></font><font color="#0076b3"> for /f "eol=; delims=" %%i in (F.txt) do echo %%i rem 除去以分号开头的行,把其他行显示出来<br>5、</font><font color="#c41230">usebackq </font>引入它的目的是为了处理带有空格的文件名。<br> dos里,如果你要处理的文件名或路径中含有空格,直接使用会提示找不到文件,如果你双引号将文件名或路径括起来。<br>这时会被作为字符串处理,也不是作为文件处理。为应对这个情况。usebackq就出现了<br> 加入此参数,括号中的加双引号的集合,系统就认为是文件了;真正的字符串要加单引号;命令要加反引号。<br>FOR /F "usebackq eol=; tokens=1,2* delims=,- " %%i in ("d:/test.txt") do echo %%i %%j %%k<font color="#c41230"><br></font>
<font color="#924517">使用和不适用usebackq时的区别</font>
<font color="#5c5c5c">版本信息:v1.0<br>制作人:金靖淋<br>工号:sz4343<br>地点:深圳研祥智谷<br></font>时间:2020.9.6-7<br><font color="#5c5c5c">【修改】<br></font>1.学习dos基础命令<br>2.构建大致框架
版本信息:v1.1<br>时间:2020.9.9<br>【修改】<br>1.增加dos与Win区别及其他贴图<br>2.增加内容-批处理参数传递<br>3.增加wmic拓展<br>3.增加内容-NET命令
版本信息:v1.2<br>时间:2020.9.11<br>【修改】<br>1.标注重点&非重点<br>2.增加for的内容-usebackq<br>3.增加 taskstart&kill部分
版本信息:v1.3<br>时间:2020.9.14<br>【修改】<br>1.增加:开机自启动<br>2.增加:net time时间同步
收藏
0 条评论
下一页