Windows 批处理(bat)语法大全

正文是读书bat整理的笔记,由于内容较多,指出结合左侧作品大纲查看。

%~dp0[获取当前路线]

%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录

cd %~dp0 :进入批处理所在目录

cd %~dp0bin\ :进入批处理所在目录的bin目录

示例

其一示例在win10 x64测试正常

::作用:以管理员身份安装Apache
d:
cd %~dp0bin\
httpd.exe -k install -n "Apache24"

运作结果

以管理员身份运行 示例.bat ,执行结果如下:

C:\Windows\system32>d:
D:\>cd D:\Server\Apache24\bin\
D:\Server\Apache24\bin>httpd.exe -k install -n "Apache24"

自个儿的常用命令

%cd%[推行的路径]

如今执行的门路,并非目标文件的门道

taskkill /f /im notepad.exe [终止进程]

taskkill /?打开支持

图片 1

cmd窗口普通话乱码

在CMD窗口右键/默许值,打开属性拔取“默许代码页为简体汉语GBK”,

图片 2

收获命令支持 xxx /?

相遇记不清楚的通令,但记得名字,就足以键入
命令名 空格
/?就会有详尽的该命令的救助了,比如:ping /?     cd /?

图片 3图片 4

翻开内置命令的支援消息

ver /?

cmd /?

set /?

rem /?

if /?

echo /?

goto /?

for /?

shift /?

call /?

其他常用的通令

type /?

find /?

findstr /?

copy /?

一、基础语法

1.批拍卖公事是一个“.bat”结尾的文本文件,这几个文件的每一行都是一条DOS命令。可以选拔其余文件文件编写工具创设和修改。

2.批拍卖是一种简单的先后,可以用 if 和 goto 来控制流程,也足以行使 for
循环。

3.批处理的编程能力远不如C语言等编程语言,也至极不专业。

4.各种编写好的批处理公事都一定于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在自由地点运行。

5.C:\AUTOEXEC.BAT
是每回系统启动时都会活动运行的,能够将每一遍启动时都要运行的通令放入该文件中。

6.大大小小写不灵动(命令符忽略大小写)

7.批甩卖的文本扩张名为 .bat 或 .cmd。

8.在指令提示下键入批处理文件的名称,或然双击该批处理公事,系统就会调用Cmd.exe来运作该文件。

 

二、参数

1) 系统参数

%SystemRoot% === C:\WINDOWS (%windir% 同样)

%ProgramFiles% === C:\Program Files

%USERPROFILE% === C:\Documents and Settings\Administrator
(子目录有“桌面”,“开端菜单”,“收藏夹”等)

%APPDATA% === C:\Documents and Settings\Administrator\Application
Data

%TEMP% === C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp (%TEM% 同样)

%APPDATA% === C:\Documents and Settings\Administrator\Application
Data

%OS% === Windows_NT (系统)

%Path% ===
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
(原本的安装)

%HOMEDRIVE% === C: (系统盘)

%HOMEPATH% === \Documents and Settings\Administrator

:: 枚举当前的环境变量

setlocal enabledelayedexpansion

FOR /F “usebackq delims==” %%i IN (`set`) DO @echo %%i !%%i!

 

2) 传递参数给批处理文件

%[1-9]代表参数,参数是指在运作批处理公事时在文书名后加的以空格(可能Tab)分隔的字符串。

变量能够从%0到%9,%0代表批处理命令自个儿,其余参数字符串用 %1 到 %9
相继表示。

Sample:

call test2.bat “hello” “haha”
(执行同目录下的“test2.bat”文件,并输入五个参数)

在“test2.bat”文件里写:

echo %1 (打印: “hello”)

echo %2 (打印: “haha”)

echo %0 (打印: test2.bat)

echo %19 (打印: “hello”9)

 

三、批处理为主命令

0. help 命令

/? 命令

语法: 命令 /?

可呈现此命令的相助新闻

Sample: type /? >>tmp.txt (把 type
命令的帮忙新闻写入到tmp.txt文件里)

Sample: help type (显示跟“type /?”一样)

 

1.Echo 命令

语法: echo [{on|off}] [message]

ECHO [ON | OFF] 打开回显或关闭回显成效。

ECHO 显示当前回显设置。

ECHO [message] 突显新闻。

echo off
表示在此语句后有所运行的授命都不出示命令行自个儿;默许是on,on时会突显如:
C:\文件夹路径>命令行。

在其实使用中大家会把那条命令和重定向符号( 也号称管道符号,一般用 >
>> ^ )结合来贯彻输入一些发令到特定格式的文件中。

