批处农学习及实际使用,网址的代码

ca88会员登录中心

复制代码 代码如下:

一,           用set 命令设置自定义变量

    
个人学习批管理的初衷来源于实际工作;在某些迭代版本有个BS(安卓手游模拟器)大须求,从而在测试进度中就再一次提到到BS的装置卸载,当时TGP目录下有新包1个uninst_vm.bat批管理文件,双击就能够卸载BS的持有有关目录(ps:BS的局地安装文件不在TGP目录下),用nopad++查看源码(无加密):

@echo off&setlocal&cls
echo/&echo\&echo=&echo]&echo[&echo+
:start
set/p a=选取方式(1:屏蔽网址 贰:加快访问 三:删除被屏蔽的网址 四:退出):
if not defined a goto start
if %a% equ 1 (echo/&goto a)
if %a% equ 2 (echo/&goto b)
if %a% equ 3 (echo/&goto c)
if %a% equ 4 (cls&goto :eof)
cls
echo 输入错误,按大4键重新初阶… …
pause>nul
echo/&echo\&echo=&echo]&echo[&echo+
goto start
:a
set/p b= 输入要屏蔽的网址地址 (如:www.baidu.com):
>>%systemroot%\system32\drivers\etc\hosts echo 0.0.0.0 %b%
echo ********设置完结********
goto :eof
:b
set/p b= 输入要加快访问的主机IP (如:1九贰.16八.一.陆 ):
set/p bb= 输入要加速访问的主机域名(如:www.baidu.com):
>>%systemroot%\system32\drivers\etc\hosts echo %b% %bb%
echo ********设置完结********
goto :eof
:c
set/p b= 输入曾经屏蔽过的网址地址:
pushd %systemroot%\system32\drivers\etc\
>nul findstr /i “\<%b%\>”<hosts||(cls&echo/&echo
***抱歉未有找到所提供的网址地址***&goto :eof)
>>hosts.pp findstr /vi “\<%b%\>”<hosts
del /f /q hosts
ren hosts.pp hosts
popd
echo ********安装实现********
goto :eof

格式:set
[variable=[string]]

有一点小吃惊,就那样二个卸载的脚本写了如此一大堆,但与此相同的时间也勾起作者想深切精晓的兴趣,学习进程后边在讲,先来解析一下以此批管理

你也许感兴趣的文章:

  • Linux 修改
    etc/hosts文件详细介绍
  • linux系统下hosts文件详解及布局
  • Powershell小本领之编辑Hosts文件
  • 修改hosts文件使apache绑定域名指向本机
  • 选取 bat 文件制作 HOSTS
    急忙切换器
  • 浅析hosts 文件的功效及修改 hosts
    文件的法子

 variable 钦赐境遇变量名。 string 钦赐要选派给变量variable的一文山会海字符串。

@echo off

 

setlocal

例1,

set key_path=”HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_tc_dt” 
将bs在注册表的路线赋给变量

@echo off

set value_name=”InstallDir”  将值赋给变量

set var=abcd

set temp_file_name=uninst_vm_temp_2015_09_15

echo %var%

set query_str=reg query %key_path% /v %value_name%  (reg
query读取注册表的消息)

pause

set install_dir=””  变量为空

 

for /F “delims=;”  %%j in (‘%query_str%  2^>NUL’) do (

在例第11中学,set
var=abcd 是批管理装置变量的艺术。Var是变量名,而abcd则是变量名var的值。echo
%var% ,在批管理中我们要引用那些变量就把var 变量名用七个%(百分号)扩起来,如%var%

echo %%j > %temp_file_name%

 

for /f “tokens=1,2*” %%x in (‘findstr /i %value_name%
%temp_file_name%’) do (

在意:以下用法将解除变量variable 的值,使其改为未定义状态。

set install_dir=%%z

set variable=

)

下边等号前面无其它标记,倘诺写成SET
variable=””,此时变量值并不为空,而是等于八个引号,即”” 

)  
for循环里有内置一个for循环,重假如为着从挂号表里获取bs的安装路线,这里不细说,但足以重申的是for循环是批管理的着力,弄得了for你也好不轻巧熟稔了P,但无法说精晓

例2,

if exist “%temp_file_name%” del %temp_file_name%
-判定是或不是留存那几个文件,存在则删除

@echo off

if “%install_dir%” EQU “””” goto :eof 
–判断install_dir是不是为空,空则甘休goto :eof等同于exit

set var=

setlocal ENABLEDELAYEDEXPANSION 
–设置变量延迟,为什么要用到上面会详细表明

set var1=””

if “%install_dir%” EQU “” goto :eof    
—上边代码就不一一解释了大半使用的是if决断

if defined var (echo
var的值为%var%) else echo
var未有赋值
if defined var1 (echo
var壹的值为%var一%) else echo
var一未有赋值

set install_dir=%install_dir:~0,-1%

pause

set errorlevel = 2

 

set uninstaller_path=%install_dir%HD-DeployTool_Uninstaller.exe

set还足以提供二个相互分界面,让用户本身输入变量的值,然后大家在来依照这几个值来做相应操作,现在自身就来讲说set的这种语法,只需求加三个”/P”参数就足以了!

set temp_dir = “%install_dir%..\..\BlueStacks_tc_dt*”

例3,

if exist “%uninstaller_path%”  (

@echo off

“%uninstaller_path%” -f

set /p
var=请输入变量的值:

if “%errorlevel%” EQU “0” (

echo  您输入了%var%

if exist “%uninstaller_path%”  (

pause

rmdir /s /q “%uninstaller_path%\..\..\..\BlueStacks_tc_dt”

 

rmdir /s /q “%uninstaller_path%\..\..\..\BlueStacks_tc_dt1”

推行上边的批管理时,系统会唤起您:“请输入变量的值:”依旧友好入手尝试一下啊,呵呵!

rmdir /s /q “%uninstaller_path%\..\..\..\BlueStacks_tc_dt2”

 

)

 

)

二,           用set 命令进行字符串管理

goto :eof

 

)

1、字符串替换

set
uninstaller_path=”%install_dir%..\uninstaller\HD-DeployTool_Uninstaller.exe”

格式:%PATH:str1=str2%

rem echo uninstaller_path=%uninstaller_path%

乐趣正是:将字符串变量%PATH%中的str壹 替换为str二

%uninstaller_path% -f

 

rem echo uninstaller exist code is %errorlevel%

例4,

set uninstaller_path=”%install_dir%..”

@echo off

rem echo uninstaller_path=%uninstaller_path%

set a= bbs. bathome.
cn

if “%errorlevel%” EQU “0” (

echo  替换前的值: “%a%”

if exist %uninstaller_path% rmdir /s /q %uninstaller_path%

set var=%a: =%

)

echo  替换后的值: “%var%”

goto:eof

pause

BS日志搜罗

ok,通过学习1篇完整教程,大约精通了上述每行代码的功用,其实一句话来讲P正是一大堆dos命令拼凑在同步的剧本程序,所以windows上用到p的地方照旧挺多,那么通过上述例子,学以至用:BS出现bug,平时要做的业务是,搜聚bs的日子发给开拓排查,在学习p之前,搜聚的流水生产线:

1.先进入注册表找到BS的相干安装目录

二.再进入BS安装目录后找到HD-logCollector.exe,双击运行

3.再在桌面等待它在桌面生成日志

四.再将日志以邮件格局发放印度那边的开辟

别看这轻易的操作,每一日都得重复十多遍特别繁琐,P是时候来拿来用用了

征集bs日志代码:

@echo off

set key_path=”HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_tc_dt”

for /f “tokens=3” %%i in (‘reg query %key_path% /v InstallDir’) do set
str=%%i

set Hd-log_path=%str%HD-logCollector.exe

%Hd-log_path% -d

:a

if exit “C:\Users\kai\Desktop\BlueStacks-Support.zip” goto b

if not exit “C:\Users\kai\Desktop\BlueStacks-Support.zip” goto a

在投机计算机上测试ok,拿去外人计算机上运维–抱错,什么鬼,排查开掘:

若路线中有空格,则会施行倒闭如:F:\Program
Files\TGP\BlueStacks_tc_dt1\ProgramFiles\  Program
Files中设有空格,获得的门路指是F;\Program

难点出在tokens=三上,如若用tokens=三那么F:\Program后有空格,则第2段就只是F:\Program但充裕tokens=叁,四就能够把门路展现出来了,但前边还也可以有空格的话(也不可能显得完整),那就tokens=贰,*

for /f “tokens=2,*” %%i in (‘reg query %key_path% /v InstallDir’) do
(set str=%%j)

ok,修改后玩外人计算机也能健康运行了,但背后又发掘二个bug,那正是日志生成在桌面上,dos框内还在提醒日志正在转换,笔者看了1晃,Computer文件的后缀都是从没有过显得出来,难道是在那个缘故,导致剖断不了桌面上是或不是有BlueStacks-Support.zip,难点还得化解,想想用if桌面上的公文是或不是存在多少不可信,那就来推断HD-logCollector.exe这些历程是不是退出吧!这么些历程退出,那么日志料定是搜罗完了,再度修改了一下

@echo off

set key_path=”HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_tc_dt”

for /f “tokens=3” %%i in (‘reg query %key_path% /v InstallDir’) do set
str=%%i

set Hd-log_path=%str%HD-logCollector.exe

%Hd-log_path% -d

:a

tasklist | find “HD-logCollector.exe” >nul && goto a

echo 日志已成形

说好的机动发送邮件呢?那么些的确折腾了本人半天,想用blat第二插件来促成,但着实

很无语,没有发送成功,那些插件的笔者也甘休更新了,后边想用别的的方法来完成这些作用促使本人上学python,这一个十分少说

 

启用,断开互联网

  
由于测试进度中日常要效仿网络断开的气象,每一回都要去互联网设置那禁止使用互联网,13分辛勤,那就做个p吧,通过ipconfig
/all来收获适配器名称,但也遇上个坑,网络禁用后,开采启用不了,再查看一下ipconfig
/all
里面包车型地铁内容总体变了,哎哎,那咋整,未有想到好的秘籍,只能用笨的章程,那就1开首名称写到三个文件里去,用完后在剔除,下边是计划性进度

@echo off & setlocal enabledelayedexpansion

for /f “tokens=2 delims=: ” %%i in (‘ipconfig /all ^| find /i
“以太网适配器”‘)  do set “name=%%i”

set /p var=(一禁止使用网络二启用互联网)

if /i “%var%”==”1”  (

echo %name%>netsh.txt

color 4f

echo正在禁止使用网络..

netsh interface set interface name=”%name%” admin=disabled

ping -n 3 127.0.1>nul

echo互连网已禁止使用,叁S后脱离命令框

ping -n 4 127.0.1>nul

exit

)

if /i “%var%”==”2”  (

color 9f

for /f “tokens=1,* delims= ” %%i in (netsh.txt) do set name1=%%i

echo正在启用网络..

netsh interface set interface name=”!name1!” admin=enabled

ping -n 3 127.0.1>nul

del /q /s netsh.txt

echo网络已启用,叁S后脱离命令框

ping -n 4 127.0.1>nul

exit

)

pause

其实遵照for 和ipconfig拓展一下,也得以一向查看一些布局数据

@echo off

for /f “tokens=16” %%i in (‘ipconfig /all ^| find /i “IPv4地址”‘) do set
ipv4=%%i

for /f “tokens=1二” %%i in (‘ipconfig /all ^| find /i
“本地链接IPv6地址”‘) do set ipv陆=%%i

for /f “tokens=一五” %%i in (‘ipconfig /all ^| find /i “子网掩码”‘) do set
mask=%%i

for /f “tokens=15” %%i in (‘ipconfig /all ^| find /i “暗中同意网关”‘) do set
gateway=%%i

for /f “tokens=15” %%i in (‘ipconfig /all ^| find /i “DNS服务器”‘) do
set dns=%%i

echo本机IPv4地址为:%ipv4%

echo本机IPv6地址为:%ipv6%

echo本机子网掩码为:%mask%

echo本机暗许网关为:%gateway%

echo本机暗中同意DNS服务器为:%dns%

@echo off

set /p m=请输入需询问的网页域名:

nslookup %m%

echo网页IP地址询问实现。

实在下面几个p也只能表明您是个入门水平的p使用者,大拿们能用p写出魔塔那几个游乐,但自己以为学了能立刻用于实际职业中的东西正是最管用的。

上面是本人上学时记下在world文书档案里的笔记,在那之中一些代码是网络海高校神所写的,留着和睦做参谋

施行后展现:

读书笔记

@echo off & setlocal enabledelayedexpansion

::设置变量延迟

set /p k=按y系统就要十min中后主要,其余键撤废

if /i “%k%”==”y” (

shutdown -s -t 5

set /p m=按q可撤除关机设置

)

if /i “%m%”==”q” (

color 4d

echo将要撤销关机操作

set/p=■

::认为方面这一个大惊小怪,不明了干什么要加上去

for /L %%i in (1 1 10)do set /p a=■nul

echo 100%%

shutdown -a

echo将要关闭DOS窗口 多谢使用

ping 127.0.1 -n 5 >nul

goto :eof

)

if /i not “%m%”==”q” goto hh

if /i not “%k%”==”y” goto hh

:hh

set /p j=按6可进入..

if /i “%j%”==”6” goto gg

if /i not “%j%”==”6” (

echo 8八命令框将要退出

ping 127.0.1 -n 5 >nul

goto :eof

:gg

::下边代码写法很有标题,颜色跳动过快

for /L %%a in (3,-1,0) do (

echo还剩余%%aS

color 9c

ping 127.0.1 -n 2 >nul

color 6e

ping 127.0.1 -n 1 >nul

color 5d

cls

)

::上面写法可全面规避。

for /L %%a in (3,-1,0) do (

echo还剩余%%aS

set var=%%a

if /i “!var!”==”3” color 4f

if /i “!var!”==”2” color 5f

if /i “!var!”==”1” color 9f

if /i “!var!”==”0” color 0f

ping /n  2 127.0.0.1>nul

cls

)

pause

echo loding………

ping 127.0.1 -n 5 >nul

for /f %%i in (1.txt)do (start “” “C:\Program Files
(x86)\Google\Chrome\Application\chrome.exe” “%%i”

::1.TXT从那一个文件里调用数据

goto :eof

)

pause

::::::::::::::::::::::::::::::::::::::find::findstr::::::::::::::::::::::::::::

::find功效:从文件中收索字符串

::格式:find参数”字符串”路径\文件名

::参数:/V展现全部未包涵钦赐字符串的行。

::/C仅呈现包罗字符串的行数。

::/N展现行号。

::/I搜索字符串时马虎大小写。

::/OFF[LINE]毫不跳过具备脱机属性集的文书。当文件中含有要探寻的字符串时,将赶回这一个字符串所在地方的整行内容

::

::格式:findstr参数 字符串 路径\文件

::参数:/B在1行的早先配对情势。(正是指以字符串开端,begin那样就便宜了纪念)

::/E在一行的尾声配对情势。(就是指以字符串结尾,end那样就方便回想)

::/L按字选拔搜索字符串。正是将前面包车型客车””里的真是一个字符

::/CR-V将追寻字符串作为一般表明式使用。

::/S在当前目录和全数子目录中追寻相称文件。

::/I钦定搜索不分大小写。(英文:ignore忽略)

::

::::::::::::::::::::查找钦定文件的钦点内容:::::::::::::::::::::::::::::::::::

::@echo off

::for /f “tokens=1,*”  %%a in (‘findstr /i “”
“C:\Users\kai\TGP\mmog_data.xml”‘) do (

::echo %%a

::)

::pause

::

:::::::::::::::::::华丽的分割线:::::::::::::::::::::

::

::

::@echo off

::set /p m=(一禁止使用互联网2启用互联网)

::if /i “%m%”==”①”  (
                             ==是双等于号;;别忘了

::color 4f

::echo正在禁止使用网络..

::netsh interface set interface name=”Local Area Connection”
admin=disabled

::ping -n 3 127.0.1>nul

::echo互联网已禁止使用,3S后脱离命令框

::ping -n 4 127.0.1>nul

::exit

::)

::if /i “%m%”==”2”  (

::color 9f

::echo正在启用网络..

::netsh interface set interface name=”Local Area Connection”
admin=enabled

::ping -n 3 127.0.1>nul

::echo互联网已启用,三S后脱离命令框

::ping -n 4 127.0.1>nul

::exit

::)

::pause

::

::上面写法有为数大多局限性

::

::下边是本人要好收十的:大旨知识,变量延迟,批管理是单排(一条命令,一条命令往下实施!!!!!!)

@echo off & setlocal enabledelayedexpansion

for /f “tokens=2 delims=: ” %%i in (‘ipconfig /all ^| find /i
“以太网适配器”‘)  do set “name=%%i”

set /p var=(一禁止使用网络二启用网络)

if /i “%var%”==”1”  (

echo %name%>netsh.txt

color 4f

echo正在禁止使用互联网..

netsh interface set interface name=”%name%” admin=disabled

ping -n 3 127.0.1>nul

echo网络已禁用,三S后退出命令框

ping -n 4 127.0.1>nul

exit

)

if /i “%var%”==”2”  (

color 9f

for /f “tokens=1,* delims= ” %%i in (netsh.txt) do set name1=%%i

echo正在启用互连网..

netsh interface set interface name=”!name1!” admin=enabled

ping -n 3 127.0.1>nul

del /q /s netsh.txt

echo网络已启用,叁S后退出命令框

ping -n 4 127.0.1>nul

exit

)

pause

::::::::::::::::::::::::::::::::::::::获取本地连接的名目:::::::::

::::::::::::::::::::::::::::

::@echo off

::for /f “tokens=2*” %%a in (‘ipconfig^|findstr “以太网适配器”‘) do set
“ipname=%%b”解释一下为啥用%%b %%b代表的是第1有的数量

::for /f “tokens=1* delims=:” %%i in (“%ipname%”) do echo
%%i(delims=:空格不能够少),假诺不加delims则默感觉空格,借使加上delims,则不会暗中认可空格

::pause>nul

::

::

::::::::::::::::::::::::::::::::::::::例子::::::::::::::::::::::::

::为啥本地连接IPV陆地址 是tokens=1贰翻看一下就很明了地面链接
 (IPv6地址. . . . . . . . :
fe80::4玖d九:9c一柒:九三dd:7379%六(首要推荐))地址.那些是用作一段的,因为未有空格,delims未有的话,暗中认可正是空格分段!!

::@echo off

::for /f “tokens=16” %%i in (‘ipconfig /all ^| find /i “IPv4地址”‘) do
set ipv4=%%i

::for /f “tokens=12” %%i in (‘ipconfig /all ^| find /i
“本地链接IPv⑥地址”‘) do set ipv6=%%i

::for /f “tokens=一五” %%i in (‘ipconfig /all ^| find /i “子网掩码”‘) do
set mask=%%i

::for /f “tokens=一五” %%i in (‘ipconfig /all ^| find /i “暗中同意网关”‘) do
set gateway=%%i

::for /f “tokens=15” %%i in (‘ipconfig /all ^| find /i “DNS服务器”‘) do
set dns=%%i

::echo本机IPv4地址为:%ipv4%

::echo本机IPv6地址为:%ipv6%

::echo本机子网掩码为:%mask%

::echo本机暗中同意网关为:%gateway%

::echo本机暗中同意DNS服务器为:%dns%

::

::

::@echo off

::set /p m=请输入需询问的网页域名:

::nslookup %m%

::echo网页IP地址询问达成。

:::::::::::::::::::::::::::::查mac地址:::::::::::::::::::::::::

::@echo off

::getmac

::echo MAC地址询问达成。

::goto exit1

::

::

::

::  ~I         -删除任何引号(“),扩张%I

::     %~fI        -将%I扩充到一个一心合格的路线名

::     %~dI        -仅将%I扩张到一个驱动器号

::     %~pI        -仅将%I扩展到五个路径

::    %~nI        -仅将%I扩大到1个文书名

::     %~xI        -仅将%I扩大到一个文书扩充名

::     %~sI        -扩大的门道只蕴含短名

::     %~aI        -将%I扩张到文件的文件属性

::     %~tI        -将%I扩大到文件的日子/时间

::     %~zI        -将%I扩充到文件的高低

::    %~$PATH:I   -查找列在门路遭遇变量的目录,并将%I扩张

::到找到的第二个完全合格的称号。假设蒙受变量名

::未被定义,或然未有找到文件,此组合键会扩展到

::空字符串

::

::能够整合修饰符来获得多种结果:

::

::     %~dpI       -仅将%I扩大到2个使得器号和路径

::     %~nxI       -仅将%I增添到1个文本名和壮大名

::     %~fsI       -仅将%I扩大到一个含有短名的共同体路线名

::     %~dp$PATH:i -查找列在门路碰着变量的目录,并将%I扩充

::到找到的第2个驱动器号和路径。

::     %~ftzaI     -将%I扩展到类似输出线路的DI陆风X8

::差别是 比如%cd%是C:\test

::那么%~dp0就是C:\test\

::多一个\

::

看上边包车型大巴例子,在“%0”参数变量上进展增添:

1

2

3

4

5

6

7

8

9

10

11

12@echooff

echo正在运作的这些批管理:

echo完全路线:%0

echo去掉引号:%~0

echo所在分区:%~d0

echo所处路线:%~p0

echo文件名:%~n0

echo扩展名:%~x0

echo文件属性:%~a0

echo修改时间:%~t0

echo文件大小:%~z0

pause

保存为批管理文件并实行既能够见见不一致的效果。

正在运维的这一个批管理:

一心路线:”C:\Users\kai\Desktop\批管理自动化\test.bat”

去掉引号:C:\Users\kai\Desktop\批处理自动化\test.bat

所在分区:C:

所处路线:\Users\kai\Desktop\批管理自动化\

文件名:test

扩展名:.bat

文件属性:–a——–

修改时间:2014/04/拾 14:18

文件大小:227

实则,变量的扩展不唯有用于“%0”参数,还是能够利用到具备的变量上,包罗“for”循环语句中的不时变量,可是诸多情景下用在“for”循环的一时变量上。经过测试这种单字符变量增添的主意只可以用于一时变量或参数变量的庞大上。

::@echo off

::for /f “delims=” %%i in (“%cd%”) do set folder=%%~ni

::echo %folder%

::pause

::

::

::

::

:::::::::::::::::::::::::::::::::::dir::::::::::::::::::::::

::::

::DIR [drive:][path][filename] [/A[[:]attributes]] [/B]
[/C] [/D] [/L] [/N]

:: [/O[[:]sortorder]] [/P] [/Q] [/R] [/S]
[/T[[:]timefield]] [/W] [/X] [/4]

::  [drive:][path][filename]

::钦点要列出的驱动器、目录和/或文件。

::  /A呈现全体钦赐属性的文本。

::属性D目录奥迪Q7只读文件

::               H隐藏文件A希图存档的公文

::               S系统文件I无内容索引文件

::               L解析点-表示“否”的前缀

::  /B使用空格式(未有标题新闻或摘要)。

::  /C在文件大小中显得千位数分隔符。那是私下认可值。用/-C来

::禁用分隔符显示。

::  /D跟宽式同样,但文件是按栏分类列出的。

::  /L用小写。

::  /N新的长列表格式,其中文件名在最右侧。

::  /O用分类顺类别出文件。

::排列顺序N按名称(字母顺序)     S按大小(从小到大)

::               E按增添名(字母顺序)   D按日期/时间(从先到后)

::               G组目录优先-反转顺序的前缀

::

::

::::::::::::::::::::华丽的分割线:::::::::::::::::::

::

::

::@echo off

::if “%1” == “h” goto begin

::mshta vbscript:createobject(“wscript.shell”).run(“””%~nx0″”
h”,0)(window.close)&&exit

:::begin

::上边是先后静默运转代码(可是会有缺点,会闪烁一下),为了消除这一个题目不得不用到vbs了

::将下边包车型大巴代码保存为.vbs文件,把test.bat改成你的批处理文件,然后运维.vbs文件

::set GuWS=WScript.CreateObject(“WScript.Shell”)

::GuWS.Run “test.bat”,vbhid

::

::

::for %%i in ( d h g ) do (

::xcopy /c /s %%i:\*.txt  h:\kk\
   /c尽管有报错也一连运行/s复制目录和子目录, 不包蕴空目录
 把dhg盘下含txt的公文和文书夹全体拷入h:下的kk文件夹内

::)还要非常注意的某个是xcopy /c /s %%i:\ff  h:\kk\
    ff是文本夹名称,不可能那样谢,只好ff/*

::

::

:::::::::::::::::::::::::::::::::华丽的分割线::::::::::::::::::::

::

::rd /s /q c:tjj结果时直接删除tjj这几个文件夹/q为静默删除 无需确定

::md c:\文本夹名   创立二个新的文件夹

::del /s /q  c:\文件夹名     只可以删除文件,但无法去除文件夹

::Del /F /A /Q \\?\%1

::RD /S /Q \\?\%1

::解释:del”是删除三个或数个文本,”/F”是挟持删只读文件,”/A”是基于属性选取需求删除的文本,”/Q”是删除全局通配字符时没有须要确认,就是所谓的熨帖格局:

::奥迪Q3D的效应是删八个目录或文件夹,”S”是除目录本身外,还将同有时间删除钦点目录下的全部子目录和文件,”/Q”是宁静方式

::创立好bat,被挤占的文本拖到batLogo上就会直接删除了

::

::::::::::::::华丽的分割线::::::::::::::::::::::::::::::::

::

::taskkill /f /im notepad.exe /im
qq.exe强制杀死有个别进程(可杀死七个过程)/f强制杀掉进度/im进度印象名

::tasklist | find “进度名” >nul || start “”
“A.bat”该工具突显在地面或远程机器上最近运作的经过列表。

::

::

:::::::::::::::::::::::::::::华丽的分割线::::::::::::::::::::

::set用法

::一.字符串替换  语法:%path:str一=str二%将%path%中字符串str壹全体交替为str二

::举个栗子

::@echo off

::set a=bbs.vreybat.cn

::echo呼唤前的值:”%a%”

::set var=%a:.=日你哥%

::echo替换后的值:”%var%”

::pasue

::施行结果为bbs日你哥verybat日您哥cn

::set /p var=…..(那几个不是变量值)
 /p正是提供三个互相分界面,让用户自个儿输入

::

::set “d=%a%”这种写法想到给个转义字符!

::

::

::

::二.字符串截取  语法%a:~m,n%
 ~能够知道为“偏移”m为偏移量(不写则为0),n为截取长度(省略为一体)

::举个栗子

::@echo off

::set a=bbs.verybat.cn

::set var=%a:~1,2%

::echo %var%

::pause

::实践结果bs那是干什么吧?偏移=一也就说重第三个b先河,突显数量=贰就b前边展现3个字符串
  那么推行结果就是bs

::

::

::::@echo off

::set a=bbs.verybat.cn

::set var=%a:~-3%

::echo %var%

::pause

::实施结果为.cn那些类比的例证作者就无需再强调那样多,不懂面壁去

::

::

::::::::::::::::::华丽的分割线:::::::::::::::

::

::

::把bat用注册表的措施出席运行项

::reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v
runbat /t REG_SZ /d f:\a.bat /f

::这里再补充一下nul的用法

::

::>nul屏蔽命令的出口内容

::二>nul疲敝错误内容

::一>nul禁止输出准确消息

::

::::::::::::::::::::::::::::::::::::::清ie缓存:::::::::::::::::::::

::  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8

::清除Cookies

::  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2

::清除历史记录

::  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1

::清除表单数据

::  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16

::清除密码

::    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

::清除上述全体体系

::  RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351

::清除上述任何类型,以及IE7中运用的加载项所保存的种种数据

::

::

:::::::::::::::::::::::::::::::::::::::::::::for语句里用屏蔽:::::::::::

::网上朋友例如

::即使copy2个不存在的文件aaa.test,用copy c:\aaa.test d:\sddd
一>nul
2>nul就可以屏蔽掉运营的谬误结果“找不到文件”,你将看不到任何报错.

::可是要是把同样的指令运用到FOEscort语句中就倒霉使了,举个例子:

::for /f %i in (‘dir c:\*.txt /b’) do copy c:\%i d:\sddd_%i
1>nul 2>nul

::结果延续会报错说“找不到文件”。

::偶想问大虾们怎么样才干在FO智跑句中也屏蔽掉错误吗???

::上边写法能够健全规避

::for /f %%i in (‘dir c:\*.txt /b  2^>nul’) do copy c:\%%i
d:\sddd_%%i 2>nul 1>nul

::

::

::

::::::::::::::::::华丽的分割线::::::::::::::::::

::批管理相比数值大小lss equ gtr的用法

::举个门路

::@echo?off?

::set?/p?第一个数=请输入第一个数?set?/p?第二个数=请输入第二个数?

::if?%次之个数%?lss?%首先个数%?goto?hero?

::if?%次之个数%?equ?%第一个数%?goto?her?

::if?%次之个数%?gtr?%第三个数%?goto?he?

::

::

::::::::::::::变量延迟::::::::::::::::::::::::::::::::::

::举个栗子

::@echo off

::setlocal enabledelayedexpansion

::echo ^^!

::pause

::因为启用了变量延迟  所以输出结果为!   未有启用变量延迟输出^!

::变量延迟一般在复合语句中用的可比多

::@echo off

::for /l %%i in (1 1 10) do (

::    set var=%%i

::    echo %var%

::)

::pause

::运维方面包车型大巴代码,呈现怎么?显示13个echo处于关闭状态。

::依据逻辑,var的值应该依次是一、2、三……..10才对呀!

::那就是因为未有打开延迟变量的来头,cmd把var的值当作复合语句在此之前的值来引用,复合语句:一对括号里(
)的兼具命令是复合语句;通过管道命令&、&&、|、||连接起来的指令也是复合语句。,

::而在本例中,复合语句在此以前并从未给var定义,所以var的值是空的,所以会来得十三个echo处于关

::通俗的话 正是批管理他妈的指认行,不认命令数量
()里的一声令下只看做1行来拍卖  所以

::echo %var%行使的是var那一个向来没概念过的变量    懂??
  这都不懂你就没须要往下看了

::使用了“setlocal enabledelayedexpansion”后,即使在复合语
句之外引用变量,则使用%var%或!var!都以足以的。

::若想在复合 语句中引用复合语句即时获得的变量,则必须利用!var!。

::倘使在复合
语句中或许使用%var%变量,那么获得的变量将是复合语句在此以前var的值,

::此时一经var在复合语句在此以前从没概念,那么值为空值

::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::

::比如set /p=wind

::>nul是挡住命令的输出内容

::比如pause >nul

::还大概有3个2>nul

::也是遮挡的效用,不过是遮掩错误的剧情

::比如

::del wind 2>nul

::即便未有wind文件,也不会有提示

::

::

::管道命令用法

&连接符,命令格式[…] command一 &
command二用来分隔三个命令行中的三个指令。Cmd.exe运转第6个指令,然后运行第叁个指令。

如:

@echo第1个指令&@echo第3个指令

&&代表上一句试行成功,命令格式[…] command一 &&
command二只有在符号&&前面包车型地铁指令成功时,才用于周转该符号前面包车型大巴通令。Cmd.exe

运营第一个指令,然后唯有在率先个指令运营成功时才运营第壹个指令。

如:

@echo测试>>测试.txt&&@echo
*********测试.txt写入成功********

||代表上一句推行倒闭,命令格式[…] command一 ||
command3唯有在符号||后面包车型大巴命令退步时,才用于运转标识||前面包车型地铁指令。

Cmd.exe运维第二个指令,然后唯有在第四个指令未能运营

如:

dir *.pdf||echo
*************尚未找到pdf文件**************

|管道符,那么些命令的作用不平等了,正是让前一命令的出口当做后一命令的输入,正是说后面命令的结果作为一个参数字传送递给末端命令管理

如:

help|more

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::@echo off

::title圆周率总括程序

::echo按大四键起始企图&
pause>nul那个企划的没有错,能够按自便键举行下一步(做个个暂停管理)

::echo总结拓展中,进程请看标题栏…

::set i=0

:::loop

::if %i% lss 10000 (

::set /a i+=1

::title圆周率计算程序   当前计量到第%i%位

::这里是为着更显然点看到展现的效果,所以增多3个岁月推迟。

::ping /n 1 127.1>nul

::goto :loop

::)

::Pause

::

::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::mod设置cmd的窗口大小

::语法格式:mode con cols=1一三 lines=一伍    1一3列宽一五列是高

::

::

::::::::::::::::::::轻巧门船解说一下goto和call的分裂::::::::::::::::

::1、书写格式,goto前边的价签前能够有冒号也足以未有冒号,call前边标签前务需求有冒号。

::二、goto跳转到目的程序段后,就相继试行下去,直到程序试行达成。call跳转到指标程序段后,会将指标程序施行完,然后重临call原本的地点,然后继续实践下去。

::大家在同3个文书夹下,有a.bat和b.bat三个批管理文件,

::a.bat里面包车型客车代码为:

::@echo off

::set /p var=请选择(Y/N):

::if /i “%var%”==”Y” call b.bat

::echo a.bat实践完成。

::pause >nul

::b.bat里面包车型客车代码为:

::@echo off

::echo Hello World!

::start explorer.exe

::echo b.bat推行完成。

::pause >nul

::大家双击实施a.bat,实践结果如下 请选取(Y/N):Y Hello World!
b.bat试行完结。a.bat实践实现。

::并且,Computer实在打开explorer后才显得a.bat执行实现的。

::@echo off

::set var=123

::call :loop

::pause>nul & goto :eof

:::loop

::set /a var+=1

::echo var=%var%

::pause>nul

::要是上边程序尚未goto :eof退出语句,那么程序会显示五次数据,

::一次是124,一次是125

::

::call带参数的状态

::例一

::@echo off

::call :an hello世界!

:::an

::echo %1

::echo %2

::pause>nul

::输出为:

::hello

::世界!           (%1代表第1个参数,%二代表第一个参数)

::注意的是  主程序里,不可用%1~%玖的样式调用子程序参数

::

::@echo off

::set sum=0

::call :sub sum 10 20 35

::echo数据求和结果: %sum%

::pause>nul

::goto :eof :sub

::set /a %1=%1+%2

::shift /2

::if not “%2″==”” goto sub

::程序输出为65。

::解释一下shtift /二该命令是从第n个参数开头运动,n介于0~8之间

::shift /二会将%三运动到%2,将%④移位到%三,但并不影响%0和%一.

::别的注意的是set命令不容许set /a
%一=%2+%三这种将数值直接赋值到参数的计量(set /a 三=四+伍一模二样不允许)

::::::::::::::::::::start::::::::::::::::::::::::::::

::

::@echo off

::start D:\Tencent\QQ\Bin\QQ.exe

::start C:\批管理教程.txt

::::打开E盘

::start E:

::exit

::下面程序会按梯次依次施行张开腾讯软件–>张开《批管理教程》–>打开E盘,完结后批管理公事自动自己关闭。

::注:由于DOS命令对于调用外部程序的优先等级区别,.exe可以省
略,但.txt就无法大约了。

::这里提倡不要区分要不要写,统1将后 全写上的大好作风,确认保证程序安若青城山

::

::

::

:::::::::::::::::::::::::::::::::errorlevel::::::::::::::::::::::::::::::::::::::::::

::if
errorlevel那些句子必须放在某2个限令前边,推行完该命令后才有它推断命令的重返值

::很几个人认为errorlevel里,成效率0表示,失败用1意味着,实际上,errorlevel的值能够是0~255中的放肆叁个数值。看上边包车型客车例证就驾驭了(假设大家的管理器未有Z盘):

::程序例子:

::@echo off

::dir c:

::if errorlevel 1 goto 1

::if errorlevel 0 goto 0

::exit :0

::echo命令实践成功!

::goto exit

:::1

::echo命令实行停业!

::goto exit

:::exit

::pause

::但假诺dir Z:根本就从未z盘 那么上述代码显示景况全为成功,
 就正是干什么不可能一定说重返值为1就是没戏的来头了

::

::

::

:::::::::::::::::::::::::::::::if:::::::::::::::::::

::使用if else else必须和if在同1行

::@echo off

::set /p word=请输入三个假名:word后边不可能有空格 不然会赋值退步

::if /i “%word%” == “a” (echo a) else (

::if /i “%word%” == “b” (echo b) else echo not A an not B

::)

::pause

::注意:else后边必然要跟3个左括号,提醒程序前面内容是富含在else里面的,不然左括号放到下壹行程序头,程序就出错了

::注意,if的标准前边必然要紧跟八个空格!

::if 2 neq 3(

:: echo Hello!

:: echo world!

:: )

::if 2 neq 3 (

:: echo Hello!

:: echo world!

::)

::那是二种写法,初学者1疏忽就写成地点写法,

::在条件二 neq 三前面 未有空格,导致程序语法错误,

::而且因为是括号的原故,还愣是查不 出原因!第二种写法才正确,切记切记

::

::

::::::::::::::::::::::::::%random%收获随机数::::::::::::::::

::

::@echo off

::setlocal enabledelayedexpansion

::for /l %%i in (1,1,10) do echo !random!

::pause

::因为用了变量延迟,所以可以获得是个不等的随便数

::如若大家要发出钦赐区间的私行数,能够用这种格式:%random%%%(max-min+一)+min发生[min,max]区间里的妄动数,

::注:批处理中求模得用三个%%符 号

::程序例子,得到1到10以内的自由数字:

::@echo off

::set /a num=%random%%%10+1

::echo %num%

::pause

::在此处,表明式%random%的%符号不再是不值一提的了

::@REM产生10个[4,12]间的妄动数

::@echo off

::REM启用延迟情状变量扩充

::setlocal enabledelayedexpansion

::REM设置随机数的细微和最大值以及求模用的变量

::set min=4

::set max=12

::set /a mod=!max!-!min!+1

::for /l %%i in (1,1,10) do (

::REM产生[min,max]以内的轻松数

::set /a r=!random!%%!mod!+!min!

::echo.

::echo随机数%%i:!r!

::)

::pause>nul

::

::下面的例子老夫又便捷了弹指间

::@echo off

::setlocal enabledelayedexpansion

::for /l %%i in (1,1,4) do (

::set /a r=!random!%%10+1

::echo.

::echo随机数%%i:!r!

::)

::pause

::

::上边输出结果的展现方式不是很好,1行只输出三个指,想要把那一个数全展现在平等行,作者又加工了弹指间代码

@echo off

setlocal enabledelayedexpansion

echo北京蓝球号码是:

for /l %%i in (1,1,6) do (

set /a r=!random!%%36+1

set /p =!r!nul

)

echo .

echo栗色球号码是:

set /a b=%random%%%36+1

ping /n 2 127.0.0.1>nul & set /p =!b!

pause>nul

::这个set /p =提示语

::

::::::::::::::::实时显示时间:::::::::::::::::::::::::::::

::@echo off

::time抽出时间值,-三表示不展现后三个人字符。这几个格式只体现时间的时、分、秒。

::echo %time:~0,-3%

::ping -n 2 127.1>nul&cls&%0

::pause

::

::

::

:::::::::::::::::::::::::::for:::::::::::::::::::::

::标准格式FO途睿欧 [-d | -l | -r | -f] %%variable IN (set) DO command
[command-parameters]

::for也能够未有别的按钮for %%i in (*) do echo
%%i那条命令的变量%%i取值*,而不是取具体值,那么这里就有独特的
含义:表示突显当前目录下,全部非文件夹的文本名字。 (包 括.rar  .jpg
 .exe  .bat  .sys等等全部非文件夹)

::for /d %%variable in (set) do command
[command-parameters]寻觅set(能够包罗通配符*和?)里的文件夹后举行钦命的Command。用于目录寻找,不会搜索文件。

::通配符*和?的区别:*表示率性n个字符,用3个*标记就够了。而?表示任性七个字符,
必要抒发“十分的少于k个字符的文书夹”,就写上k个?,放肆多个中 文都算0个字符。

::举个例子:???多少个问号,不止意味着有多个假名的公文夹,还包含一个字母的文件夹和八个字母的文书夹,全部那些都会被搜寻出来。

::*********注意/d只可以突显文件夹名字,无法展现文件名字

::@echo off

::for /d %%i in (C:\”program files”*) do echo %%i

::pause

::运转结果将C:\program files里面包车型客车有着文件夹都显得出来了。

::注意, 因为“program files”含有空格,所以必须用双引号,不然出错。

::总的来讲/d的讲话是没个卵用的,但为了是新手们都能学习到,就啰嗦了须臾间

::

::上边讲明一下/r能够把如今仍然你钦命路径下的文本名字全体读取,注意是文本名
字。

::语法::FOR /R [[drive:]path] %%variable IN (set) DO command
[command-parameters]

::@echo off

::for /r c:\ %%i in (*.exe) do echo %%i

::pause

::把c盘下的exe文件都列出来了

::

::/L

::语法FOR /L %%variable IN (start,step,end) DO command
[command-parameters]

::注意:在循环里,大家不得以改动循环变量的值

::举个谬误的例证扶助新手们领会一下

::@echo off

::setlocal enabledelayedexpansion

::for /l %%i in (1,1,10) do (

::                           set %%i+=10

::                          echo %%i

:: )

::pause

::上面程序施行出错

::

::

::/F

::FOR /F [“options”] %%variable IN (file-set) DO command
[command-parameters]

::文件名file-set不用引号(如若文件名含有空格时,就须求借助usebackq了)

::FOR /F [“options”] %%variable IN (“string”) DO command
[command-parameters]

::字符串string要用双引号

::FOR /F [“options”] %%variable IN (‘command’) DO command
[command-parameters]

::命令command要用单引号

::注意:带引号的字符串”options”包含1个或八个钦赐分歧解析选项
的显要字:eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq。

::eol=c忽略全体以C发轫的行

::@echo off

::for /f “eol=举” %%i in (D:\静夜思.txt) do echo %%i

::pause >nul

::输出结果为::

::床前明月光,

::疑是地上霜;

::低头思故乡

::

::要小心的是eol=call格式不可能屏蔽以空格开头的行,想屏蔽空格能够”eol=”就行了

::

::skip=n忽略前N行的情节(N不能够等于),必须大于0)

::

:::delims=XXX(XXX是背定义的暗记,该符号在文件中设有,将用作分隔符)

::FOR /F “Delims=符号” %%I   IN (Command1)   DO Command2

::”delims=”,没指明什么符号作为分隔符,那么程序将以为文件未有分隔符,全体内容都会被展现

::对usebackq总结:usebackq能够认为仅仅用于当路线或文件名有空格时的场馆。

::格式:for /f  “usebackq” %%i (“C:\program files\temp.txt”) do echo
%%i

::计算机会以为“C:\program files\temp.txt”是三个文
件的完整路线,对该路径的文书进行操作。

::今后都抬高那个”delims=”上边代码里,有三个”delims=”,它的功效是便是文本包蕴空格,也
能够呈现全部剧情

::

::

::

::

::

::for实际运用样例(/f的利用不列出来):

::for %%i in (*) do echo %%i

::显示当前目录下,全体非文件夹的文本名字。(包 括.rar .jpg .exe .bat
.sys等等全数非文件夹)

::for %%i in (*.*) do echo %%i

::搜索当前目录下的富有文件。

::for /d %%i in (*) do echo %%i

::寻找当前路线下具有文件夹的名字。

::for /d %%i in (C:\abc\”ef gh”*) do echo %%i

::搜索C盘abc文件夹里ef gh文件夹里面包车型大巴兼具文件的名字。

::for /d %%i in (C:\”program files”\????) do echo %%i

::搜索C盘program files文件夹里,文件夹名称叫一~五个字符的享有文件夹。

::for /d %%i in (win??????????) do @echo %%i

::寻觅当前路径下以win开头,前边名字十分的少于十三个字符的有所文件夹。

::for /d %%i in (C:\”program files”\win*) do echo %%i

::搜索C:\program files文件夹里,全数以win发轫的公文夹。

::for /d  %%i in (C:\windows\w???) do echo %%i

::搜索C:\windows全部以w开首,名字不当先陆个字符的公文夹。

::for /d  %%i in (C:\windows\wbem) do echo %%i

::这种搜索就没多概略思了,计算机在C:\windows搜索到wbem就显
示:C:\windows\wbem,不然不出示。

::for /r c:\ %%i in (*.exe) do echo %%i

::搜索C盘下包蕴子目录的全体exe文件。

::for /r %%i in (*.txt) do @echo %%i

::搜索当前路径目录树(当前剧本所处的门径)的全部txt文件。

::for /r C:\”program files” %%i in (????.txt) do echo %%i

::搜索C:\program files目录树的享知名字十分的少于伍个字符的txt文件。

::for /r C:\windows %%i in (*) do echo %%i

::搜索C:\windows目录树的持有文件。

::for /r C:\”program files” %%i in (*.???) do echo %%i

::搜索C:\program files目录树下全部扩充名不超过1个字符的装有文件。

::for /r C:\windows %%i in (???.??) do echo %%i

::搜索C:\windows目录树下全数文件名不超越一个字符并且扩展名不
超越1个字符的文本。

::for /r C:\”program files” %%i in (???.*) do echo %%i

::搜索C:\program files目录树下文件名不超越三个字符的富有格式文件。

::for /r C:\ %%i in (win*) do echo %%i

::搜索C盘全体文件名以win初始的文件。

::for /r C:\ %%i in (win*.e??) do echo %%i

::寻找C盘全部文件名以win开首,并且扩大名字为e开始且不当先二个字符的全部文件。

::for /r C:\ %%i in (boot.ini) do if exist %%i echo %%i

::寻觅整个C盘,寻觅boot.ini文件。

::那是寻找具体文件名的例证,大家必定要记得用exist判定文件是不是存在,存在才输出,不然全体C盘的文本都会被输出。

::for /r C:\windows %%i in (.) do echo %%i

::枚举C:\windows目录树的具备文件。

::for /l %%i in (1,1,100) echo %%i

::循环玖拾捌回,并且输出从一到十0的连天数字。

::for /l %%i in (100,-2,0) echo %%i

::循环四15回,并且输出从十0到0的接连偶数。

::@echo off

::set str=c d e f g h i j k l m n o p q r s t u v w x y z

::echo当前硬盘的分区有:

::for %%i in (%str%) do if exist %%i: echo %%i:

::pause

::这段代码能检查实验硬盘都有哪些分区,包涵U盘和移动硬盘的分区,
然则,当光驱中有盘的时候,也会被列出来,这是三个不满

::

::

::若是有括号包涵set /a总结表达式,表明式也许有括号,那么表达式的
括号必须用转义字符,不然会显示括号不成对:

::@echo off

::setlocal enabledelayedexpansion for /l %%i in (1,1,10) do (

::                                              set /a var=(%%i+1^)*2

::echo !var!

::)

::pasue

::注意到地点set /a var=(%%i+一^)*二括号有一个转义字符。

::::::::::::::::查注册表内定数量:::::::::::::::::::::::

::有bug非凡代码,若路线中有空格,则会实施停业如:F:\Program
Files\TGP\BlueStacks_tc_dt1\ProgramFiles\   Program
Files中留存空格,得到的路线指是F;\Program

::@echo off

::set key_path=”HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_tc_dt”

::for /f “tokens=3” %%i in (‘reg query %key_path% /v InstallDir’) do
set str=%%i

::set Hd-log_path=%str%HD-logCollector.exe

::%Hd-log_path% -d

:::a

::if exit “C:\Users\kai\Desktop\BlueStacks-Support.zip” goto b

::if not exit “C:\Users\kai\Desktop\BlueStacks-Support.zip” goto
a再度重申一回exist才是存在的情致!!!!!!Exit是脱离!!!!!!!
别他妈犯这么低等的失实

:::b

::echo日志已在桌素不相识成,感激使用

::pause >nul

::正确写法:
为啥呢??Delims=不写,则暗中同意空格分段,假诺用tokens=三那么F:\Program后有空格,则第3段就只是F:\Program但拉长tokens=3,4就能够把渠道显示出来了,但背后还大概有空格的话(也无法呈现完整)

::@echo off

set key_path=”HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_tc_dt”

for /f “tokens=2,*” %%i in (‘reg query %key_path% /v InstallDir’) do (

set str=%%j

)

set
Hd-log_path=”%str%HD-logCollector.exe”那个也要小心一下,要用双引号括起来!!

%Hd-log_path% -d

pause >nul

::

::这里补充for语句详解

FOR %%variable IN (set) DO command [command-parameters]

一、for、in和do是for语句的首要字,它们四个必要;

二、%%I是for语句中对格局变量的引用,固然它在do后的说话中从未加入语句的推行,也是必须出现的;

叁、in之后,do以前的括号无法大约;

肆、command一表示字符串或变量,command二表示字符串、变量或指令语句;

壹、for语句的样式变量I,能够换到2四个字母中的自便3个,那几个字母会区分轻重缓急写,也正是说,%%I和%%i会被以为不是同3个变量;方式变量I还足以换来任何的字符,然则,为了不与批管理中的%0~%玖那十三个方式变量产生抵触,请不要随便把%%I替换为%%0~%%九中的肆意三个;

二、in和do之间的command一表示的字符串或变量能够是三个,也足以是三个,每叁个字符串或变量,大家誉为1个因素,各样成分之间,用空格键、跳格键、逗号、分号或等号分隔;

3、for语句依次提取command第11中学的每二个因素,把它的值赋予形式变量I,带到do后的command第22中学参与命令的施行;并且每趟只领到三个因素,然后实行叁回do后的下令语句,而不论是这么些因素是还是不是被带到command第22中学到场了command二的运维;当推行完三次do后的说话之后,再领取command第11中学的下一个要素,再推行一次command二,如此循环,直到command第11中学的全部因素都曾经被提取完结,该for语句才宣布实施达成;

里面,第壹点是可是主要的,它讲述了for语句的实践进程,是for语句的卓越所在,我们自然要切记这一条,本领深切明白更为复杂的for流程。

二、无论for语句做何种变化,它的试行进程依旧遵照基本的for流程:依次拍卖各类成分,直到全部的要素都被拍卖实现。只可是在for
/f语句中,这里的元素是指文件中的每一行,也正是说,for
/f语句是以行为单位管理公事文件的。这是一条极为首要的平整,在上壹章中也重申过它的着重,希望在接下去的读书进度中,你能随时牢记这一口径,那么,繁多难题将会缓慢解决

注脚那么些说法的代码也很简短

@echo off

for /f %%i in (test.txt) do echo %%i&pause

Pause

尝试把,是还是不是每回都只展现一行呢。

事例文本内容如下

Code1

论坛的靶子是:不求最大,但求最佳,做最实用的批管理论坛。

论坛地址:bbs.bathome.net。

那边是:新手晋级的乐土,高手论剑的净土。

切分字符串的利器:delims=

@echo off

for /f “delims=,” %%i in (test.txt) do echo %%i

Pause

地方code一的文本会变成:

论坛的对象是:不求最大

论坛地址:bbs.bathome.net。

那边是:新手进级的福地

请按任性键继续…

举例”delims=,.”(符号列表做表达)那么输出结果将是

论坛的靶子是:不求最大

论坛地址:bbs

此间是:新手进级的米粮川

请按任性键继续…

在此间,大家引进了八个新的开关:”delims=,”,它的意义是:以逗号作为被拍卖的字符串的相间符号。

在批管理中,内定分隔符号的艺术是:添加三个形如”delims=符号列表”的按键,那样,被拍卖的每行字符串都会被标志列表中罗列出来的号子切分开来。(为啥是符号列表上边做了表达)

急需小心的是:假如未有一点点名”delims=符号列表”那几个开关,那么,for
/f语句暗中同意以空格键或跳格键作为分隔符号。

逐行读取test.txt中的内容,以点号和逗号切分每一行的剧情(不设有一点点号和逗号的行,则不再切分,为了描述的有利,大家把被点号或逗号切分的二个3个的字符串片段,称之为节),然后,for
/f会提取第叁节的开始和结果作为最后结出,展现在荧屏上。需求注意的是,在那边,全数行的字符串被切分成了七个以上的节,可是,[code7]的代码只会领取第三节字符串的内容,因为for
/f语句私下认可只领到第一节的符串。

::

::定点提取tokens=

::文本txt内容如下

::尺有所短,寸有所长,学好批管理没斟酌,思考难题复杂化,解决难点简洁化。

::代码

@echo off

for /f “delims=,tokens=2,5” %%i in (test.txt) do echo %%i

Pause

运作开采只展现2的数额,5的数额确提取不到

解释:

若是tokens=前面钦命了多少个数字,假诺格局变量为%%i,那么,第二个数字代表的剧情用第一个情势变量%%i来选拔,第三个数字代表的从头到尾的经过用第贰个情势变量%%j来接收,第8个数字代表的剧情用第7个花样变量%%k来接收……第N个数字代表的从头到尾的经过用第N个格局变量来接受,当中,方式变量遵从字母的排序,第N个情势变量具体是怎么符号,由第三个花样变量来调节:假使第贰个格局变量是%%i,那么,第三个花样变量正是%%j;假若第一个花样变量用的是%%x,那么,第一个方式变量正是%%y。

从而代码改成这么就缓和了

@echo off

for /f “delims=,tokens=2,5” %%i in (test.txt) do echo %%i %%j

Pause

比方表明*号

@echo off

for /f “delims=,tokens=1,*” %%i in (test.txt) do echo %%i %%j

Pause

结果,第3个逗号不见了,代替它的是贰个空格符号,别的部分保持不变。

运营结果:尺有所短寸有所长,学好批处理没切磋,思念难题复杂化,消除难点简洁化。

内部奥秘就在这些星号上边。

tokens=后边所接的星号拥有这样的成效:字符串从左往右被切分成紧跟在*此前的数值所表示的节数之后,字符串的别的部分保持不改变,全部被*所代表的2个变量接收。

::::::::::::::::::::::::::::::::::::::::::::::读取数据某列

::比方读取abc.txt的率先行,记作变量a

::然后读取第三行,记作变量b

::代码如下:

::@echo off

::set/p  n=要第几行:

::set/a n-=1

::if “%n%”==”0” (set “skip=”) else (set “skip=skip=%n%”)

::for /f “%skip% tokens=* delims=”  %%i in (abc.txt) do (

::set a=%%i&&goto:a)

:::a

::echo内容是:%a%

::pause

::

::@echo off & setlocal enabledelayedexpansion

::for /f “skip=7 tokens=4 delims= ” %%a in (‘dir /ad /o-d “E:\ffff”‘)
do (

::set b=%%a&&goto:a (那么些很关键,不晓得为什一定要。)

::)

:::a

::echo %b%>6.txt

::pause

::加上xcopy /c /s D:\DRIVERS网卡\*
 e:\ffff\%b%就能够不负众望晋级,柔性进级要替换的公文的呀!!!!

::

::

::

::skiP柒解释如下   通晓一下就行了。。

::

::驱动器E中的卷是 影视

::卷的系列号是000八-497陆

:: E:\ffff的目录

::

::2016/02/02  20:31              ..

::2016/02/02  20:31              .

::2016/02/02  20:31              TGP3

::2016/02/02  20:31              TGP2

::2016/02/02  20:31              TGP1

::2016/02/02  20:31              TGP

::               0个文件0字节

::               伍个目录12八,309,465,08八可用字节

::

::

::

::::find前边一般都要加个转义字符::::老夫也不亮堂为什么::::::

::或然搜索abc.txt中以a=开始的行,把等号后的剧情记为变量a

::那样的通令要怎么写?

::代码如下

::@echo off

::for /f “tokens=1,* delims==”  %%a in (‘find “a=”^

::set a=%%b&&goto:a)

:::a

::echo a=%a%

::pause

::

:::::::::::::::::::::::::::::::::展现代码实施时间长度::::::::::::::::::::::

::@echo off

::set t=%time%

::下面放你的代码

::set t1=%time%

::if “%t1:~,2%” lss “%t:~,2%” set “add=+24”

::set /a
“times=(%t1:~,2%-%t:~,2%%add%)*360000+(1%t1:~3,2%%%100-1%t:~3,2%%%100)*6000+(1%t1:~6,2%%%100-1%t:~6,2%%%100)*100+(1%t1:~-2%%%100-1%t:~-2%%%100)”
,”ss=(times/100)%%60″,”mm=(times/6000)%%60″,”hh=times/360000″,”ms=times%%100″

::echo本次批管理运维时刻为%hh%:%mm%:%ss%:%ms%

::pause>nul

::

::

::::::::::::::::::::::::::::::::很不错的计时器脚本:::::::::::::::::::::::::::::

::

::

::title计时器

::: start

::echo能够输入具体日子,如“0八:00”“20:00”

::echo也足以输入倒计时,在最终参与“h”表示时,或“m”表示分

::set /p want=请输入……

::if %want:~-1% == h goto h

::if %want:~-1% == m goto m

::set nowh=%time:~0,2%

::set nowm=%time:~3,2%

::set nows=%time:~6,2%

::set wanth=%want:~0,2%

::set wantm=%want:~3,2%

::set /a daojishi=(%wanth%-%nowh%)*3600+(%wantm%-%nowm%)*60-%nows%

::::总计和当今的时光差

::goto daojishi

::: h

::set /a daojishi=3600*%want:~0,-1%

::::总结和现行反革命的年月差

::goto daojishi

::: m

::set /a daojishi=60*%want:~0,-1%

::::总结和今日的小时差

::: daojishi

::echo倒计时%daojishi%秒

::ping /n  %daojishi% 127.0.0.1 >nul

::::暂停

::echo msgbox “%want%已经到了!”,,”计时器” >tishi.vbs

::::调用vbs显示对话框

::start tishi.vbs

::ping /n 2 127.0.0.1 >nul

::del tishi.vbs /q

::goto start

::

::

::

::::::::::::::::::::::::::::::::::弹窗脚本:::::::::::::::

::@echo off

::echo msgbox “已经到了”,vbYesNoCancel,”定时器” >tishi.vbs

::start tishi.vbs

::pause >nul

::语法基本是echo msgbox “内容”,,”标题” >XX.vbs

::来详细拆分一下:个中”已经到了!”是提醒框的剧情vbYesNoCancel是选择语法
 机械漏刻是弹窗标题

::上边是填补

::@echo off

::set b=

::echo Wsh.Echo Msg博克斯 (“测试提醒框之102″,vbYesNoCancel,”选取”)
>tmp.vbs

::for /f %%a in (‘cscript tmp.vbs //nologo //e:vbscript’) do set “b=%%a”

::if %b%==6 goto Yes

::if %b%==7 goto No

::if %b%==2 goto Cancel

::del /q tmp.vbs

::exit

:::Yes

::echo你挑选了“是”

::echo.

::pause>nul

::goto end

:::No

::echo你挑选了“否”

::echo.

::pause>nul

::goto end

:::Cancel

::echo你挑选了“撤消”

::echo.

::pause>nul

::goto end

:::end

::del /q tmp.vbs

::exit

::[/code]

::经测试各类按扭的附和的数值如下:

::[code]

::OK(确定)=1

::Cancel(取消)=2

::Abort(终止)=3

::Retry(重试)=4

::Ignore(忽略)=5

::Yes(是)=6

::No(否)=7

::

:::::::::::::::::::::::::::设置延时能够用timeout:::::::::::::::::

::TIMEOUT [/T] timeout [/NOBREAK]   timeout /t 2 >nul

::描述:

::那一个工具接受超时参数,等候一段钦定的光阴(秒)或等按大4键。它还接受

::多个参数,忽视按键。

::参数列表:

::    /T        timeout钦点等候的秒数。有效限制从-一到9999九秒。

::    /NOBREAK忽略按钮并等待钦赐的时光。

::    /?呈现此帮忙音信。

::注意:超时值-一象征Infiniti制时间地伺机开关。

::

::1段有趣的代码,临时光好好精晓一下

@echo off&mode con cols=42 lines=20&color 02

setlocal enabledelayedexpansion

set code=123456789abcdef

set m=1&set v=1

title黑客帝国数码雨by bat-zw一九七伍0516

:begin

set /a a=%random%%%2,b=%random%%%3

if %b% neq 0 (set b=%a%) else (set “b= “)

set str=%str%%b%

set /a n+=1

if %n% lss 40 goto begin

set /a m+=1,x+=1

if %m% geq 20 set /a v+=1

set str%m%=%str%

cls&for /l %%i in (%m%,-1,%v%) do echo.!str%%i!

if %x% equ 20 call :lp

set str=&set n=0

goto begin

:lp

set /a a=%random%%%15,x=0

set a=!code:~%a%,1!

color 0%a%

解释一下:

set/a “cup=%random%%%3+1”

%random%是一个5位数随机数,%random%%%3正是取其除以叁的余数,结果为(0,1,2),再加1就是(1,2,3)

就此整句话的情趣即是将变量cup的值设置为贰个1-3的大肆整数。

@echo off & setlocal enabledelayedexpansion

for /l %%i in (1 1 300) do (

set var=%%i

if /i “%var%”==”60” (goto :eof) else (tasklist | find “进程名” >nul
&& taskkill /f /im进程名

ping /n 2 127.0.0.1>nul

)

)

Pause

收获软件的设置路线

@echo off & setlocal enabledelayedexpansion

for /f “delims=” %%i in (‘find /i “:” %1 ^| findstr /i “^[a-z]:”‘) do
echo %%i

Pause

大神所给的提示!!!!唉 用的不懂行啊!!

@Echo off

for /f “delims=” %%i in (‘find /i “:” %1 ^| findstr /i “^[a-z]:”‘) do
echo %%~dpi

pause>nul

能直接进入安装目录了

@Echo off & setlocal enabledelayedexpansion

for /f “delims=” %%i in (‘find /i “:” %1 ^| findstr /i “^[a-z]:”‘) do
 start %%~dpi

pause>nul

call set R2=%%R0:~%R1%,1%%

或者

setlocal enabledelayedexpansion

set R2=!R0:~%R1%,1!

进行理文件化:

在Windows系统中,大家或然看到将叁个文件拖放到2个应用程序上,则足以行使当前应用程序张开当前文件的动静,那么在批管理中可不得以兑现吗?答案是肯定的。来分析一下,该怎么完结?假诺要张开三个文本必要求钦赐该文件的门径地址技术开采,接下去的为题便是哪些在批管理中获得拖放进来的文件地方。来看上边包车型大巴事例:

1

2

3

4@echooff

set/pinPath=请输入或拖放目录和文件…

echo你输入的门道为:%inPath%

pause

这段代码中“inPath”变量用于获取用户输入的音讯,能够输入,同样能够一向将目的目录或文件拖进当前解释器命令行,则能够立时获得当前文件或目录的地址。能够看做那是一种获得格局,可是这种拖放方式必须求在开拓批处理实行解释器的情景下才具够使用。上边来看另1种办法,通过参数获取格局,先看例子:

1

2

3

4@echooff

echo当前实践顺序:%0

echo拖拽的公文或目录:%一

pause

将这段代码保存为批管理公事,然后将随机一个文本或目录拖放到近些日子批管理公事上,看看效果。惊叹的是能够看看,“%一”那几个变量参数输入的新闻正是我们想要的靶子文件或目录的完全路线,而“%0”依然当下文件完全路径。上边介绍了“%0”表示的是当前试行顺序本人完全路线,而这边的“%壹”用于表示目的文件或目录的完全路线地址,那是变量参数的内需留意的另一个表征,“%一”在一些特殊的状态下能力表明这种引用效果。

总括一下,在批管理脚本中的“%0”表示近些日子批管理程序本人的一心路线名,“%一”—“%九”表示对命令参数的引用,而那几个参数应用最广大的正是“call”命令。供给小心的是“%1”在好几特殊意况下有另壹种意义就是代表要实施的指标程序的完全路径,而这种用法许多是在拖拽文件的时候利用。

方法一:

查究钦定文件

@echo off

rem内定待寻觅的公文

set “FileName=BatHome_Batcher.txt”

echo正在查找,请稍候…

for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

if exist %%a:\ (

for /f “delims=” %%b in (‘dir /a-d /s /b “%%a:\*%FileName%”
2^>nul’) do (

if /i “%%~nxb” equ “%FileName%” (

echo,%%b

)

)

)

)

Pause

方法二:

@echo off

rem钦点待找出的公文

set “FileName=BatHome_Batcher.txt”

echo正在搜寻,请稍候…

for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

if exist %%a:\ (

for /f “delims=” %%b in (‘where /r %%a: “%FileName%” 2^>nul’) do (

if /i “%%~nxb” equ “%FileName%” (

echo,%%b

)

)

)

)

pause

看思路:

开荒软件A—ping网站或然IP,ping值出色小于200ms继续ping,若高于这么些值可能掉包接二连三三次,立即重启软件A,重启软件A继续ping以上动作重复

@echo off

:a

start “” A.exe

:b

ping baidu.com>ping$

type ping$|find “TTL”||goto kill

for /f “tokens=6 delims==ms ” %%a in (‘find “平均” ping$’) do if %%a gtr 150 goto kill

goto b

:kill

taskkill /f /im “A.exe”>nul

goto a

:用echo来作为参数 :

@echo off

set /p var=

echo %var%|findstr /be [0-9.]* >nul && echo Yes||echo No

pause

此地的echo %var%不用于展示效果, ,而用作参数效率。因为纯粹的

%var%不能够被试行, ,大家又找不到十分的下令来作为%var%的开

头 ,所以选取echo。后边的“>nul ”,是因为咱们只须求参数功效就

能够了 ,无需其出示效果 ,所以用“>nul ”阻止新闻展现。其他的

一部分供给带参数的吩咐, ,也得以参照这一个用法

在DOS中去除目录须求接纳“md”命令,个中提供“/s”选项用于删除目录树结构,“/q”选项表示沉默删除,可是接纳“md”命令的限制是必须是空的目录,也正是目录中不能够有文件,全体删除目录从前一定要先删除文件,删除文件需求接纳“del”命令,在那之中提供了“/f”选项用于强制删除只读文件,“/a”选项表示删除狂妄属性的文书,“/q”选项表示沉默删除。强制删除目录的代码如下:

@echooff

echo***************强制删除目录*****************

echo使用格局:

echo一.请输入要刨除目录的完好路线地址。

echo2.将在删除的目录拖放到施行中的批管理中。

echo三.将在删除的目录拖放到程序Logo上。

echo注意:扶助文件删除,删除后不可能在回收站恢复生机。

echo********************************************

echo=

setinPath=%1

ifdefined inPath (

goto op1

)else(

goto op2

)

:op1

ifexist %inPath%\nul (

rem 删除目录下具备文件(网传有del/f/a/q\\?%1做法)

del/f/a/q%1

rem 删除当前目录(网传有rd/s/q\\?%1做法)

rd/s/q%1

)else(

rem 删除目录下具有文件(网传有del/f/a/q\\?%1做法)

del/f/a/q%1

)

goto end

:op2

set/pinPath=目录完全路线地址(输入或拖放)并回车:

ifexist %inPath%\nul (

rem 删除目录下具备文件

del/f/a/q%inPath%

rem 删除当前目录

rd/s/q%inPath%

)else(

rem 删除目录下具有文件

del/f/a/q%inPath%

)

goto end

:end

echo=

echo删除已到位!请刷新看看是不是删除。

Pause>nul

4.再一次登记系统组件

系统组件是系统本人不可缺点和失误的一片段,许多软件贫乏了那个零件都爱莫能助平常运维。在Windows系统中最基层的类别组件分为DLL和OCX二种,个中DLL(全称Dynamic
Link
Library,“动态链接库”)文件,它是相当多年体育系软件都依据的1种绝对程序;OCX(全称Object
Linking and Embedding (OLE) Control
Extension,“嵌入式对象控件”)文件是1种共享式的相持程序。首先明白了那三种组件,那么重新登记则正是将那个DLL或OCX组件卸载后重新安装三遍。那么使用什么命令来实施到位了?

在Windows系统中提供了1个“regsvr3贰”外部程序来展开DLL和OCX文件的注册和卸载操作,即便是3个外表程序,可是同样提供了命令操作行,能够由此在运营窗口或命令行中输入“regsvr3二”命令来查阅“regsvr32”工具的使用办法,这里非常的少说,具体选项应用都有认证。供给小心的是“regsvr3二”命令只好用来操作“.dll”或“.ocx”文件。上边大家来正视新挂号系统组件的代码(这里运用“for”语句来贯彻):

1

2

3

4

5

6

7

8

9

10

11

12@echooff

setdPath=%systemroot%\system32\

echo~~~~~~~~~~

echo输入目录,注册其下的全部DLL或OCX组件

echo~~~~~~~~~~

set/pdPath=请输入你要注册组件的目录(默以为%dPath%):

for%%fin(%dPath%.dll)do(

regsvr32/s%%f

)

for%%fin(%dPath%.ocx)do(

regsvr32/s%%f

)

批量文书重命名操作

批量文书重命名,这一个标题在头里早已说过,但是并未有讲过什么样贯彻。上面大家就来探望这几个案例。

兴许你在一些网址上下载一层层文件时,这一个文件的名称都富含了该网址预订义的局地名称前缀或后缀,是或不是感觉欠赏心悦目,如何去掉这一个前缀或后缀呢?1个2个改动?太OUT了!使用批量修改软件?小编的第二想方设法正是人家能够做的批量改变软件本人干吗不能。上边已经学习了批管理,那么大家就选拔批管理落成轻巧的批量改换文件名称。

要修改文件名称,必供给选取“ren”命令,具体操作就是利用“for”循环取到每三个文件名称,然后在名称上进展改造,最终选择新的字符串名称来替换原有的字符串名称就可以。代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35@echooff

echo#################################################

echo使用表明:

echo不钦赐专门的学问路径则为当下所在目录。

echo只要求内定要求替换的字符串和替换来的字符串就能够。

echo#################################################

setdPath=%~dp0

set/pd帕特h=设置文件所在目录(默以为%dPath%):

:start

set/poldStr=要替换的字符串:

set/pnewStr=要替换来的字符串:

ifnot defined oldStr goto start

ifnot defined newStr goto start

setlocal enabledelayedexpansion

for/f”skip=4 tokens=3*”%%ain(‘dir’)do(

ifnot %%a==^ (

ifnot %%b==字节 (

ifnot %%b==可用字节 (

ifnot %%b==%~nx0 (

setfileName=%%b

setfileName=!fileName:%oldStr%=%newStr%!

ren”%%b””!fileName!”

)

)

)

)

)

setexitop=n

set/pexitop=是或不是退出?(Y/N)

if/i%exitop% equ y (

exit

)else(

goto start

)

pause

上面的批量文件改名只是二个简约的躬行实践

@echo off

setlocal EnableDelayedExpansion

set ab cd=fff

set “var=ab cd”

if defined !var! (echo ab cd 被定义了) else echo ab cd 未有被定义

pause

复制代码

啊,果然能够。。那下简单多了。。。

只是需注意的是仍旧得用!!来引用变量。

总结:

检验含空格的变量名是不是被定义过,需展开延迟变量,

并把if defined这里的富有空格都用变量来取代

唯恐将变量名赋值给别的变量,再用!!来引用这几个新的变量。

再尝试代码一-六

开发银行或关闭服务

劳动也是Windows系统的多个生死攸关概念,一般服务是其余程序运维的功底情况,关于劳动的切实可行音讯方可自动参考其余材质。在MS-DOS提供了三个勇猛的工具“net”命令,用于对WIndows基础音信经过综合管理,当然它也能够管理服务。“net”命令怎样进展服务的起步和关闭处理吗?

51

52

53

54@echooff

title 服务管理工科具

setlocal enabledelayedexpansion

:menu

echo=

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

echo=

echo-=服务管理工科具=-

echo=

echo一.运转服务 二.关门服务

echoQ.退出

echo=

echo使用验证:运营或关闭服务须求输入服务名称,服务名称

echo能够通过“service.msc”管理面板对应属性中查阅。

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

echo=

set/pop=请采纳操作:

if%op%==1 goto startService

if%op%==2 goto closeService

if/i%op% equ qexit

goto menu

:startService

echo=

set/pserviceName=请输入你要运转的劳动名称:

for/f”delims=”%%ain(‘net start ^| find /i
“%serviceName%”‘)do(

set/pchoice1=%serviceName%劳动正在运转…是或不是关闭?(Y/N^)

if/i!choice1! equ y (

net stop %serviceName%

)

goto end

)

net start %serviceName%

goto end

:closeService

echo=

set/pserviceName=请输入你要关闭的服务名称:

for/f”delims=”%%ain(‘net start ^| find /i
“%serviceName%”‘)do(

net stop %serviceName%

goto end

)

set/pchoice二=%serviceName%劳动处于终止状态…是或不是开启?(Y/N^)

if/i%choice2% equ y (

net start !serviceName!

)

goto end

:end

echo=

setexitop=n

set/pexitop=是还是不是退出?(Y/N)

if/i%exitop% equ y (

exit

)else(

goto menu

)

经过、端口音信保管

经过是Windows系统中的四个重中之重概念,一般对应一个正在进行的次序,在MS-DOS同样提供了对经超过实际现管理的命令工具,常用的有“tasklist”命令和“taskkill”命令,其中“tasklist”命令用于查看进度音信,能够依据1个经过名称或进度ID来查阅进程的附和消息;“taskkill”命令能够用来终止进程,能够依照叁个进度名称或进度ID来终止进度或所在进度树。

端口是Windows系统中的另1个首要概念,具有远程通讯作用的先后一般至少须求监听三个端口来达成通讯,端口不能重复使用,一般三个端口只对应3个进程,可是三个进度能够对应八个端口(具体的关于“互联网端口“的详细描述能够参见一些任何材质)。在MS-DOS系统中提供了“netstat”工具来查阅互连网端口,同不经常候还足以查看端口对应的进度音信。下边大家就来贯彻那么些事例:

@echooff

title 端口/进度管理工具

setlocal enabledelayedexpansion

:menu

echo=

echo╔-                                                     -╗

echo本机开放的端口及运用该端口的历程管理工科具

echo= ………………………………………………….

echo一.TCP/UDP分类列表查看

echo二.本地端口查找

echo3.进度终止

echoQ:退出

echo╚-                                                     -╝

echo=

setop=q

set/pop=请选用操作:

if%op%==1 goto seeType

if%op%==2 goto searchPort

if%op%==3 goto killProcess

if/i%op% equ q goto end

goto menu

:seeType

echo=

echo-=TCP协议=-

echo=

echo本地地址       端口      进度ID    进度名称

echo─────────────────────────────

for/f”skip=4 tokens=2,5″%%ain(‘netstat -ano -p tcp’)do(

setresultStr=

rem 拆分当地地址为IP和端口号

for/f”delims=: tokens=1,2″%%iin(“%%a”)do(

call :builderInfo 15 %%i

setresultStr1= !resultStr!

call :builderInfo 6 %%j

setresultStr2=!resultStr1! !resultStr!

)

call :builderInfo 6 %%b

setresultStr3=!resultStr2! !resultStr!

rem 通过进度ID获取进程名称

for/f”skip=2 delims=, tokens=1″%%iin(‘tasklist /fi “PID eq %%b”
/fo csv’)do(

setresultStr4=!resultStr3! %%~i

)

echo!resultStr4!

)

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

echo=

echo-=UDP协议=-

echo=

echo本地地址       端口      进程ID    进度名称

echo─────────────────────────────

for/f”skip=4 tokens=2,4″%%ain(‘netstat -ano -p udp’)do(

setresultStr=

rem 拆分本地地址为IP和端口号

for/f”delims=: tokens=1,2″%%iin(“%%a”)do(

call :builderInfo 15 %%i

setresultStr1= !resultStr!

call :builderInfo 6 %%j

setresultStr2=!resultStr1! !resultStr!

)

call :builderInfo 6 %%b

setresultStr3=!resultStr2! !resultStr!

rem 通过进度ID获取进度名称

for/f”skip=2 delims=, tokens=1″%%iin(‘tasklist /fi “PID eq %%b”
/fo csv’)do(

setresultStr4=!resultStr3! %%~i

)

echo!resultStr4!

)

goto end

:searchPort

set/pprot=请输入要查究的端口号(输入b重返主菜单):

ifnot defined prot goto :searchPort

if/i%prot% equ b goto :menu

echo=

echo=    -=当地%prot%端口使用明细=-

echo=

echo协议名称   进度ID    进程名称

echo─────────────────

for/f”tokens=1,2,4,5″%%ain(‘netstat -ano ^| findstr
“:%prot%\>”‘)do(

for/f%%iin(‘echo %%b ^| findstr “:%prot%\>”‘)do(

setresultStr=

if/i%%a equ UDP (

call :builderInfo 6 %%c

setresultStr1= UDP !resultStr!

rem 通过进程ID获取进度名称和对应组件

for/f”skip=2 delims=, tokens=1″%%iin(‘tasklist /fi “PID eq %%c”
/fo csv’)do(

setresultStr2=!resultStr1! %%~i

)

)else(

call :builderInfo 6 %%d

setresultStr1= TCP !resultStr!

rem 通过进度ID获取进度名称和对应组件

for/f”skip=2 delims=, tokens=1″%%iin(‘tasklist /fi “PID eq %%d”
/fo csv’)do(

setresultStr2=!resultStr1! %%~i

)

)

echo!resultStr2!

)

)

goto end

:killProcess

set/pproTag=请输入进度ID或名称(输入b重临主菜单):

ifnot defined proTag goto killProcess

if/i%proTag% equ b goto menu

for/f%%iin(‘echo %proTag% ^| findstr “.exe .dll”‘)do(

set/acount=0

for/f”skip=2 delims=, tokens=1,2,3″%%ain(‘tasklist /fi
“imagename eq %%i” /fo csv’)do(

set/acount+=1

)

setsure=N

set/psure=分明结束%proTag%针对性的!count!个经过吗?(Y/N)

if/i!sure! equ y (

taskkill/im%proTag%/f

)else(

goto killProcess

)

)

set/anum=%proTag%

if%num%==0echo请输入准确进程ID或进度名称,比如1二三或cmd.exe… &&    
goto killProcess

for/f”skip=2 delims=, tokens=1,2,3″%%ain(‘tasklist /fi “pid eq
%num%” /fo csv’)do(

setsure=N

set/psure=鲜明甘休%num%指向经过吗?(Y/N)

if/i!sure! equ y (

taskkill/pid%num%/f

)else(

goto killProcess

)

)

goto end

:end

echo=

setexitop=n

set/pexitop=是还是不是退出?(Y/N)

if/i%exitop% equ y (

exit

)else(

goto menu

)

rem 创设输出音讯,依照长度补全空格,是右臂对齐

:builderInfo

rem 字符串最大尺寸

setmaxLength=%1

rem 原始字符串

setstr=%2

rem 原始字符串长度

set/alength=0

rem 总计字符串长度,使用循环截取单个字符是还是不是等于空为依赖

:getLength

set/alength+=1

if“%str%”==””goto fillSpance

for/f%%iin(“%length%”)do(

ifnot”!str:~%%i,1!”==””goto getLength

)

rem
使用空格补全字符串,要是原始字符串长度小于最大字符串长度则在前边添加空格

:fillSpance

settemp=

if/i%length% lss %maxLength% (

for/l%%iin(%length%,1,%maxLength%)do(

settemp= !temp!

)

)

setresultStr=%str%!temp!

应用时应当加/c:参数,c:后应写提醒可输入的字符或数字,之间无空格。冒号是可选项。

动用时加也可挑选加/m:参数,m:后应写提醒说明语。

切切实实的一声令下使用请参见choice/? 如下图所示:

常用情状,轻松例如如下:新建多少个文书文件,命名字为choicedemo,修改文件类型为bat,用Notepad++张开编辑内容如下:

1@echooff

2:begin

3choice/c:1234 /m:”please select”

4if%errorlevel%==4gotoend

5if%errorlevel%==3gotothree

6if%errorlevel%==2gototwo

7if%errorlevel%==1gotoone

8:one

9echo111

10pause>nul

11gotobegin

12:two

13echo222

14pause>nul

15gotobegin

16:three

17echo333

18pause>nul

19gotobegin

20:end

21echoI want to quit

22pause>nul

实行功效如下:

更是令人瞩目:此文件名称不得以命名称为choice,因为那样会进去死循环,不报告您本身是肿么知道的

今仲夏长途一个客户,开掘她的服务器会波动时自动断开网络,导致客户端连接不了服务端,可是重启服务之后又复苏平常,初阶判别或然是由于某些系统服务与winpacp有争持,提出用户恢复生机操作系统,他想等深夜再初始操作,明日就不得不一贯运维个ping,开采timed
out就手动重启服务。作者记念if能够行使程序的重回值作为决断,就帮她写了那个剧本:

复制代码代码如下:

@echo off

: p

ping 61.152.XX.XX

IF ERRORLEVEL 1 goto aa

IF ERRORLEVEL 0 goto bb

:aa

echo 正在重启软件服务…

net stop MSSQLSERVER

net start MSSQLSERVER

goto p

:bb

echo 继续ping中。。。

goto p

这段命令的功力是,ping
陆1.15二.XX.XX那些IP,如若ping不通则重启mssql服务,然后继续ping,要是能够ping通,仍然接二连三ping…

我们都晓得if是命令行下的1个尺度剖断语句,ECRUISERRO本田CR-VLEVEL是它的贰个参数,翻译过来正是“错误重回码”的乐趣,它的功效是判别前一条命令的荒谬再次回到值,然后和定义的字符值举行相比,再决定开始展览什么样动作。

格式是这么:

if ERRORLEVEL nubmer commend

例:if E奥迪Q伍ROKugaLEVEL 一 echo 重回值等于一

那么我们将在问了,笔者怎么获取到前三个指令的重回值呢?

措施很简短,拿ping来讲,大家先运营叁个ping 1二7.0.0.一

运营结果是Reply from 1二7.0.0.一: bytes=32 time<一ms TTL=128

那儿我们输入,echo %errorlevel%,就足以看来重返值是0,

接下来大家在ping2个不设有的ip,比如1玖二.192.192.19二

ping命令呈现 Request timed out.。

ok,大家在用echo %errorlevel%查一下再次来到值是稍稍。

今昔变为了一。

您也足以用那些法子来查询别的命令的重返值,举例copy、dir等等。

自然if
E冠道RO奇骏LEVEL对数值的可比艺术不但限于等于。在微软的帮助中大家得以见到:

IF %ERRORLEVEL% LEQ 1 goto okay

此间的LEQ表示“小于等于”,全体的可比参数如下:

EQU – 等于

NEQ – 不等于

LSS – 小于

LEQ – 小于或等于

GTR – 大于

GEQ – 大于或等于

如有错误,感激指正。

IF-ERRORLEVEL

树立TEST4.BAT,内容如下:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:\

IF ESportageRO景逸SUVLEVEL 一 ECHO 文件拷贝退步

IF EOdysseyRO瑞鹰LEVEL 0 ECHO 成功拷贝文件

然后实践文书:

C:\>TEST4

假设文件拷贝成功,显示屏就能够呈现“成功拷贝文件”,不然就能显得“文件拷贝失败”。

IF E本田CR-VRO福特ExplorerLEVEL 是用来测试它的上3个DOS命令的重返值的,注意只是上八个指令的重返值,而且重临值必须遵循从大到小程序顺序剖断。

故此上面包车型地铁批管理公事是一无所能的:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:\

IF ELacrosseROOdysseyLEVEL 0 ECHO 成功拷贝文件

IF E卡宴ROHavalLEVEL 一 ECHO 未找到拷贝文件

IF E奇骏RORLEVEL 二 ECHO 用户通过ctrl-c中止拷贝操作

IF E福睿斯RO猎豹CS陆LEVEL 3 ECHO 预置错误阻止文件拷贝操作

IF ECRUISERROEvoqueLEVEL 肆 ECHO 拷贝进程中写盘错误

无论是拷贝是不是成功,前边的:

其3方插件:wget

1、使用wget下载单个文件以下的例证是从互连网下载三个文件并保留在当前目录

wget

在下载的进程中会展现进程条,包蕴(下载完结比例,已经下载的字节,当前下载速度,剩余下载时间)。

二、使用wget -O下载并以差别的文件名保存

wget私下认可会以最后三个合乎”/”的前面的字符来命令,对于动态链接的下载平日文件名会不科学。

不当:下边包车型大巴例证会下载1个文本并以名称download.php?id=拾80保存

wget

纵使下载的文件是zip格式,它依然以download.php?id=拾80限令。

毋庸置疑:为了化解这么些标题,我们能够运用参数-O来钦定2个文本名:

wget -O wordpress.zip

三、使用wget –limit
-rate限制速度下载
当您实施wget的时候,它默许会占用全体大概的宽黄疸载。然则当你盘算下载一个大文件,而你还索要下载其余文件时就有要求限速了。

wget –limit-rate=300k

肆、使用wget -c断点续传利用wget -c重新起动下载中断的公文:

wget -c

对此我们下载大文件时忽然由于网络等原因中断非常有扶持,大家得以承袭跟着下载而不是重复下载多个文本。供给持续暂停的下载时能够采纳-c参数。

行使第2方插件写的游乐:

@echo off

:reset

cls

mode con cols=120 lines=60

color 79

set 版本=beta4.0

:check

echo 正在检查程式完整性,假设破坏将尝试从HWT服务器获取……

if not exist wget.exe echo 游戏程式已破坏,请重新获得 error
01&&pause>nul&&exit

if not exist choice.exe wget

cls

if not exist cmdmp3.exe wget

cls

if not exist image.exe wget

cls

if not exist logo.bmp wget

cls

echo 首要程式检查测试达成

echo 发轫检查评定能源包

echo 连接服务器更新能源包中……

cls

wget

if not exist items\ md items

if not exist items\sound md items\sound

if not exist items\player md items\player

if not exist items\gg md items\gg

cls

if not exist items\gameover.bmp wget
-P items\

Cls     (解释:-P, –directory-prefix=名称  
保存文件前先创建内定名称的目录。)

if not exist items\help.bmp wget
-P items\

cls

if not exist items\ico.bmp wget
-P items\

cls

if not exist items\jt.bmp wget
-P items\

cls

if not exist items\kk.bmp wget
-P items\

cls

if not exist items\menu.bmp wget
-P items\

cls

if not exist items\nyq.bmp wget
-P items\

cls

if not exist items\nyqe1.bmp wget
-P items\

cls

if not exist items\nyqe2.bmp wget
-P items\

cls

if not exist items\nyqe3.bmp wget
-P items\

cls

if not exist items\push.bmp wget
-P items\

cls

if not exist items\savefinish.bmp wget
-P items\

cls

if not exist items\se.bmp wget
-P items\

cls

if not exist items\tzcd.bmp wget
-P items\

cls

if not exist items\yes.bmp wget
-P items\

cls

if not exist items\player\1.bmp wget
-P
items\player\

cls

if not exist items\player\2.bmp wget
-P
items\player\

cls

if not exist items\player\3.bmp wget
-P
items\player\

cls

if not exist items\player\4.bmp wget
-P
items\player\

cls

if not exist items\player\5.bmp wget
-P
items\player\

cls

if not exist items\player\6.bmp wget
-P
items\player\

cls

if not exist items\player\7.bmp wget
-P
items\player\

cls

if not exist items\player\8.bmp wget
-P
items\player\

cls

if not exist items\sound\01.mp3 wget
-P
items\sound\

cls

if not exist items\sound\02.mp3 wget
-P
items\sound\

cls

if not exist items\sound\03.mp3 wget
-P
items\sound\

cls

if not exist items\sound\04.mp3 wget
-P
items\sound\

cls

if not exist items\sound\05.mp3 wget
-P
items\sound\

cls

if not exist items\sound\06.mp3 wget
-P
items\sound\

cls

if not exist items\sound\sound01.cmd wget
-P
items\sound\

cls

if not exist items\sound\sound02.cmd wget
-P
items\sound\

cls

if not exist items\sound\sound03.cmd wget
-P
items\sound\

cls

if not exist items\sound\sound04.cmd wget
-P
items\sound\

cls

if not exist items\sound\sound05.cmd wget
-P
items\sound\

cls

if not exist items\sound\sound06.cmd wget
-P
items\sound\

cls

if not exist items\sound\ze.bmp wget
-P
items\sound\

cls

if not exist items\sound\ze2.bmp wget
-P
items\sound\

cls

if exist data.txt del data.txt

cls

wget

set num=”1:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . data.txt ^| findstr/b
%num%’) do (

set 数据更新=%%j

)

if “%数据更新%”==”1” goto 数据更新

cls

goto boot

:boot

taskkill /f /im “cmdmp3.exe” >nul

mode con cols=120 lines=60

color 79

cls

start /min items\sound\sound01.cmd

image /d

title 史青柠历险记 %版本% —HWT团队出品

image items\ico.bmp 90 310

set dyx=0

set dyf=0

set dyy=0

set num1=40

set playerzy=1

set sx=0

set sy=0

set 分数=0

set 粘液球数量=0

set slm=0

set nyqx=0

set nyqy=0

set gjt=0

set dyf=

set dyx=

set dyy=

set ddplayerzy=1

set ddsx=0

set ddsy=0

set p1sm=0

set p2sm=0

set 关卡=1

::——开采者调节和测试用,开启请把0改为一,关闭反之———-

set debug=0

::——开荒者调节和测试用,开启请把0改为一,关闭反之———-

set 威力=1

set boss2=3

set ppp=1

set hcft=0

set 怪物=1

:reset1

if “%num1%”==”0” goto next1

echo.

set /a num1=%num1%-1

goto reset1

:next1

echo                                               copyright 2016 HWT

ping -n 3 127.0.0.1 >nul

image /d

image items\sound\ze2.bmp 110 300

ping -n 3 127.0.0.1 >nul

image /d

image items\sound\ze.bmp 110 300

ping -n 3 127.0.0.1 >nul

image /d

image items\ico.bmp 90 310

ping -n 3 127.0.0.1 >nul

image /d

set menuxy=1

set menuy=220

goto menu

:menu

cls

image /d

image items\menu.bmp 110 180

image items\jt.bmp 640 %menuy% /TRANSPARENTBLT

if “%ppp%”==”3” image items\push.bmp 220 760 /TRANSPARENTBLT&&set ppp=1

choice /c wsep /n /t 1 /d p

if %errorlevel%==1 set /a menuxy=%menuxy%-1

if %errorlevel%==2 set /a menuxy=%menuxy%+1

if %errorlevel%==3 goto menupd

cls

set /a ppp=%ppp%+1

image items\menu.bmp 110 180

if “%menuxy%” LSS “1” set menuxy=1

if “%menuxy%” GTR “3” set menuxy=3

if “%menuxy%”==”1” set menuy=220

if “%menuxy%”==”2” set menuy=370

if “%menuxy%”==”3” set menuy=520

goto menu

:menupd

echo %menuxy%

if “%menuxy%”==”1” goto 单人游戏

if “%menuxy%”==”2” goto 多个人游玩

if “%menuxy%”==”3” goto 帮助

goto menu

:单人游戏

taskkill /f /im “cmdmp3.exe” >nul

set /a music=%random%%%6+1

start /min items\sound\sound0%music%.cmd

cls

image /d

:初阶化单人游戏

set /a p1sm=%关卡%*2*10

set /a playerzy= %random%%%2+1

set /a sx=%random%%%740+1

set /a sy=%random%%%840+1

set /a ddplayerzy=%playerzy%+2

set /a ddsx=%random%%%740+1

set /a ddsy=%random%%%840+1

set /a p1sm=%关卡%*2*10

set /a p2sm=%关卡%*2*12

set 关卡=1

set slm=1

set 分数=0

set 粘液球数量=0

set fps=0

set /a 怪物=%random%%%3+1

goto 计算nyq

:回到游戏

cls

image /d

goto ga

:计算nyq

set disjs=0

if %disjs% GTR %p1sm% goto 单人die

if %disjs% GTCRUISER %p2sm% goto 闯关成功

if “%p2sm%”==”0” goto 闯关成功

if “%粘液球数量%” LSS “0” set 粘液球数量=0

if “%slm%”==”1” goto 生成nyq

if “%dyx%”==”” goto ga

set /a dyx=%dyx%+%dyf%

goto ga

:怪物AI

goto 怪物%怪物%

:怪物1

set hcft=1

if %ddsx% lss %sx% (set /a ddsx=%ddsx%+10&&set ddplayerzy=4) else (set
/a ddsx=%ddsx%-10&&set ddplayerzy=3)

if %ddsy% lss %sy% (set /a ddsy=%ddsy%+10&&echo ok) else (set /a
ddsy=%ddsy%-10&&echo not)

goto 碰撞箱

:怪物2

if “%hcft%”==”0” goto 怪物2-1

if %ddsx% lss %sx% (set /a ddsx=%ddsx%+12&&set ddplayerzy=6) else (set
/a ddsx=%ddsx%-12&&set ddplayerzy=5)

if %ddsy% lss %sy% (set /a ddsy=%ddsy%+12&&echo ok) else (set /a
ddsy=%ddsy%-12&&echo not)

:怪物2-1

set hcft=1

goto 碰撞箱

:怪物3

if “%hcft%”==”0” goto 怪物3-1

if %ddsx% lss %sx% (set /a ddsx=%ddsx%+10&&set ddplayerzy=8) else (set
/a ddsx=%ddsx%-10&&set ddplayerzy=7)

if %ddsy% lss %sy% (set /a ddsy=%ddsy%+10&&echo ok) else (set /a
ddsy=%ddsy%-10&&echo not)

if “%ppp%”==”10” (

:怪物3-1

set hcft=1

set /a ddsx=%random%%%500+150

set /a ddsy=%random%%%500+150

set /a ddplayerzys=%random%%%2+1

set ppp=0

)

set /a ppp=%ppp%+1

goto 碰撞箱

:生成nyq

set /a nyqx=%random%%%500+150

set /a nyqy=%random%%%500+150

set slm=0

image items\nyq.bmp %nyqx% %nyqy% /TRANSPARENTBLT

:ga

if “%hcft%”==”0” goto 怪物AI

if “%debug%”==”0” cls

title 史青柠历险记 %版本%  —HWT团队出品      第%关卡%关
     分数:%分数%   粘液球数量:%粘液球数量% 血量:%p一sm% 敌人血量:%p二sm%

image /d

if not “%dyx%”==”” image items\nyqe%威力%.bmp %dyx% %dyy%
/TRANSPARENTBLT

set /a gjt=%gjt%+1

image items\player\%playerzy%.bmp %sx% %sy% /TRANSPARENTBLT&&image
items\player\%ddplayerzy%.bmp %ddsx% %ddsy% /TRANSPARENTBLT

image items\nyq.bmp %nyqx% %nyqy% /TRANSPARENTBLT

choice /c wsadqepk123 /n /t 1 /d p

if %errorlevel%==1 set /a sy=%sy%-25

if %errorlevel%==2 set /a sy=%sy%+25

if %errorlevel%==3 set /a sx=%sx%-25&&set playerzy=1

if %errorlevel%==4 set /a sx=%sx%+25&&set playerzy=2

if %errorlevel%==5 goto 单人游戏甘休菜单

if %errorlevel%==六 goto 发射粘液球

if %errorlevel%==8 if “%debug%”==”0” (set debug=1) else (set debug=0)

if %errorlevel%==9 set 威力=1

if %errorlevel%==10 set 威力=2

if %errorlevel%==11 set 威力=3

goto 怪物AI

:碰撞箱

set 史青柠碰撞箱x一=%sx%

set 史青柠碰撞箱y1=%sy%

set /a 粘液球碰撞箱x一=%nyqx%-50

set /a 粘液球碰撞箱y壹=%nyqy%+50

set /a 粘液球碰撞箱x二=%nyqx%+50

set /a 粘液球碰撞箱y二=%nyqy%-50

set 紫弹药碰撞箱x一=%dyx%

set 紫弹药碰撞箱y一=%dyy%

set /a 仇敌碰撞箱x一=%ddsx%-50

set /a 仇敌碰撞箱y一=%ddsy%+十0

set /a 敌人碰撞箱x二=%ddsx%+50

set /a 仇敌碰撞箱y二=%ddsy%

set fg=10

if %gjt% GEQ %fg% (

if %粘液球数量% LSS %威力% (set gjzt=不可攻击,弹药不足) else (set
gjzt=可攻击)

) else (

set gjzt=不可攻击 冷却时间

)

if “%debug%”==”1” (

cls

echo ——调节和测试形式DEBUG—-按k关闭—–

echo 史莱姆 X %sx%  敌人 X %ddsx%

echo        Y %sy%       Y %ddsy%

echo.

echo. 史青柠碰撞箱x一=%sx%

echo. 史青柠碰撞箱y一=%sy%

echo  #################################

echo. 粘液球碰撞箱x一 %粘液球碰撞箱x1%

echo. 粘液球碰撞箱y1 %粘液球碰撞箱y一%

echo. 粘液球碰撞箱x2 %粘液球碰撞箱x贰%

echo. 粘液球碰撞箱y2 %粘液球碰撞箱y2%

echo. 紫弹药碰撞箱x一 %紫弹药碰撞箱x壹%

echo. 紫弹药碰撞箱y一 %紫弹药碰撞箱y一%

echo  ################################

echo. 仇人碰撞箱x壹   %仇人碰撞箱x一%

echo. 敌人碰撞箱y一   %敌人碰撞箱y1%

echo. 敌人碰撞箱x2   %敌人碰撞箱x2%

echo. 仇人碰撞箱y2   %仇人碰撞箱y2%

echo.

echo.   弹药冷却 %gjt%    %gjzt%  威力:%威力%

echo. ################################

echo.

echo. ppp:%ppp%  怪物:%怪物%

echo.

echo. 输入开关:

)

if “%史青柠碰撞箱x一%” GEQ “%粘液球碰撞箱x壹%” if “%史莱姆碰撞箱x一%” LEQ
“%粘液球碰撞箱x贰%” if “%史青柠碰撞箱y一%” LEQ “%粘液球碰撞箱y一%” if
“%史青柠碰撞箱y壹%” GEQ “%粘液球碰撞箱y二%” goto 粘液球被吃掉

if “%紫弹药碰撞箱x一%” GEQ “%粘液球碰撞箱x一%” if “%紫弹药碰撞箱x一%” LEQ
“%粘液球碰撞箱x二%” if “%紫弹药碰撞箱y一%” LEQ “%粘液球碰撞箱y一%” if
“%紫弹药碰撞箱y1%” GEQ “%粘液球碰撞箱y2%” goto 粘液球被吃掉二

if “%史青柠碰撞箱x一%” GEQ “%敌人碰撞箱x壹%” echo a&&if “%史青柠碰撞箱x一%”
LEQ “%敌人碰撞箱x2%” echo a&&if “%史青柠碰撞箱y一%” LEQ “%敌人碰撞箱y1%”
echo a&&if “%史青柠碰撞箱y1%” GEQ “%敌人碰撞箱y二%” goto 遇敌

if “%紫弹药碰撞箱x一%” GEQ “%敌人碰撞箱x壹%” echo b&&if “%紫弹药碰撞箱x一%”
LEQ “%仇敌碰撞箱x2%” echo b&&if “%紫弹药碰撞箱y1%” LEQ “%仇敌碰撞箱y一%”
echo b&&if “%紫弹药碰撞箱y1%” GEQ “%仇敌碰撞箱y二%” goto 敌扣

goto 计算nyq

:敌扣

set dyx=9999

set dyy=9999

if “%怪物%”==”3” set ppp=10

set /a p2sm=%p2sm%-%关卡%*2*%威力%

if “%怪物%”==”2” goto 怪物2-1

goto 计算nyq

:粘液球被吃掉

set slm=1

set /a 分数=%分数%+1

set /a 粘液球数量=%粘液球数量%+1

set /a f=%关卡%*2*10

set /a p1sm=%p1sm%+1

if %p1sm% GTR %f% set /a p1sm=%关卡%*2*10

goto 计算nyq

:遇敌

if “%怪物%”==”3” set ppp=10

set /a p1sm=%p1sm%-%关卡%*2

if “0” GTR “%p1sm%” goto 单人die

goto 计算nyq

:粘液球被吃掉2

set slm=1

if “%怪物%”==”3” set ppp=10

set /a 分数=%分数%+2

goto 计算nyq

:单人游戏截止菜单

set ztxy=1

set ztmx=300

set ztmy=490

image items\tzcd.bmp 270 380 /TRANSPARENTBLT

goto tzxda

:tzxda

image items\kk.bmp %ztmx% %ztmy% /TRANSPARENTBLT

choice /c adqe /n

if %errorlevel%==1 set /a ztxy=%ztxy%-1

if %errorlevel%==2 set /a ztxy=%ztxy%+1

if %errorlevel%==三 goto 回到游戏

if %errorlevel%==四 goto 决断结束菜单

if “%ztxy%” LSS “1” set ztxy=1

if “%ztxy%” GTR “3” set ztxy=3

if “%ztxy%”==”1” set ztmx=300&&set ztmy=490

if “%ztxy%”==”2” set ztmx=510&&set ztmy=490

if “%ztxy%”==”3” set ztmx=410&&set ztmy=560

cls

image /d

if not “%dyx%”==”” image items\nyqe%威力%.bmp %dyx% %dyy%
/TRANSPARENTBLT

image items\player\%playerzy%.bmp %sx% %sy% /TRANSPARENTBLT&&image
items\player\%ddplayerzy%.bmp %ddsx% %ddsy% /TRANSPARENTBLT

image items\nyq.bmp %nyqx% %nyqy% /TRANSPARENTBLT

if not “%dyx%”==”” image items\nyqe.bmp %dyx% %dyy%

image items\tzcd.bmp 270 380 /TRANSPARENTBLT

image items\kk.bmp %ztmx% %ztmy% /TRANSPARENTBLT

goto tzxda

:判别结束菜单

if “%ztxy%”==”1” goto 单人存档

if “%ztxy%”==”贰” goto 读取单人存档

if “%ztxy%”==”3” goto reset

:单人存档

if exist saves.db del saves.db

echo %sx%>>saves.db

echo %sy%>>saves.db

echo %nyqx%>>saves.db

echo %nyqy%>>saves.db

echo %分数% >>saves.db

echo %粘液球数量% >>saves.db

echo %playerzy% >>saves.db

echo %dyf% >>saves.db

echo %dyx% >>saves.db

echo %dyy% >>saves.db

echo %gjt% >>saves.db

echo %ddsx%>>saves.db

echo %ddsy%>>saves.db

echo %ddplayerzy% >>saves.db

echo %p1sm%>>saves.db

echo %p2sm%>>saves.db

echo %关卡% >>saves.db

echo %威力% >>saves.db

echo %怪物% >>saves.db

image items\savefinish.bmp 400 270 /TRANSPARENTBLT

ping -n 3 127.0.0.1 >nul

cls&&image /d&&image items\player\%playerzy%.bmp %sx% %sy%
/TRANSPARENTBLT&&image items\player\%ddplayerzy%.bmp %ddsx% %ddsy%
/TRANSPARENTBLT&&image items\nyq.bmp %nyqx% %nyqy%
/TRANSPARENTBLT&&image items\tzcd.bmp 270 380&&image items\kk.bmp
%ztmx% %ztmy% /TRANSPARENTBLT

goto tzxda

:四个人游玩

echo 这里是四个人游玩,开拓中&&pause&&goto menu

:设置

echo 这里是安装,开采中&&pause&&goto menu

:读取单人存档

if not exist saves.db image items\se.bmp 200 -40 /TRANSPARENTBLT&&pause
>nul&&goto 回到游戏

set num=”1:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set sx=%%j

)

set num=”2:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set sy=%%j

)

set num=”3:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set nyqx=%%j

)

set num=”4:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set nyqy=%%j

)

set num=”5:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set 分数=%%j

)

set num=”6:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set 粘液球数量=%%j

)

set num=”7:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set playerzy=%%j

)

if “%playerzy%”==”1 ” set playerzy=1

if “%playerzy%”==”2 ” set playerzy=2

set num=”8:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set dyf=%%j

)

set num=”9:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set dyx=%%j

)

set num=”10:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set dyy=%%j

)

set num=”11:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set gjt=%%j

)

set num=”12:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set ddsx=%%j

)

set num=”13:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set ddsy=%%j

)

set num=”14:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set ddplayerzy=%%j

)

set num=”15:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set p1sm=%%j

)

set num=”16:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set p2sm=%%j

)

if “%ddplayerzy%”==”3 ” set ddplayerzy=3

if “%ddplayerzy%”==”4 ” set ddplayerzy=4

if “%ddplayerzy%”==”5 ” set ddplayerzy=5

if “%ddplayerzy%”==”6 ” set ddplayerzy=6

if “%ddplayerzy%”==”7 ” set ddplayerzy=7

if “%ddplayerzy%”==”8 ” set ddplayerzy=8

set num=”17:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set 关卡=%%j

)

set num=”18:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set 威力=%%j

)

set num=”19:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . saves.db ^| findstr/b
%num%’) do (

set 怪物=%%j

)

set /a 关卡=%关卡%+1-1

if “%威力%”==”3 ” set 威力=3

if “%威力%”==”2 ” set 威力=2

if “%威力%”==”1 ” set 威力=1

if “%怪物%”==”2 ” set 怪物=2

if “%怪物%”==”1 ” set 怪物=1

goto 回到游戏

:读取

set %读取变量%=

set num=”%读取行数%:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . “%路径%” ^| findstr/b
%num%’) do (

set %读取变量%=%%j

)

set 读取行数=0

goto %读取去何地%

:帮助

cls

image /d

image items\help.bmp 230 260

:hcs

choice /c a /n

if %errorlevel%==1 goto menu

goto hcs

:发射粘液球

set /a 威力总计=%威力%-一

if %粘液球数量% LSS %威力% goto 碰撞箱

set hc999=8

if %gjt% GEQ %hc999% goto hc55

goto 怪物AI

:hc55

set gjt=0

set /a 粘液球数量=%粘液球数量%-1*%威力%

set dyx=%sx%+20

set /a dyy=%sy%+50

if “%playerzy%”==”1” set dyf=-100

if “%playerzy%”==”2” set dyf=100

goto 碰撞箱

:单人die

image items\gameover.bmp 200 -40 /TRANSPARENTBLT

pause >nul

goto reset

:闯关成功

image /d

image items\player\%playerzy%.bmp %sx% %sy% /TRANSPARENTBLT

ping -n 1 127.0.0.1 >nul

image items\yes.bmp 200 -40 /TRANSPARENTBLT

image items\push.bmp 220 760 /TRANSPARENTBLT

ping -n 3 127.0.0.1 >nul

pause >nul

set /a 关卡=%关卡%+1

goto 新一关

:新一关

cls

set num2=14

:reset2

if “%num2%”==”0” goto next2

echo.

set /a num2=%num2%-1

goto reset2

:next2

taskkill /f /im “cmdmp3.exe” >nul

set /a music=%random%%%6+1

start /min items\sound\sound0%music%.cmd

set hcft=0

set /a ddplayerzy=%playerzy%+2

set /a ddsx=%random%%%740+1

set /a ddsy=%random%%%840+1

set /a p1sm=%关卡%*2*10

set /a p2sm=%关卡%*2*12

set boss2=3

set /a 怪物=%random%%%3+1

echo                                                       第%关卡%关

ping -n 3 127.0.0.1 >nul

goto ga

:数据更新

set num=”3:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . data.txt ^| findstr/b
%num%’) do (

set 数据版本=%%j

)

set num=”4:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . data.txt ^| findstr/b
%num%’) do (

set 获取更新内容=%%j

)

if “%数据版本%”==”%版本%” goto boot

echo. 更新内容 %获得更新内容%

echo 开掘可用更新,是或不是更新 y/n  版本为 %数据版本%

choice /c yn /n

if %errorlevel%==1 goto rhj

if %errorlevel%==2 cls&goto boot

cls

goto 数据更新

:rhj

set num=”2:”

for /f “tokens=1*delims=:” %%i in (‘findstr/n . data.txt ^| findstr/b
%num%’) do (

set 数据链接=%%j

)

echo 后台下载更新中

wget %数量链接% updata.exe&&updata.exe&&del updata.exe&&goto reset

轮换前的值: ” bbs. bathome.
cn”

轮换后的值: “bbs.bathome.cn”

 

对待一下,大家开掘它把变量%a%的空格给替换掉了, 而%PATH:str一=str贰%那么些操作便是把变量%PATH%的里的str1 全体用str二 替换。

例5,

@echo off

set a=
bbs.bathome.cn

echo  替换前的值: “%a%”

set
var=%a:.=小情%

echo  替换后的值: “%var%”

pause

 

实施后突显:

轮换前的值: ”
bbs.bathome.cn”

轮换后的值: ” bbs小情bathome小情cn”

 

那边是把变量%a%里面包车型客车”.”全体轮换为”小情”,大家多多入手练习就能够了,这几个从未怎么难的,呵呵~~

 

 

2、字符串截取

格式:%a:~[m[,n]]%

方括号表示可选,%为变量标志符,a为变量名,不可少,冒号用于分隔变量名和注解有些,符号~能够省略明了为“偏移”就可以,m 为偏移量(缺省为0),n 为截取长度(缺省为全方位)

例6,

@echo off

set
a=bbs.bathome.cn

set var=%a:~1,3%

echo %var%

pause

 

实行显示为:bs.

咱俩来解析一下set
var=%a:~1,3% ,这里%a:~壹,3%视为变量 a  偏移量为1,要截取它的3人字符长度。合起来便是把变量a 的值从第一 位(偏移量 1)伊始,截取三 个字符赋予变量var

例7,

@echo off

set
a=bbs.bathome.cn

set var=%a:~1,-3%

echo %var%

pause

 

实践彰显:bs.bathome

此处正是把变量a 第二位起到尾数第多少人前的值赋予var

例8,

@echo off

set
a=bbs.bathome.cn

set var=%a:~-3%

echo %var%

pause

 

实施展现:.cn

此处正是正是把变量a 尾数 叁 位的值赋予变量var

例9,

@echo off

set
a=bbs.bathome.cn

set var=%a:~-3,2%

echo %var%

pause

 

实行彰显:.c

 

此处就是即是把变量a 尾数 3 位的值的前三人赋予变量var

例10,

@echo off

set
a=bbs.bathome.cn

set var=%a:~3%

echo %var%

pause

 

实行展现:.bathome.cn

此处正是把变量a 从第二 位开端后边全部的值给变量var

 

上边那多少个例子要完美的历历在目哦,而且并非记错了!

我们依旧总结一下吧:

a=bbs.bathome.cn

 

%a:~1,3%    ——– “bs.”        变量a 偏离1位,截取3位字符。

 

%a:~1,-3%   ——– “bs.bathome”变量a 偏离一人,截取尾数第三位前的字符。

 

%a:~-3%    ——– “.cn”        变量a 偏离-二人,截取尾数的二人字符。

 

%a:~-三,二%   ——– “.c”        变量a 偏离-3人,截取尾数后二人的前两四位字符

 

%a:~三%     ——– “.bathome.cn”变量a 偏离三个人,截取完后边的字符。

 

小编们来道综合题:输入大四字符串,求字符串的长度

例11,

@echo off

set /p
str=请输入随机长度的字符串:

echo  你输入了字符串:”%str%”

call :stringlenth “%str%”
num

echo  字符串长度为:%num%

pause

:stringLenth

::字符串长度总括子程序

set thestring=%~1

::参数%一 为字符串”%str%”,%~壹则去掉”%str%”的双引号。

if not defined theString
goto :eof

set Return=0

:stringLenth_continue

set /a Return+=1

set
thestring=%thestring:~0,-1%

::偏移量为一,截取倒数第贰位前的持有字符。

if defined thestring goto
stringLenth_continue

if not “%2″==”” set
%2=%Return%

::参数%二为回到变量num的称呼,不可能含空格或特殊字符。

goto :eof

 

 

谈起底,提供一下batmat写的三个例子协助大家对截取字符的了然啊:

 

例子:

@echo off&color a&mode con cols=90
lines=12

title 截取字符操练工具 by bat-zw一9七三0516

set
var=1234567890一23四伍陆七8玖零

cls&echo.&echo  原始图案为:%var%

echo.&echo  注意眼下有十一个阿拉伯数字前面有十一个语文数字,等下截取后纪念看下。

echo.&echo  命令格局为:%%var:~m,n%%,当中的m为第一个参数可负可正可为零,n为第二个参数可负可正不为零。

echo.&echo  为了便于重复练习未有设置退出,要剥离请直接关门窗口。

echo.&echo  请按任性键开头练习。&pause>nul

 

:begin

set a=&set b=&set “c=”

cls&echo.&set /p
a= 请输入第1个参数(应为小于20的大背头):

echo %a:-=%|findstr “[^0-9]”&&goto
wrong

if “%a%” equ “” goto wrong

if %a% geq 20 goto wrong

cls&echo.&set /p
b= 请输入第四个参数(应为大于-20并不为零的卡尺头):

echo %b:-=%|findstr “[^0-9]”&&goto
wrong

if “%b%” equ “” goto wrong

if %b% equ 0 goto wrong

if %b% lss -20 goto wrong

set /a c=20-a+b

if %a% lss 0 if %b% lss 0 if %a% geq %b%
goto wrong

if %a% gtr 0 if %b% lss 0 if %c% leq 0
goto wrong

cls&echo.&echo  原始图案为: %var%

echo.&echo  你输入的截取命令是: %%var:~%a%,%b%%%

echo.&call,echo  截取到的水墨画是:%%var:~%a%,%b%%%

echo.&echo  请按任性键又一次演练。&pause>nul&goto begin

 

:wrong

cls&echo.&echo  输入不合要求,请准确输入。&ping /n 贰 1二7.1 >nul&goto begin

 出处:

====================================================================

三、用set 命令进行简短总结

格式:set /a expression

/a 命令行按键钦点等号左侧的字符串为被评估的数字表明式。该表达式评估器很简短并以递减的优先权顺序补助下列操作:

 

  (
)             分组

  !  ~  –        1元运算符

  *  /  %       算数运算符

  + –           算数运算符

  <<   >>       2进制逻辑移位

  &             2进制按位“与”

  ^              二进制按位“异”

  |              2进制按位“或”

  =  *=  /=   %= += -=           算数赋值

  &=  ^=  |=  <<=   >>=          二进制运算赋值

  ,                                   表明式分隔符

 

set 的/a 参数正是让set 能够支撑数学符号进行加减等片段数学生运动算,注意:一般的演算常为十进制运算.依旧先来探望例子吗

例12,

@echo off

set /p
input=请输入总计表明式:

set /a var=%input%

echo  总括结果:%input%=%var%

pause

 

只顾:DOS 计算只可以进展整数运算,正确到整数,它是不援助浮点总结的!

 

请输入总计表明式:一+9+20+30-10

计量结果:一+九+20+30-10=50

请按放肆键继续. . .

 

请输入总计表明式:10/三        #除法只可以纯粹到整数

估测计算结果:10/三=三

请按大四键继续. . .

 

请输入计算表明式:-拾0+6贰       #负数

总括结果:-100+6二=-38

请按放肆键继续. . .

 

请输入总计表明式:百分之百3         #求余数

算算结果:百分之百叁=一

请按任性键继续. . .

 

只顾:以上的求余数运算符%在批管理程序中必须写成%%

 

请输入总结表明式:(25+7五)*2/(15+5)     #括号

计量结果:(二五+7五)*2/(15+5)=10

请按任性键继续. . .

 

请输入总结表明式:1234567890*9876543210       #范围

不算数字。数字准确度限为  3二  位。

计量结果:1234567890*9876543210=

请按任性键继续. . .

 

留神:下边包车型地铁乘除进程显得,DOS 总括只好精确到3二 位,这么些 32 位是指二进制3贰 位,在那之中最高位为标记位(0 为正,一 为负),低位3壹 位为数值。3一 个 一 换来10进制为2147483647,所以DOS 总括的有效值范围是-214748364八 至21474836四柒,超越该数值范围时总计出错.请看上边包车型地铁计量过程:

 

请输入计算表达式:2147483647-一       #最大值减 1,值有效

计算结果:2147483647-1=21474836四陆

请按任性键继续. . .

 

请输入计算表明式:21474836四7+1        #最大值加 壹,出错,结果为最小值

计量结果:21474836四柒+1=-214748364八

请按任性键继续. . .

 

请输入总计表达式:-2147483648-壹      #微小值减 一,出错,结果为最大值

测算结果:-214748364八-一=21474836肆7

请按大肆键继续. . .

 

作者们来看一看上边包车型客车这么些例子

例13,

@echo off

set /a
a=1+1,b=2+1,c=3+1

echo  总计结果:%a% %b% %c%

pause

 

进行突显:总括结果:二 三 四

 

发觉别的数学生运动算也会有意义!,那正是表达式分隔符”逗”号的意义!

突发性大家须求直接在原变量实行加减操作就能够用这种语法,

set /a
var+=1对应原始语法正是set /a var = %var% +

set /a
var*=二对应原始语法就是set /a var =
%var%*2

 

其它还恐怕有①对用逻辑或取余操作符,这个标志,遵照下面的利用方法会报错。比方大家在CMD 里输入set /a var=1 & 1″与运算”,它并不会呈现为 1,而是报错,!

怎么?对于如此的”逻辑或取余操作符”,咱们必要把他们用双引号引起来,也得以用转义字符^,看例子set /a var= 一 “&”
一  那样结果就呈现出来了。

 

其余逻辑或取余操作符用法:

set /a var= 1 “+”
1  异运算

set /a var= 一 “%”
1 取模运算

set /a var= 三 “<<”
二  左移位运算,  3 的2进制为1一,左移贰 位为 1拾0,换来10进制就是1二,自行验证

set /a var= 4 “>>”
贰 右移位运算,4 的二进制为100,右移动2 位为 一,结果为壹

 

专注:凡是按位乘除均需换算成2进制,然后再总括。

 

思考题:求2 的n 次方

参照他事他说加以考查答案:

例14,

@echo off

set /p
n=请输入贰 的一遍方:

set /a
num=1^<^<n

echo %num%

pause

 

想转手以此到底是怎么运算的?呵呵,那就留给我们想想了!

 好了,关于set 命令的也就讲到这里呢,未来有怎么样要补偿的再补上了。

 还应该有点任何的下结论命令,也得以参照笔者的其它一篇小说:批管理(bat)命令学习的局地总计

出处:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图