Bat批处理

  • 个人案例
    • 使用实例
      • 注释如何书写
      • 新建文件夹
      • 删除文件
      • 更改文件后缀
      • 获取当前文件夹路径
      • 合并txt并显示文件名
  • 进阶用法
    • 基础语法
    • 参数
      • 系统参数
      • 传递参数给批处理文件
    • 批处理基本命令
      • help 命令
      • Echo 命令
      • @ 命令
      • Goto 命令
      • Rem 命令
      • Pause 命令
      • Call 命令
      • start 命令
      • If 命令
      • choice 命令
      • for 命令
    • 其他命令
      • ping 命令
      • telnet 命令
      • color 命令
      • random 命令
      • shutdown命令
      • exit 命令
      • 所有内置命令的帮助信息
    • 字符串处理
      • 分割字符串,以查看时间为例
      • 替换字符串
      • 字符串合并
      • 计算字符串长度
      • 截取字符串时,需要传递参数
    • 注册表操作
      • 备份注册表
      • 修改/添加注册表内容
      • 删除注册表的内容
      • 注册表的常用位置
      • 修改注册表之后,结束并重新加载explorer.exe进程,可刷新注册表,令其生效
    • 系统服务
      • 系统服务
    • setlocal与变量延迟
      • setlocal与变量延迟
    • 文件处理
      • 删除
      • 创建目录

个人案例

使用实例

注释如何书写

三种写法::: rem goto xx :xx

::这里是注释(中间不需要空格)rem 这里也是注释(中间需要空格隔开)goto damogu这里面是注释这一行也是注释这个是段注释的写法
:damogu

新建文件夹

::在D盘新建一个名为test的文件夹
md D:\test        ::在当前路径下新建名为docs、vue的文件夹
md docs vue    ::在当前路径下新建docs文件夹以及在docs文件夹下新建dev文件夹
md docs/dev

删除文件

::删除文件
del 1.txt 2.txt

更改文件后缀

::将带有"参数"的文件名且后缀带有"prm"的文件更名为*参数txt,*为通配符。
ren *参数*.prm* *参数.txt

获取当前文件夹路径

@echo off
dir/b/s>aaa.txt
pause

合并txt并显示文件名

@echo off
for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
(echo %%~na
type %%~a
echo,)>>new.temp)
ren new.temp new.txt
pause

进阶用法

基础语法

  1. 批处理文件是一个.bat结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。
  2. 批处理是一种简单的程序,可以用 ifgoto 来控制流程,也可以使用 for 循环
  3. 批处理的编程能力远不如C语言等编程语言,也十分不规范。
  4. 每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。
  5. C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。
  6. 大小写不敏感(命令符忽略大小写)
  7. 批处理的文件扩展名为 .bat 或 .cmd。
  8. 在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。

参数

系统参数

%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!

传递参数给批处理文件

%[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)

批处理基本命令

help 命令

/? 命令
语法: 命令 /?
可显示此命令的帮助信息
Sample: type /? >>tmp.txt  (把 type 命令的帮助信息写入到tmp.txt文件里)
Sample: help type  (显示跟“type /?”一样)

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 这个文件)

@ 命令