Sample: echo off

Sample: echo hello world (显示出“hello world”)

Sample: echo Windows Registry Editor Version 5.00 > c:\setupreg.reg
(从前还从未 setupreg.reg 那一个文件)

Sample: echo “SourcePath”=”D:\\Win2003\\” >> c:\setupreg.reg
(追加内容进 setupreg.reg 那些文件)

 

2.@ 命令

代表不显得@后边的授命,(在入侵进度中本来无法让对方看来您利用的一声令下啦)

@ 与 echo off
相象,但它是加在每一种命令行的最前边,表示运行时不突显这一行的命令行(只可以影响当下行)。

Sample: @echo off
(此语句常用于起首,表示不出示所有的命令行音讯,蕴含此句)

Sample: @echo please wait a minite…

Sample: @format X: /q/u/autoset

(format
那么些命令是不可以利用/y那一个参数的,可喜的是微软留了个autoset这些参数给我们,效果和/y是千篇一律的。)

 

3.Goto 命令

语法:goto label (label是参数,指定所要转向的批处理程序中的行。)

指定跳转到标签行,找到标签行后,程序将拍卖从下一行发轫的通令。

label标签的名字能够任由起,不过最为是有含义的,字母前必须加个冒号“:”来表示那一个字母是标签。

goto命令就是基于这些冒号来寻找下一步跳到到那边。常常与 if
合作使用,按照差其他尺度来执行不一的命令组。

例题见“5.Pause 命令”

 

4.Rem 命令

语法:Rem Message…

(小技巧:用::代替rem)

诠释命令,在C语言中非常与/*…*/,它并不会被实践,只是起一个诠释的成效,便于外人阅读和协调未来涂改。

Sample:@Rem Here is the description.

 

5.Pause 命令

会搁浅批处理的实施并在显示屏上显示Press any key to
continue…的升迁,等待用户按任意键后持续

Sample:

@echo off

:begin

copy a:*.* d:\back

echo Please put a new disk into driver A

pause

goto begin

在那么些事例中,驱动器 A 中磁盘上的有着文件均复制到d:\back中。

显示的新闻提示您将另一张磁盘放入驱动器 A 时,pause
命令会使程序挂起,以便你更换磁盘,然后按任意键再一次复制。

 

6.Call 命令

语法: call [[Drive:][Path] FileName [BatchParameters]] [:label
[arguments]]

参数: [Drive:][Path] FileName
指定要调用的批处理程序的职位和名称。filename 参数必须持有 .bat 或 .cmd
增加名。

调用另一个批处理程序,并且不截至父批处理程序。

若是不用call而向来调用其他批处理公事,那么执行完这多少个批处理文件后将无法再次来到当前文件并推行当前文件的存续命令。

call 命令接受用作调用目标的价签。要是在本子或批处理公事外使用
Call,它将不会在指令行起效用。

Sample:call=”%cd%\test2.bat” haha kkk aaa (调用指定目录下的
test2.bat,且输入3个参数给他)

萨姆ple:call test2.bat arg1 arg2 (调用同目录下的
test2.bat,且输入2个参数给她)

注:可以调用自个儿(死循环、递归)

7.start 命令

调用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 来调用。

侵袭常用参数:

MIN 初始时窗口最小化

SEPARATE 在离其他半空中内起首 16 位 Windows 程序

HIGH 在 HIGH 优先级档次开端应用程序

REALTIME 在 REALTIME 优先级档次开始应用程序

WAIT 启动应用程序并听候它停止

parameters 这个为传送到命令/程序的参数

Sample:start /MIN test2.bat arg1 arg2 (调用同目录下的
test2.bat,且输入2个参数给她,且本窗口最小化)

Sample:e:\”program files”\一级列车时刻表\jpskb.exe
(文件路径名有空格时)

8.If 命令

if 表示将判断是不是符合规定的标准化,从而控制举办不一样的一声令下。有二种格式:

1) IF

语法: if [not] “参数” == “字符串” 待执行的通令

参数要是等于(not表示不等,下同)指定的字符串,则条件建立,运行命令,否则运行下一句。(注意是多少个等号)

Sample: if “%1” == “a” format a:

Sample: if {%1} == {} goto noparms

2) if exist

语法: if [not] exist [路径\]文本名 待执行的授命

即使有指定的文件,则条件建立,运行命令,否则运行下一句。

山姆ple: if exist config.sys edit config.sys
(表示一旦存在那文件,则编辑它,用很羞耻的体系编辑器)

Sample: if exist config.sys type config.sys
(表示只要存在那文件,则突显它的内容)

3) if errorlevel number

