我的第三个批处理

By 甘小蔗    2018/07/24

目录涉及指令
FirstBat @ , echo , title , pause
SecondBat color , mode , set , if , goto

MyThirdBat.bat:

  1. @echo off
  2. title 我的第三个批处理
  3. :repath
  4. cls&echo,请输入或拖入想要充填的文件夹
  5. set /p wjj=
  6. if not defined wjj (echo,你没有输入任何内容&ping /n 2 127.1 >nul&goto :repath)
  7. md %wjj%\ifPathForTest
  8. if %ERRORLEVEL%==1 (echo,请确保该路径为文件夹&ping /n 2 127.1 >nul&goto :repath)
  9. rd /s /q %wjj%\ifPathForTest
  10. if exist %wjj% goto :Start
  11. echo,该文件夹不存在,请重新输入
  12. ping /n 2 127.1 >nul&goto :repath
  13. :Start
  14. for /l %%i in (1,1,1000) do (echo+ Hi,www.Ganxiaozhe.com>%wjj%\Iam%%i.txt)
  15. echo,完成!
  16. pause>nul&exit

将以上代码复制在记事本后,将后缀.txt改为.bat或.cmd,双击执行


cls

清除屏幕

语法:cls

清屏的作用


ping

校验与远程计算机或本地计算机的连接。只有在安装 TCP/IP 协议之后才能使用该命令。

语法:ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

选项:

    -t             Ping 指定的主机,直到停止。
                   若要查看统计信息并继续操作 - 请键入 Control-Break;
                   若要停止 - 请键入 Control-C。
    -a             将地址解析成主机名。
    -n count       要发送的回显请求数。
    -l size        发送缓冲区大小。
    -f             在数据包中设置“不分段”标志(仅适用于 IPv4)。
    -i TTL         生存时间。
    -v TOS         服务类型(仅适用于 IPv4。该设置已不赞成使用,且
                   对 IP 标头中的服务字段类型没有任何影响)。
    -r count       记录计数跃点的路由(仅适用于 IPv4)。
    -s count       计数跃点的时间戳(仅适用于 IPv4)。
    -j host-list   与主机列表一起的松散源路由(仅适用于 IPv4)。
    -k host-list   与主机列表一起的严格源路由(仅适用于 IPv4)。
    -w timeout     等待每次回复的超时时间(毫秒)。
    -R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
    -S srcaddr     要使用的源地址。
    -4             强制使用 IPv4。
    -6             强制使用 IPv6。
			

基础的ping格式为ping 192.168.1.1,执行后会回显过程与结果。ping也可以用域名,如ping www.ganxiaozhe.com,运行结果如下:

正在 Ping www.ganxiaozhe.com [47.90.1.202] 具有 32 字节的数据:
来自 47.90.1.202 的回复: 字节=32 时间=97ms TTL=47
来自 47.90.1.202 的回复: 字节=32 时间=41ms TTL=47
来自 47.90.1.202 的回复: 字节=32 时间=53ms TTL=47
来自 47.90.1.202 的回复: 字节=32 时间=50ms TTL=47

47.90.1.202 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 41ms,最长 = 97ms,平均 = 60ms

在ping的过程中,你会发现过程需要一定的时间,在这过程中无法执行其他指令,所以,ping也可以用作延迟执行。如ping 127.1 -n -3 >nul,127.1是IP,-n -3是发送3次回显请求数,次数越多,延迟时间越长。至于为什么要ping 127.1这个ip呢,是因为127开头的是网卡自身,无论在联网还是脱机状态下,都是可以接通的。


md (mkdir)

创建目录

语法:MD [drive:]path

如运行md UANDI,则会在当前目录下创建文件夹UANDI

如需指定路径为在C盘下Temp文件夹中创建yoyo文件夹,则为md C:\Temp\yoyo。如果已有yoyo文件夹存在,则不会进行新建文件夹。如果C盘下没有Temp文件夹,则会先创建Temp文件夹,再在Temp文件夹中创建yoyo文件夹。等同于md C:\Temp&cd C:\Temp&md C:\Temp\yoyo&cd C:\Temp\yoyo


