CMD命令行高级教程-常用批处理内部命令(二)

前期回顾:  CMD命令行高级教程-常用批处理内部命令(一)

第一章 批处理基础

第一节 常用批处理内部命令

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

8、GOTO 和 :

GOTO 会点编程的朋友就会知道这是跳转的意思。

在批处理中允许以“ : XXX ”来构建一个标号,然后用 GOTO XXX 跳转到标号 : XXX 处,然后执行标号后的命令。

例:

检查是否提供了至少一个参数

  • %1 - 这是批处理脚本中第一个参数的占位符。如果你在运行批处理文件时输入了 my_script.bat hello world,那么 %1 就代表 hello。

  • {%1} - 用花括号 {} 将参数括起来是一种容错技巧。如果 %1 为空(即用户没提供参数),这条语句就变成了 if {} = = { } ...,这是一个有效的比较。如果直接写 if %1== ... 而 %1 又为空,脚本会因语法错误而崩溃。

  • {} - 这是用来与 {%1} 进行比较的空值。

  • goto noparms - 如果条件为真(即第一个参数为空),则跳转到脚本中名为 :noparms 的标签段执行。通常,:noparms 部分会显示一条错误信息,告诉用户如何使用脚本,然后退出。

检查是否提供了至少两个参数

  • %2 - 这是批处理脚本中第二个参数的占位符。在上面的例子中,%2 就代表 world。

  • "%2" - 用双引号将参数括起来是另一种更常见、更可靠的容错技巧。它可以处理参数中包含空格的情况(例如 %1 是 "hello world")。如果 %2 为空,这条语句就变成了 if ""=="" ...,同样是一个有效的比较。

  • " " - 一个空字符串,用于比较。

  • goto noparms - 和第一行一样,如果条件为真(即没有提供第二个参数),就跳转到错误处理部分。

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

例:

运行显示:

9、find

在文件中搜索字符串。

  • /V - 显示所有未包含指定字符串的行。

  • /C - 仅显示包含字符串的行数。

  • /N - 显示行号。

  • /I - 搜索字符串时忽略大小写。

  • /OFF[LINE] - 不要跳过具有脱机属性集的文件。

  • "string" - 指定要搜索的文字串,

  • [drive:] [path] filename - 指定要搜索的文件。如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。

  • Find 常和 type 命令结合使用

    以上用法将去除 find 命令自带的提示语(文件名提示)

    例:

    运行显示如下:

    10、start 命令

    批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
    例: start explorer d:\ #调用图形界面打开 D 盘

    11、assoc 和 ftype

    文件关联

    • assoc - 设置'文件扩展名'关联,关联到'文件类型'

    • ftype - 设置'文件类型'关联,关联到'执行程序和参数'


    当你双击一个.txt 文件时,windows 并不是根据.txt 直接判断用 notepad.exe 打开而是先判断.txt 属于 txtfile '文件类型' 。


    再调用 txtfile 关联的命令行txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1 可以在"文件夹选项"→"文件类型"里修改这2种关联

    12、CALL

    CALL 命令主要用于在批处理执行过程中调用另一个批处理脚本或本脚本内的子程序。调用完成后,会继续执行原批处理中后续的命令。

    CALL 命令主要用于在批处理执行过程中调用另一个批处理脚本或本脚本内的子程序。调用完成后,会继续执行原批处理中后续的命令。

    语法 1:调用外部批处理脚本

    语法 2:调用内部子程序(标签段)

    语法 3:调用命令行

    增强的参数扩展


    在 CALL 的子程序或脚本中,可以使用增强的语法对参数(如 %1, %2)进行扩展处理。

    组合使用示例:


    示例 1:演示参数扩展

    运行显示如下:

    示例 2:动态执行命令字符串

    运行显示如下:

    13、shift

    用于更改批处理文件中可替换参数(如 %0, %1, %2 ...)的位置,实现参数的“左移”操作。这通常用于处理不指定数量的命令行参数。

    SHIFT /n

    如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零 和 八之间。

    SHIFT 命令最常见的用途是在循环中处理所有传入的参数,因为你无法预知用户会输入多少个参数。

    运行 test.bat Apple Banana Cherry,输出将是:


    14. IF 命令

    条件判断语句,用于根据条件决定是否执行特定命令。

    语法格式

    (1) IF ERRORLEVEL - 检查退出代码

  • 必须放在某个命令之后,检查该命令的返回值

  • 数字范围:0~255

  • 判断逻辑:返回值 ≥ 指定数字时条件成立

  • 必须按数值从大到小顺序判断

  • (2) 字符串比较

  • 区分英文字母大小写

  • 等号必须为两个:==

  • 建议使用以下格式防止空格导致的错误:

  • 注意: 括号或引号会成为字符串的一部分,左右两边格式必须一致。

    (3) 文件/目录存在性检查

    功能: 检查指定的文件或目录是否存在。

    15. setlocal 与变量延迟

    问题引入: 变量读取机制


    批处理在执行前会整行预处理所有变量(包括用&连接的多条命令),导致无法感知同一行内的变量变化。

    批处理在执行前会整行预处理所有变量(包括用&连接的多条命令),导致无法感知同一行内的变量变化。

    解决方案:启用变量延迟

    使用 setlocal enabledelayedexpansion 并改用 !变量名! 格式


    实际应用案例

    案例1:for循环中的变量

    不加变量延迟:将显示5次"ECHO 处于关闭状态"

    特殊技巧:利用无延迟的特性

    说明:由于预处理,set var2=%var1% 中的 %var1% 仍是原值"abc",因此交换失败。

    核心要点

    1. 启用命令:setlocal enabledelayedexpansion

    2. 引用格式:使用 !变量名! 而非 %变量名%

    3. 适用场景:

        • 同一行内修改变量并立即引用

        • 复合语句块内(如for循环、if语句)中的变量动态变化

    4. 默认行为:变量修改需到下一条命令才能生效

    16、ATTRIB 显示或更改文件属性

    + - 设置属性。
    - - 清除属性。
    R - 只读文件属性。
    A - 存档文件属性。
    S - 系统文件属性。
    H - 隐藏文件属性。
    [drive:][path][filename] - 指定要处理的文件属性。
    /S - 处理当前文件夹及其子文件夹中的匹配文件。
    /D - 也处理文件夹。

    例:

    上面的命令将建立文件夹 autorun,然后将其设为存档、系统、隐藏属性

    终于结束了!!!!!!!后续继续更新,尽情期待!!!!!!!!!!

    更多游戏资讯请关注:电玩帮游戏资讯专区

    电玩帮图文攻略 www.vgover.com