语法: if [not] errorlevel <数字> 待执行的授命

一经程序重临值等于指定的数字,则条件建立,运行命令,否则运行下一句。(再次回到值必须根据从大到小的顺序排列)

Sample:

@echo off

XCOPY F:\test.bat D:\

IF ERRORLEVEL 1 (ECHO 文件拷贝战败

) Else IF ERRORLEVEL 0 ECHO 成功拷贝文件

pause

无数DOS程序在运行停止后会重返一个数字值用来表示程序运行的结果(或然状态),称为错误码errorlevel或称再次回到码。

广大的归来码为0、1。通过if
errorlevel命令可以断定程序的再次回到值,依据差别的再次来到值来控制履行分化的通令。

4) else

语法: if 条件 (成马上实施的下令) else (不成马上实施的命令)

假设是三个尺码,建议适当使用括号把各条件包起来,以防出错。

Sample: if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else
(echo comment3 )

注:若是 else 的说话须要换行,if 执行的行尾需用“^”连接,并且 if
执行的动作需用(括起来),否则报错

Sample: if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) ^

else (echo comment3 )

5) 比较运算符:

EQU – 等于 (一般选择“==”)

NEQ – 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)

LSS – 小于

LEQ – 小于或等于

GTR – 大于

GEQ – 大于或等于

 

9.choice 命令

choice
使用此命令可以让用户输入一个字符(用于采取),从而根据用户的挑三拣五遍到区其他errorlevel,

下一场同盟 if errorlevel 选取运行分歧的下令。

留神:choice命令为DOS大概Windows系统提供的外部命令,差别版本的choice命令语法会稍有两样,请用choice
/?查看用法。

choice 使用此命令可以让用户输入一个字符,从而运行不一致的授命。

动用时应该加/c:参数,c:后应写提醒可输入的字符,之间无空格。它的再次来到码为1234……

Sample: choice /c:dme defrag,mem,end

将显示: defrag,mem,end[D,M,E]?

Sample:

choice /c:dme defrag,mem,end

if errorlevel 3 goto defrag (应先判断数值最高的错误码)

if errorlevel 2 goto mem

if errotlevel 1 goto end

10.for 命令

for 命令是一个相比较复杂的命令,主要用于参数在指定的限定内循环执行命令。

1) for {%variable | %%variable} in (set) do command
[command-parameters]

%variable 指定一个单一字母可替换的参数。变量名称是分别轻重缓急写的,所以 %i
不相同于 %I

在批处理文件中使用 FOR 命令时,指定变量指出用 %%variable而毫不用
%variable。

(set) 指定一个或一组文件。可以行使通配符。

command 指定对各个文件执行的吩咐。

command-parameters 为一定命令指定参数或命令行开关。

2) 倘职务令伸张名被启用,下列额外的 FOR 命令格式会遭逢支撑:

a.FOR /D %variable IN (set) DO command [command-parameters]

假若集里面富含通配符,则指定与目录名匹配,而不与公事名匹配。

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

检查以 [drive:]path 为根的目录树,指向各种目录中的FOR 语句。

即使在 /R
后没有点名目录,则应用当前目录。要是集仅为一个单点(.)字符,则枚举该目录树。

c.FOR /L %variable IN (start,step,end) DO command [command-parameters]

该集表示以增量格局从开端到截止的一个数字体系。

如:(1,1,5) 将时有暴发体系 1 2 3 4 5; 而(5,-1,1) 将暴发种类 (5 4 3 2 1)。

d.有或然没有 usebackq 选项:

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

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

FOR /F [“options”] %variable IN (command) DO command

参数”options”为:

eol=c – 指一个行注释字符的末梢(就一个,如“;”)

skip=n – 指在文书开头时疏忽的行数。

delims=xxx – 指分隔符集。这几个替换了空格和跳格键的默许分隔符集。

tokens=x,y,m-n – 指每行的哪一个标志被传送到逐个迭代的 for
自个儿。那会造成额外变量名称的分红。

m-n格式为一个限制。通过 nth 符号指定 mth。

要是符号字符串中的最终一个字符星号,那么额外的变量将在终极一个标志解析之后分配并收受行的保存文本。

usebackq – 指定新语法已在下类情状中选取:

在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并同意在filenameset中运用双引号扩起文件名称。

3) Sample:

  1. 正如命令行会彰显当前目录下所有以bat或许txt为扩充名的文件名。

for %%c in (*.bat *.txt) do (echo %%c)

a. 如下命令行会呈现当前目录下有所包罗有 e 大概 i 的目录名。

for /D %%a in (*e* *i*) do echo %%a