此外,如果你创建这样一个文件夹md C:\gz..\,便就无法删除它了(正常删除下),而用rd C:\gz..\就能轻松删除掉。


rd (rmdir)

删除目录

语法:RD [/S] [/Q] [drive:]path

    /S      除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。

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

rd在没有带/q参数的情况下,假如被删除的文件夹不为空,那么都会有删除确认对话。若/q /s参数都没带,那么只要文件夹不为空,则删除取消。

如果当前删除程序批处理在删除的目录下,那么批处理本身也会被删除。


del (erase)

删除一个或数个文件

语法:DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一个或多个文件或者目录列表。
                通配符可用来删除多个文件。
                如果指定了一个目录,该目录中的所
                有文件都会被删除。

  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件
  属性          R  只读文件                     S  系统文件
                H  隐藏文件                     A  存档文件
                I  无内容索引文件               L  重分析点
                -  表示“否”的前缀

如果命令扩展被启用,DEL 和 ERASE 更改如下:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

通常del用来删除一个或一类文件,如del temp.txt为删除当前目录下的temp.txt文件,del *.txt为删除该目录下所有后缀为txt的文件。若需删除D盘下Game文件夹中所有文件,下面两个指令都可行:

  1. del /f /s /q D:\Game\*.*
  2. del /f /s /q D:\Game

注意:无论 del 带不带参数,所有被删除的文件都不会到回收站里,而是直接彻底删除。



for

对一组文件中的每一个文件执行某个特定命令

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

  %variable  指定一个单一字母可替换的参数。
  (set)      指定一个或一组文件。可以使用通配符。
  command    指定对每个文件执行的命令。
  command-parameters
             为特定命令指定参数或命令行开关。

在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

如果启用命令扩展,则会支持下列 FOR 命令的其他格式:

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

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

检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

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),如for /l %%i in (1,1,5) do (echo,报数!%%i)。该指令无法在控制台中直接运行,否则会显示"此时不应有 %%i"

FOR /F ["options"] %variable IN (file-set\"string"\'command') DO command [command-parameters]

    fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
    每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
    然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。
    以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
    或多个指定不同解析选项的关键字。这些关键字为:

        eol=c           - 指一个行注释字符的结尾(就一个)
        skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                          默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                          的 for 本身。这会导致额外变量名称的分配。m-n
                          格式为一个范围。通过 nth 符号指定 mth。如果
                          符号字符串中的最后一个字符星号,
                          那么额外的变量将在最后一个符号解析之后
                          分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 file-set
                          中使用双引号扩起文件名称。

    某些范例可能有助:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
    每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或
    空格分隔符号。请注意,此 for 函数体的语句引用 %i 来
    获得第二个符号,引用 %j 来获得第三个符号,引用 %k
    来获得第三个符号后的所有剩余符号。对于带有空格的文件
    名,您需要用双引号将文件名括起来。为了用这种方式来使
    用双引号,还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。

    %i 在 for 语句中显式声明,%j 和 %k 是通过
    tokens= 选项隐式声明的。可以通过 tokens= 一行
    指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或
    "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;
    而且,不能同时使用超过 52 个。

    还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,
    用单引号将括号之间的 file-set 括起来。这样,该字符
    串会被当作一个文件中的一个单一输入行进行解析。

    最后,可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 file-set 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到
    内存中,并被当作文件分析。如以下例子所示:

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

    会枚举当前环境中的环境变量名称。

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     %~I          - 删除任何引号("),扩展 %I
     %~fI        - 将 %I 扩展到一个完全合格的路径名
     %~dI        - 仅将 %I 扩展到一个驱动器号
     %~pI        - 仅将 %I 扩展到一个路径
     %~nI        - 仅将 %I 扩展到一个文件名
     %~xI        - 仅将 %I 扩展到一个文件扩展名
     %~sI        - 扩展的路径只含有短名
     %~aI        - 将 %I 扩展到文件的文件属性
     %~tI        - 将 %I 扩展到文件的日期/时间
     %~zI        - 将 %I 扩展到文件的大小
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩展到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩展到一个驱动器号和路径
     %~nxI       - 仅将 %I 扩展到一个文件名和扩展名
     %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
     %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个驱动器号和路径。
     %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。