表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦)
@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。Sample: @echo off  (此语句常用于开头,表示不显示所有的命令行信息,包括此句)
Sample: @echo please wait a minite...
Sample: @format X: /q/u/autoset(format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的

Goto 命令

语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
指定跳转到标签行,找到标签行后,程序将处理从下一行开始的命令。
label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表示这个字母是标签。
goto命令就是根据这个冒号来寻找下一步跳到到那里。经常与 if 配合使用,根据不同的条件来执行不同的命令组。
例题见"Pause 命令"

Rem 命令

语法:Rem Message...
(小技巧:用::代替rem)
注释命令,在C语言中相当与/*...*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和自己日后修改。Sample:@Rem Here is the description.

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 命令会使程序挂起,以便您更换磁盘,然后按任意键再次复制。

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个参数给他)注:可以调用自身(死循环、递归)

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  (文件路径名有空格时)

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 offXCOPY 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 10 ( echo comment2 ) else (echo comment3 )
    注:如果 else 的语句需要换行,if 执行的行尾需用“^”连接,并且 if 执行的动作需用(括起来),否则报错
    Sample: if 1 == 0 ( echo comment1 ) else if 10 ( echo comment2 ) ^
    else (echo comment3 )

  5. 比较运算符

    EQU - 等于   (一般使用“==”)
    NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于
    

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

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 commandFOR /F ["options"] %variable IN ("string") DO commandFOR /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 %%ab. 如下命令行会显示 E盘test目录 下所有以bat或者txt为扩展名的文件名。for /R E:\test %%b in (*.txt *.bat) do echo %%bfor /r %%c in (*) do (echo %%c)  :: 遍历当前目录下所有文件c. 如下命令行将产生序列 1 2 3 4 5for /L %%c in (1,1,5) do echo %%cd. 以下两句,显示当前的年月日和时间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 enabledelayedexpansionfor /f %%i in (zhidian.txt) do (set atmp=%%iset 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 continueif ... goto break... do command ...:continue):break

其他命令

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一下所有的局域网电脑)

telnet 命令

测试端口使用 telnet IP地址或主机名 端口,使用tcp协议的Sample:  telnet 192.168.0.1 80 (测试192.168.0.1的80端口)

color 命令

设置背景及字体颜色
语法: color bf
b 是指定背景色的十六进制数字; f 指定前景颜色(即字体颜色)。颜色值:     0:黑色    1:蓝色    2:绿色    3:湖蓝    4:红色    5:紫色    6:黄色    7:白色8:灰色    9:淡蓝    A:淡绿    B:浅绿    C:淡红    D:淡紫    E:淡黄    F:亮白如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。
如果两参数一样,视为无效输入。只有一个参数时,设置字体。

random 命令

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

shutdown命令

shutdown -s 关机

exit 命令

结束程序。即时是被调用的程序,结束后也不会返回原程序

所有内置命令的帮助信息

ver /?
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?

字符串处理

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

%源字符串:~起始值,截取长度%  (起始值从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%"

替换字符串

set a="abcd1234"
echo %a%          显示:"abcd1234"
set a=%a:1=kk%    替换“1”为“kk”
echo %a%          显示:"abcdkk234"

字符串合并

由于没有直接的字符串合并函数,只能用笨方法了。set str1=%str1%%str2%    (合并 str1 和 str2)

计算字符串长度

没有现成的函数。如下程序利用 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%

截取字符串时,需要传递参数

直接 echo %args:~%num%,-5% 没办法想要的字符串,需要如下两步setlocal enabledelayedexpansion
echo !args:~%num%,-5!

注册表操作

备份注册表

将[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

修改/添加注册表内容

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\Javareg add "%SoftWareHome%Web Start\1.6.0_07" /v Home /t reg_sz /d "%cd%\jre1.6.0_07\bin" /fc.如果注册表的名称有空格,或者数据用特殊符号时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 变量名”,即可修改默认值了

删除注册表的内容

双引号里面的是注册表的目录,下面两句将删除这目录下的所有信息
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

注册表的常用位置

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" /fb.系统环境变量:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]c.当前用户的环境变量:[HKEY_CURRENT_USER\Environment]

修改注册表之后,结束并重新加载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与变量延迟

setlocal与变量延迟

  1. 在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行。

    example:set a=4set a=5 & echo %a%
    结果:4
    也可以对这种机制加以利用,如下的变量交换
    example:set var1=abcset var2=123echo 交换前: var1=%var1% var2=%var2%set var1=%var2%& set var2=%var1%echo 交换后: var1=%var1% var2=%var2%
    
  2. 启动批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止。

    语法: setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
    enableextension: 启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
    disableextensions: 禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
    enabledelayedexpansion: 启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
    disabledelayedexpansion: 禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
    
  3. 为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值

    examle:setlocal enabledelayedexpansionset a=4set a=5 & echo !a!
    结果: 5
    变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来
    由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了
    另外,启动变量延迟,“%”的变量还是不变
    example2:setlocal enabledelayedexpansionfor /l %%i in (1,1,5) do (set a=%%iecho !a!)
    结果,打印从1到5;如果不变量延迟,一个变量也没有打印
    

文件处理

删除

  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 删除目录树时不要求确认
    无论里面是否有文件或文件夹将全部直接删除
    

创建目录

MKDIR [drive:]path
MD [drive:]path
路径有空格时,可以用双引号括起来,也可以用 &nbsp; 替代

Windows bat批处理常用指令,常用指令及语法总结相关推荐

  1. windows .bat批处理实现进程监控确保程序运行

    windows .bat批处理实现进程监控确保程序运行 转载于:https://www.cnblogs.com/liuys635/p/11258603.html

  2. WINDOWS BAT 批处理入门

    批处理 说明 面向程序编程. 实际 提高效率. 内容 若干指令. 需要反复执行. 保存到文件中方便执行. 启动cmd 到C:\Windows\System32下双击cmd.exe指令. Win+r输入 ...

  3. Windows BAT批处理脚本教程

    第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识: ...

  4. Windows BAT批处理命令详解

    批处理可以说是windows下的shell,虽然没有shell强大吧,但也足以用来完成很多任务了.这里记录了大部分的批处理用法. 先说使用批处理要注意的几点: 尽量不要将批处理要操作的文件放在不同的盘 ...

  5. windows bat批处理解压文件

    又遇到了问题,同学给的文件夹里面都是压缩包,并且有365个文件夹,因此要对其进行批处理解压,并且还是.gz文件.解决了,一步一步来吧: 1.首先将winrar导入到系统路径,找到winrar的安装路径 ...

  6. Windows Bat批处理技巧之管理员权限运行

    [需求背景] 近期在做一些自动化分析的脚本,其中一项任务是对Windows EventLog实施导出动作,简单片段如下所示: echo "事件日志导出" set var=%DATE ...

  7. windows bat 批处理 !vm 合并快播文件

    今天简单的写了一个bat批处理文件 用来处理快播的p2p的文件,一般回事这样的目录 你可以下载如下代码 @echo off for /r %%a in (.) do (echo %%acd %%aco ...

  8. Windows bat批处理 结束进程

    新建一个txt文档,命令为taskkill.bat(随意命名),复制下面的命令保存 以管理员身份运行: @echo off taskkill /F /T /IM mysqld.exe taskkill ...

  9. BAT批处理基本命令

    什么是 BAT 批处理脚本语言? BAT 批处理脚本语言是 Windows 系统自带的一种脚本语言,主要用于批量处理文件.目录.注册表.系统设置等任务.使用 BAT 批处理脚本语言可以节省大量手动操作 ...

  10. BAT批处理脚本案例--计算字符串长度

    BAT批处理脚本没有提供字符串长度计算函数,为此需要自定义实现,本例将涉及批处理脚本下述几个关键知识点: 1)call 调用,调用结果如何赋值给变量 2)字符串截取 3)goto使用 4)变量延时读取 ...

最新文章

  1. 常见的神经网络求导总结!
  2. python numpy加速 cupy
  3. 《C++面向对象高效编程(第2版)》——3.4 赋值操作符
  4. VS或编译的时候不生成Release文件夹
  5. JZ The First Day 总结
  6. AE光效插件Optical Flares for Mac出现不显示预览缩略图,如何解决
  7. Flink Forward Asia 2021 延期,线上相见
  8. 众神的盛宴!阿里巴巴数学竞赛颁奖典礼,在江湖中一直流传许久的传说一一现身!...
  9. Java汉字转拼音实现方式
  10. 软件项目活动图 关键路径
  11. 全国各地城市FM调频电台频率列表(上海北京广州深圳长沙武汉重庆)
  12. F. Fitness Baker
  13. EDK2编译环境搭建、编译、在模拟器运行、在笔记本运行
  14. 云服务器几核CPU几G内存几M带宽够用
  15. 【工程师整活】Ai-WB1-A1S实现离线语音+APP+天猫精灵控制风扇
  16. 使用vue解决vs编辑器格式化分号逗号问题
  17. 当遇到“you may be a victim of software counterfeiting”这样的提示
  18. 专业学习与职业发展之我见(二)
  19. java常用监控命令
  20. 关于eclipse中包的问题(包下建包、包的移动和类的移动)

热门文章

  1. java ssm框架项目_3个SSM框架应用实例教程
  2. XSS跨站脚本攻击和预防措施
  3. 泛函分析 04.06 有界线性算子 - 习题课
  4. 单片机c语言数字频率计的课程设计,课程设计基于单片机的简易数字频率计报告.doc...
  5. 【Flask+SocketIO】如何用Flask做一个快捷迷你的局域网聊天室
  6. linux下搭建redis内网端口映射工具-rinetd
  7. Android视频播放器
  8. Scintilla Documentation
  9. python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
  10. 掌握通过计算机实现香农编码,信息论编码实验二香农编码