b. 如下命令行会展现 E盘test目录 下所有以bat大概txt为扩大名的文件名。

for /R E:\test %%b in (*.txt *.bat) do echo %%b

for /r %%c in (*) do (echo %%c) :: 遍历当前目录下有所文件

c. 如下命令行将发生体系 1 2 3 4 5

for /L %%c in (1,1,5) do echo %%c

d. 以下两句,显示当前的年月日和岁月

For /f “tokens=1-3 delims=-/. ” %%j In (‘Date /T’) do echo
%%j年%%k月%%l日

For /f “tokens=1,2 delims=: ” %%j In (‘TIME /T’) do echo %%j时%%k分

e. 把记事本中的内容每一行前边去掉8个字符

setlocal enabledelayedexpansion

for /f %%i in (zhidian.txt) do (

set atmp=%%i

set atmp=!atmp:~8!

if {!atmp!}=={} ( echo.) else echo !atmp!

)

:: 读取记事本里的始末(使用 delims
是为着把一行突显全,否则会以空格为分隔符)

for /f “delims=” %%a in (zhidian.txt) do echo.%%a

4) continue 和 break

选用 goto 已毕程序中常用的 continue 和 break 命令, 其实卓殊不难

continue: 在 for 循环的终极一行写上一个标签,跳转到那地方即可

break: 在 for 循环的外围的下一句写上一个标签,跳转到那地方即可

Sample: (伪代码)

for /F [“options”] %variable IN (command) DO (

… do command …

if … goto continue

if … goto break

… do command …

:continue

)

:break

 

四、其余命令

1. ping 命令

测试网络连接境况以及音信包发送和接收意况。可是无法测试端口。

语法:ping IP地址或主机名 [-t] [-a] [-n count] [-l size]

参数含义:

-t 不停地向目的主机发送数据;

-a 以IP地址格式来显示目的主机的网络地址;

-n count 指定要Ping多少次,具体次数由count来指定;

-l size 指定发送到目标主机的数据包的轻重缓急。

Sample: ping 192.168.0.1 -t (不停的测试192.168.0.1,按ctrl+c甘休)

Sample: for /L %%a in (0,1,255) do ping 192.168.0.%%a -n 1 >>
tmp.txt (ping一下负有的局域网电脑)

2. telnet 命令

测试端口使用 telnet IP地址或主机名 端口,使用tcp协议的

Sample: telnet 192.168.0.1 80 (测试192.168.0.1的80端口)

3.color 命令

安装背景及字体颜色

语法: color bf

b 是指定背景观的十六进制数字; f 指定前景颜色(即字体颜色)。

颜色值: 0:黑色 1:蓝色 2:绿色 3:湖蓝 4:红色 5:紫色 6:** 7:白色

8:灰色 9:淡蓝 A:淡绿 B:浅绿 C:淡红 D:淡紫 E:淡黄 F:亮白

假如没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的水彩。

即使两参数一样,视为无效输入。只有一个参数时,设置字体。

4. random 命令

发生随机数(正整数0~)

5. exit 命令

利落程序。即时是被调用的先后,甘休后也不会回到原程序

6. shutdown命令

shutdown -s 关机

五、字符串处理

1) 分割字符串,以查看时间为例

%源字符串:~先导值,截取长度%
(初始值从0开端;截取长度是可选的,若是简单逗号和截取长度,将会从早先值截取到结尾;

截取长度假如是负数,表示截取到尾数第多少个。)

“%time%” 突显如:”11:04:23.03″ (完整的大运”hh:mm:ss.tt”)

“%time:~0,5%”
突显”hh:mm”(即”11:04″),其中0表示从右向左移位操作的个数,5象征从左向右移位操作的个数

“%time:~0,8%” 突显专业时间格式”hh:mm:ss”(即”11:04:23″,前8个字符串)

“%time:~3,-3%”呈现”mm:ss”(即从第4个起来,截去最终3个的字符串)

“%time:~3%” 突显”04:23.03″(即去掉前4个字符串)

“%time:~-3%” 显示”.tt”(即最终3个字符串)

地点的字串分割格式,也足以用于其他地点,如目录路径:”%cd:~0,10%”

2) 替换字符串

set a=”abcd1234″

echo %a% 显示:”abcd1234″

set a=%a:1=kk% 替换“1”为“kk”

echo %a% 显示:”abcdkk234″

3) 字符串合并

鉴于并未直接的字符串合并函数,只好用笨办法了。

set str1=%str1%%str2% (合并 str1 和 str2)

4) 统计字符串长度

