C语言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 /?打开帮助

cmd窗口中文乱码

于CMD窗口右键/默认值,打开属性选择
“默认代码页为简体中文GBK”,

收获命令帮助 xxx /?

遇见记不清楚的授命,但记得名字,就可键入
命令名 空格
/?就会见发详尽的拖欠令的协助了,比如:ping /?     cd /?

查看内置命令的救助信息

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独参数为他)

Sample: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 [路径\]文件名 待执行的吩咐

如果发生指定的文书,则法建立,运行命令,否则运行下同样句。

Sample: 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/