批处理文件——BAT学习

批处理文件——BAT学习


批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。

使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。

下面就开始我们批处理学习之旅吧。

语法:

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

批处理命令简介

help命令

/? 命令
语法: 命令 /?
可显示此命令的帮助信息

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

Echo 命令

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。

  语法
     echo [{on off}] [message] 
     Sample:@echo off / echo hello world 

在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中。

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

@ 命令

表示不显示@后面的命令,在入侵过程中(例如使用处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令。

 Sample:@echo off 
 @echo Now initializing the program,please wait a minite... 
 @format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)

Goto 命令

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。

语法:goto label (label是参数,指定所要转向的处理程序中的行。) 
Sample: 
if {%1}=={} goto noparms 
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。) 
 @Rem check parameters if null show usage 
  :noparms 
  echo Usage: monitor.bat ServerIP PortNumber 
  goto end 

标签的名字可以随便起,但最好是有意义的字母,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。

Rem 命令

注释命令,相当于在C语言中/--------/,它并不会被执行(小技巧:用::代替rem)。

 Rem Message 
  Sample:@Rem Here is the description. 

Pause 命令

运行 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 命令接受用作调用目标的标签。如果在脚本或处理文件外使用 Call,它将不会在命令行起作用。

语法 
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] 
参数 
[Drive:}[Path] FileName 指定要调用的处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 

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 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

choice 命令

choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……

如: choice /c:dme defrag,mem,end 
将显示:defrag,mem,end[D,M,E]? 

Sample:
  Sample.bat的内容如下:

@echo off 
  choice /c:dme defrag,mem,end 
  if errorlevel 3 goto defrag (应先判断数值最高的错误码) 
  if errorlevel 2 goto mem 
  if errotlevel 1 goto end 
  :defrag 
  		c:\dos\defrag 
  		goto end 
  :mem 
  		mem 
  		goto end 
  :end 
  echo good bye 

此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。

If 命令

if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

  1. if “参数” == “字符串” 待执行的命令

参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句(注意是两个等号)。 如,

if "%1"=="a" format a: 
if {%1}=={} goto noparms 
if {%2}=={} goto noparms 
  1. if exist 文件名  待执行的命令

如果有指定的文件,则条件成立,运行命令,否则运行下一句。 如

if exist config.sys edit config.sys 
  1. if errorlevel / if not errorlevel 数字 待执行的命令

如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。 如

if errorlevel 2 goto x2

DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0,1。

  1. 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 )
  1. 比较运算符:
    • EQU - 等于 (一般使用“==” )
    • NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)
    • LSS - 小于
    • LEQ - 小于或等于
    • GTR - 大于
    • GEQ - 大于或等于

for 命令

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

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

-%variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I,在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。
-(set) 指定一个或一组文件。可以使用通配符。
-command 指定对每个文件执行的命令。
-command-parameters 为特定命令指定参数或命令行开关。

  1. 如果命令扩展名被启用,下列额外的 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中使用双引号扩起文件名称。

  1. 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

  1. 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

批处理文件中使用参数

系统参数

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

sample2: 
  当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个处理,把肉鸡地ip password username 当着参数来赋给这个处理,这样就不用每次都打命令了。 
  @echo off 
  @net use \\1%\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。 
  @if errorlevel 1 echo connection failed 

如何使用组合命令(Compound Command)

1.amp;
  Usage:第一条命令 amp; 第二条命令 [amp; 第三条命令…]
  用这种方法可以同时执行多条命令,而不管命令是否执行成功

Sample: 
  C:\>dir z: amp; dir c:\Ex4rch 
  The system cannot find the path specified. 
  Volume in drive C has no label. 
  Volume Serial Number is 0078-59FB 
  Directory of c:\Ex4rch 

其它命令

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~)

exit 命令

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

shutdown命令

shutdown -s 关机

所有内置命令的帮助信息

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

修改/添加注册表内容

  1. 一般的添加或修改

    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;
    

2 .使用变量

     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
  1. 如果注册表的名称有空格,或者数据用特殊符号时

    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\
    
  2. 增加空的内容

      reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg\IMJPMIG8.1"
    
  3. 添加或修改默认值

      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

注册表的常用位置

  1. 系统启动项:
    [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

  1. 系统环境变量:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
  2. 当前用户的环境变量:
    [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与变量延迟

  1. 在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。另外例如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 命令之前的设置如何。

  1. 为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。

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) 删除一个文件或多个文件
   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
路径有空格时,可以用双引号括起来,也可以用   替代

文章整理转载于:Bat命令学习批处理及批处理文件中使用参数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章