从没现成的函数。如下程序行使
goto形成巡回,不断将字符串截短1,并记下截短的次数,到字符串变成空时的次数即长度。

set testStr=This is a test string

:: 将 testStr 复制到str,str 是个临时字符串

set str=%testStr%

:: 标签,用于goto跳转

:next1

:: 判断str是或不是空,如若不是则举行下面的言语

if not “%str%”==”” (

:: 算术运算,使num的值自增1,相当于num++只怕++num语句

set /a num+=1

:: 截取字符串,每一回截短1

set “str=%str:~1%”

:: 跳转到next1标签: 那里运用goto和标签,构成循环结构

goto next1

)

:: 当以上循环结构执行完成时,会进行上边的语句

echo testStr=%testStr%

echo testStr的长度为:%num%

5) 截取字符串时,须要传递参数

直接 echo %args:~%num%,-5% 不能想要的字符串,须求如下两步

setlocal enabledelayedexpansion

echo !args:~%num%,-5!

 

六、注册表操作

1) 备份注册表,将[HKEY_LOCAL_MACHINE …
Run]的内容,备份到“c:\windows\1.reg”

reg export
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
c:\windows\1.reg

reg export
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
c:\windows\2.reg

2) 修改/添加注册表内容

a.一般的添加或修改

reg add “HKCU\Environment” /v Java_Home /t reg_sz /d
“D:\Java\jdk1.6.0_07” /f

上句解析:“HKCU”是“HKEY_CURRENT_USER”的缩写,不用缩写用全称也得以;

添加名称为“Java_Home”的变量;类型为“reg_sz”,另一种普遍类型是“reg_dword”;值为
D:\Java\jdk1.6.0_07;

b.使用变量

set SoftWareHome=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java

reg add “%SoftWareHome%Web Start\1.6.0_07” /v Home /t reg_sz /d
“%cd%\jre1.6.0_07\bin” /f

c.借使注册表的称谓有空格,只怕数额用特殊符号时

reg add “%SoftWareHome2%\HelpCommands” /v “01:Online Documentation” /t
reg_sz /d “\”%cd%\Documentation\Index.htm\”” /f

传入值为(值用双引号括起来的):”D:\ProgramFiles\1.work_soft\Sybase\PowerDesigner_12\Documentation\Index.htm”

reg add “%SoftWareHome2%\Paths” /v ReportTemplates /t reg_sz /d
“%cd%\Resource Files\Report Templates\\” /f

传入值为(“\”结尾的): E:\Holemar\1.notes\90. Windows\Resource
Files\Report Templates\

d.增添空的始末

reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared
Tools\MSConfig\startupreg\IMJPMIG8.1”

e.添加或修改默许值

reg add “%vpath%InstallPath” /ve /t reg_sz /d “%cd%” /f

此地用“/ve”来顶替相似修改时的“/v 变量名”,即可修改默许值了

3) 删除注册表的内容

双引号里面的是注册表的目录,上面两句将去除那引得下的有着新闻

reg delete “HKEY_CURRENT_USER\Software\RealVNC” /f

reg delete “HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC” /f

双引号里面的是注册表的目录,下边一句将去除那引得下指定的某个消息

reg delete “HKEY_LOCAL_MACHINE\Software\RealVNC” /v VNC_Server /f

4) 注册表的常用地方

a.系统启动项:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]

example: REG ADD
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
/v VNC_Server /t REG_SZ /d “%cd%\VNC_Server.bat” /f

b.系统环境变量:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Environment]

c.当前用户的环境变量:

[HKEY_CURRENT_USER\Environment]

5)
修改注册表之后,截止天公地道复加载explorer.exe进度,可刷新注册表,令其收效

taskkill /f /im explorer.exe >nul

start “” “explorer.exe”

 

七、系统服务

1) 截至服务:NET STOP 服务名

启航服务:NET Start 服务名

2) 设置启动项目

自动: SC CONFIG 服务名 START= auto

手动: SC CONFIG 服务名 START= demand

已禁用:SC CONFIG 服务名 START= disabled

附:“START= ”等号前面总得要有一个空格。(start还有boot,system三个值)

Sample: SC CONFIG Spooler START= demand
(打印机加载项,设置成手动,默许自动)

3) 查看系统服务:start %SystemRoot%\system32\services.msc /s

 

八、setlocal与变量延迟

0)
在平素不开启变量延迟的事态下,某条命令行中的变量改变,必须到下一条命令才能浮现。

别的例如for命令等,其后用一对圆括号闭合的保有语句也视作一行。

example:

set a=4

set a=5 & echo %a%

结果:4

也得以对那种体制加以运用,如下的变量沟通

example:

set var1=abc

set var2=123

echo 交换前: var1=%var1% var2=%var2%

set var1=%var2%& set var2=%var1%

echo 交换后: var1=%var1% var2=%var2%

1) 启动批处理文件中环境变量的本地化。本地化将不止到出现匹配的 endlocal
命令只怕到达批处理文件结尾截至。

语法: setlocal {enableextension | disableextensions}
{enabledelayedexpansion | disabledelayedexpansion}

enableextension: 启用命令扩大,直到出现匹配的 endlocal 命令,无论
setlocal 命令此前的安装什么样。

disableextensions: 禁用命令扩大,直到现身匹配的 endlocal 命令,无论
setlocal 命令此前的设置哪些。

enabledelayedexpansion: 启用延迟的环境变量伸张,直到出现匹配的 endlocal
命令,无论 setlocal 命令之前的安装什么样。

disabledelayedexpansion: 禁用延迟的环境变量伸张,直到出现匹配的 endlocal
命令,无论 setlocal 命令从前的安装哪些。

 

2)
为了可以感知环境变量的动态变化,批处理规划了变量延迟。简单来讲,在读取了一条完整的说话之后,不立时对该行的变量赋值,而会在某个单条语句执行从前再举行赋值,也就是说“延迟”了对变量的赋值。

examle:

setlocal enabledelayedexpansion

set a=4

set a=5 & echo !a!

结果: 5

变量延迟的开行语句是“setlocal
enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来

由于起步了变量延迟,所以批处理可以感知到动态变化,即不是先给该行变量赋值,而是在运转进度中给变量赋值,因而此时a的值就是5了

此外,启动变量延迟,“%”的变量依旧不变

example2:

setlocal enabledelayedexpansion

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

set a=%%i

echo !a!

)

结果,打印从1到5;如若不变量延迟,一个变量也一贯不打印

 

九、文件处理

1.删除

1) 删除一个文件或八个文本

del /s /q /f d:\test\a.bat

将一直删除d:\test\a.bat,没有义务提醒

del temp\* /q /f /s

将一向删除 本目录的 temp 目录的装有文件,没有职务提醒

去除文件的时候可以行使“*”作通配符

2) 删除一个空目录

rd /q /s d:\test\log

将一贯删除d:\test\log目录,如若log目录里面有文件将不可以删除

3) 删除一个非空目录 (必须指定目录名称)

rmdir /q /s d:\test\logs

无法不指定目录名称,不或者使用通配符

/S 除目录自身外,还将去除指定目录下的所有子目录

/Q 安静形式,带 /S 删除目录树时不须求确认

不论里面是还是不是有文件或文件夹将一切直接删除

2.创造目录

MKDIR [drive:]path

MD [drive:]path

路线有空格时,可以用双引号括起来,也可以用   替代

履行部分:

======================================================================

 

小摘录:

  1. 调用其他程序时,对文本的高低写不灵敏,文件后缀也可忽略

如:start LeapFTP.exe 与 start leapftp
效果等同,都是运行“LeapFTP.exe”文件

每行的开始的字符串会自动寻找程序来运行,还可用双引号引起来(文件名或目录名含空格时必须用)

如:”D:\Program Files\Leap FTP.exe”

“LeapFTP.exe” 可正常运行文件,start “” “LeapFTP.exe”
也可以正常运行文件(注意,第四个参数是窗口展现的标题)

  1. copy C:\test\*.* D:\back
    (复制C盘test文件夹的具备文件(不包涵文件夹及子文件夹里的东西)到D盘的back文件夹)

  2. dir c:\*.* > a.txt (将c盘文件列表写入 a.txt 中)

  3. > 生成文件并写入内容(倘使有那文件则覆盖), >> 文件里增加内容

  4. md d:\aa (创造文件夹)

  5. 在命令末尾加上“>NUL 2>NUL”,表示隐蔽重回音信。

  6. 等待用户输入: set /p 变量名=显示器展现消息。 Sample:set /p
    pass=请输入密码:

  7. 让用户按回车退出

小技巧(替代pause),文件的尾声一句:set /p
tmp=操作停止,请按回车键退出…

10.装置标题: title JDK安装

11.安装显示屏突显颜色,如蓝色: color 0a

12.清屏: cls

13.查看本身的IP:

for /f “tokens=15” %%i in (‘ipconfig ^| find /i “ip address”‘) do set
ip=%%i

echo %ip% (那时的 %ip% 就是协调的IP地址)

 

  1. 修改文件的换代日期

copy 文件名+,,>nul
(修改为当下岁月,即使要修改为指定时间,先修改系统时间,再改回系统时间)

  1. 修改文件的后缀名

ren C:\test\*.jpg *.JPG

for /r %%c in (*.jpg) do (ren %%c *.JPG) ::
修改当前目录下的富有文件的后缀名,包蕴子目录的

  1. 修改文件的文件名

rename test.jpg test2.JPG

rename *.jpg *.888.JPG

  1. 查看DNS、IP、Mac等

1) Win98: winipcfg

2) Win2000以上: Ipconfig /all

3) NSLOOKUP

18.查看IP上的共享资源,就可以

net view 192.168.10.8

19.共享

A.查看你机器的共享资源: net share

B.手工删除共享

net share 共享资源名称$ /d

瞩目$后有空格。

C.扩张一个共享:

net share mymovie=e:\downloads\movie /users:3

mymovie 共享成功。 同时限制链接用户数为3人。

20.开拓某网站

start iexplore.exe http://www.baidu.com

 

实例

  1. 转移 reg 文件,运行它,再删除它

echo “更改windows安装文件的路径”

echo Windows Registry Editor Version 5.00 > c:\setupreg.reg

echo
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup]
>> c:\setupreg.reg

echo “ServicePackSourcePath”=”D:\\Win2003\\” >>
c:\setupreg.reg

echo “SourcePath”=”D:\\Win2003\\” >> c:\setupreg.reg

:: 写入注册表

regedit /S c:\setupreg.reg

:: 删除注册表文件

del c:\setupreg.reg

 

2.调用了exe文件,停止后不曾停歇,解决办法

用start命令运行文件,如:

start LeapFTP.exe 192.168.0.100

 

3.装置系统环境变量

:: 有这一个环境变量,则不需再安装,直接结束

if not “%JAVA_HOME%” == “” exit

:: 设置环境变量的地点

set inputJavaHome=%cd%\jdk1.6.0_07

:: 设置环境变量,也得以设置当前用户的变量

set
EnvironmentHome=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Environment

echo 正在设置环境变量,请稍候……

reg add “%EnvironmentHome%” /v JAVA_HOME /t reg_sz /d
“%inputJavaHome%” /f

reg add “%EnvironmentHome%” /v ClassPath /t reg_sz /d
“.;%%JAVA_HOME%%\lib” /f

reg add “%EnvironmentHome%” /v Path /t reg_sz /d
“%%JAVA_HOME%%\bin;%Path%” /f]

:: 刷新,令环境变量生效

taskkill /f /im explorer.exe >nul

start “” “explorer.exe”

 

4.潜伏某目录的有着文件及文件夹

cd /d 要隐藏的目录(如:D:)

for /f “usebackq delims=” %%A in (`dir /a /b`) do (attrib “%%A” -r +h
-s)

 

5.在批处理中拔取密码。密码为admin,输入正确,跳转到next1
,若输入密码错误3次,则锁屏。。

@echo off

set num=0

:11

set /p pass=请输入密码:

if “%pass%”==”admin” goto next1

set /a num=%num% + 1

if %num%==3 goto no1

goto 11

:no1

%windir%\system32\rundll32.exe user32.dll,LockWorkStation

goto 11

:next1

echo 密码正确,执行上边的程式

pause

 

6.清空回收站(未得逞)

@echo off

del /f /s /q c:\recycler\*.*

::刷新显示屏

taskkill /f /im explorer.exe >nul

start “” “explorer.exe”

 

7.让系统断断续续地鸣叫

@echo off

:begin

:: 发出鸣叫(“”实际就是ASCII码值为7的特殊字符(蜂鸣键beep)

echo

:: 让程序暂停一小阵子

ping -n 1 -l 1 127.1>nul

goto :begin

8.将 FAT 卷转换成 NTFS

采纳“CONVERT.exe”进行,解析如下:

CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity]
[/X]

volume 指定驱动器号(后边跟一个冒号)、装载点或卷名。

/FS:NTFS 指定要被更换成 NTFS 的卷。

/V 指定 Convert 应该用详述形式运作。

/CvtArea:filename

将根目录中的一个继承文件指定为NTFS 系统文件的占位符。

/NoSecurity 指定每种人都得以访问转换的文书和目录的石嘴山设置。

/X 要是要求,先强行卸载卷。该卷的有着打开的句柄则不算。

 

先后如下:

@ ECHO OFF

@ ECHO.

@ ECHO. 说 明

@ ECHO

@ ECHO
NTFS是一种磁盘格式。该格式能存放当先4G的单个文件(如高清电影文件),并可对

@ ECHO
文件夹进行加密,但有个缺陷是DOS下不可能访问。提议D盘及今后的盘选用NTFS格式,

@ ECHO
C盘如非需求可以不转移,FAT32与NTFS这二种格式的读写速度大概是从未有过异样的。

@ ECHO

@ ECHO.

convert c: /fs:ntfs

:: D盘也转成 NTFS

convert d: /fs:ntfs

 

9. 拿走自我的文档

SET
SF=”HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell
Folders”

FOR /F “tokens=2,*” %%I IN (‘REG QUERY %SF% /v Personal 2^>NUL^|FIND
/I “Personal”‘) DO SET “myDoc=%%~J”

:: 复制文件到我的文档

XCOPY /D /E /R /Y /C “%cd%\test.txt” “%myDoc%\test\”

10 获取当前目录路径

cd ./

set CURR_PATH=%cd%

==========================================

实例:

3.IF-ERRORLEVEL

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝战败

IF ERRORLEVEL 0 ECHO 成功拷贝文件

 

假定文件拷贝成功,显示器就会来得“成功拷贝文件”,否则就会体现“文件拷贝战败”。

IF ERRORLEVEL
是用来测试它的上一个DOS命令的再次回到值的,注意只是上一个发令的重临值,而且重返值必须根据从大到小程序顺序判断。因而上面的批处理文件是不当的:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:\

CHO 成功拷贝文件

IF ERRORLEVEL 1 ECHO 未找到拷贝文件

IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作

IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作

IF ERRORLEVEL 4 ECHO 拷贝进度中写盘错误

随便拷贝是还是不是中标,前边的:

未找到拷贝文件

用户通过ctrl-c中止拷贝操作

预置错误阻止文件拷贝操作

拷贝进程中写盘错误

都将显得出来。

以下就是多少个常用命令的重回值及其代表的意思:

backup

0 备份成功

1 未找到备份文件

2 文件共享争执阻止备份落成

3 用户用ctrl-c中止备份

4 由于致命的一无所能使备份操作停顿

diskcomp

0 盘相比一致

1 盘比较差别

2 用户通过ctrl-c中止相比较操作

3 由于致命的失实使比较操作停顿

4 预置错误中止相比较

diskcopy

0 盘拷贝操作成功

1 非致命盘读/写错

2 用户通过ctrl-c截止拷贝操作

3 因致命的处理错误使盘拷贝中止

4 预置错误阻止拷贝操作

format

0 格式化成功

3 用户通过ctrl-c中止格式化处理

4 因致命的处理错误使格式化中止

5 在提示“proceed with format(y/n)?”下用户键入n截止

xcopy

0 成功拷贝文件

1 未找到拷贝文件

2 用户通过ctrl-c中止拷贝操作

4 预置错误阻止文件拷贝操作

5 拷贝进度中写盘错误

 

=============================================================

@echo off //不显示shell的命令。

Setlocal //环境改变只适用于那几个文件。

%OS% //为当前的操作系统。

Rem //注释一行文本。

Goto 标签 //改变执行各样,去标签地点.

:标签 //定义一个标签。

Set 变量名=值 //定义变量

Not //取反

Netstat –na //显示当前被点用的端口.

%0 %1 %2 //用于表示批处理文件的参数0为命令,共1-9个参数。

Shift //用于向前一个参数,原1变0,原2变1.每调用三回shift向前一平移一位。

Call //调用其余批处理文件或指令。

Start 命令 参数 //提示出在另一个窗口中初阶运行命令。

=============================================================

:: 那段批处理程序可以自行安装Java环境变量

 

@echo off

IF EXIST %1\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,伊始设置环境变量

@setx JAVA_HOME %1

@setx path %path%;%JAVA_HOME%\bin

@setx classpath %classpath%;.

@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar

@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar

@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar

@echo on

@echo Java 2 SDK 环境参数设置为止,正常退出。

) ELSE (

IF “%1″==”” (

rem 如没有提供安装目录,提示之后退出

@echo on

@echo 没有提供 Java2SDK 的设置目录,不做其他设置,现在淡出环境变量设置。

) ELSE (

rem 假如提供非空的装置目录但绝非bin\java.exe,则指定的目录为错误的目录

@echo on

@echo 不合法的 Java2SDK 的设置目录,不做其余设置,现在淡出环境变量设置。

)

)

 

或是境遇标题

汉语乱码

把bat文件的编码改为ANSI,UTF-8在win10自身那儿会普通话突显乱码。

说明

本文部分内容转发自:http://m18333611647.blog.163.com/blog/static/225533041201422111365439/