1、.批处理 (又称 cmd.exe/.bat)批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为 bat 。目前比较常见 的批处理包含两类:DOS 批处理和 PS批处理。PS 批处理是基于强大的图片编辑软件 Photoshop 的,用来批量处理图片的脚本;而 DOS 批处理则是基于 DOS 命令的,用来自动地批量地执行 DOS 命令以实现特定操作的脚本。DOS 批 处 理 释 义批 处 理 是 一 种 简 化 的 脚 本 语 言 , 也 称 作 宏 。 它 应 用 于 DOS 和 Windows 系 统 中 ,它 是 由 DOS 或 者 Wi
2、ndows 系 统 内 嵌 的 命 令 解 释 器 ( 通 常 是 COMMAND. COM 或 者CMD.EXE) 解批 处 理 文 件 图 标释 运 行 。 类 似 于 Unix 中 的 Shell 脚 本 。 批 处 理 文 件 具 有 .bat 或 者 .cmd 的 扩 展批 处 理 窗 口名 , 其 最 简 单 的 例 子 , 是 逐 行 书 写 在 命 令 行 中 会 用 到 的 各 种 命 令 。 更 复 杂 的 情 况 , 需 要使 用 if, for, goto 等 命 令 控 制 程 序 的 运 行 过 程 , 如 同 C, Basic 等 中 高 级 语 言 一 样 。如
3、 果 需 要 实 现 更 复 杂 的 应 用 , 利 用 外 部 程 序 是 必 要 的 , 这 包 括 系 统 本 身 提 供 的 外 部 命 令和 第 三 方 提 供 的 工 具 或 者 软 件 。 批 处 理 文 件 , 或 称 为 批 处 理 程 序 , 是 由 一 条 条 的DOS 命 令 组 成 的 普 通 文 本 文 件 , 可 以 用 记 事 本 直 接 编 辑 或 用 DOS 命 令 创 建 , 也 可 以用 DOS 下 的 文 本 编 辑 器 Edit.exe 来 编 辑 。 在 “命 令 提 示 ”下 键 入 批 处 理 文 件 的 名 称 ,或 者 双 击 该 批 处
4、理 文 件 , 系 统 就 会 调 用 Cmd.exe 运 行 该 批 处 理 程 序 。 一 般 情 况 下 ,每 条 命 令 占 据 一 行 ; 当 然 也 可 以 将 多 条 命 令 用 特 定 符 号 ( 如 : &、 &、 |、 |等 ) 分 隔后 写 入 同 一 行 中 ; 还 有 的 情 况 就 是 像 if、 for 等 较 高 级 的 命 令 则 要 占 据 几 行 甚 至 几 十 几.百 行 的 空 间 。 系 统 在 解 释 运 行 批 处 理 程 序 时 , 首 先 扫 描 整 个 批 处 理 程 序 , 然 后 从 第 一 行代 码 开 始 向 下 逐 句 执 行 所
5、 有 的 命 令 , 直 至 程 序 结 尾 或 遇 见 exit 命 令 或 出 错 意 外 退 出 。简 单 批 处 理 命 令 简 介echo 命 令打 开 回 显 或 关 闭 请 求 回 显 功 能 , 或 显 示 消 息 。 如 果 没 有 任 何 参 数 , echo批 处 理 与 联 机 处 理命 令 将 显 示 当 前 回 显 设 置 。语 法echo on|off messageSample: echo off / echo hello world在 实 际 应 用 中 我 们 会 把 这 条 命 令 和 重 定 向 符 号 ( 也 称 为 管 道 符 号 , 一 般 用 )
6、 结 合 来 实 现 输 入 一 些 命 令 到 特 定 的 文 件 中 。rem 命 令注 释 命 令 , 类 似 于 在 C 语 言 中 的 /*-*/, 它 并 不 会 被 执 行 , 只 是 起 一 个 注 释 的作 用 , 便 于 别 人 阅 读和 你 自 己 日 后 修 改 。: 也 具 有 rem 的 功 能但 :和 rem 还 是 有 区 别 的 , 当 关 闭 回 显 时 , rem 和 :后 的 内 容 都 不 会 显 示 。顺 序 批 处 理.但 是 当 打 开 回 显 时 , rem 和 rem后 的 内 容 会 显 示 出 来 , 然 而 :后 的 内 容 仍 然 不
7、 会 显 示 。Rem MessageSample: Rem Here is the description.pause 命 令暂 停 命 令 。 运 行 Pause 命 令 时 , 将 显 示 下 面 的 消 息 :Press any key to continue. . .(或 : 请 按 任 意 键 继 续 . . .)Sample:echo off:begincopy G:*.* d: backecho 请 插 入 另 一 张 光 盘 .pausegoto begin在 这 个 例 子 中 , 驱 动 器 G 中 磁 盘 上 的 所 有 文 件 均 复 制 到 d:back 中 。 显
8、 示 的 注释 提 示 您 将 另 一 张 光 盘盘 放 入 驱 动 器 G 时 , pause 命 令 会 使 程 序 挂 起 , 以 便 您 更 换 光 盘 , 然 后 按 任 意键 继 续 处 理 。call 命 令从 一 个 批 处 理 程 序 调 用 另 一 个 批 处 理 程 序 , 并 且 不 终 止 父 批 处 理 程 序 。 call批 处 理 功 能 界 面命 令 接 受 用 作 调 用 目 标 的标 签 。 如 果 在 脚 本 或 批 处 理 文 件 外 使 用 Call, 它 将 不 会 在 命 令 行 起 作 用 。语 法call Drive:Path FileNam
9、e :label arguments参 数Drive:Path FileName指 定 要 调 用 的 批 处 理 程 序 的 位 置 和 名 称 。.start 命 令调 用 外 部 程 序 , 所 有 的 DOS 命 令 和 命 令 行 程 序 都 可 以 由 start 命 令 来 调 用 。如 : start calc.exe 即 可 打 开 Windows 的 计 算 器 。常 用 参 数 :MIN 开 始 时 窗 口 最 小 化SEPARATE 在 分 开 的 空 间 内 开 始 16 位 Windows 程 序HIGH 在 HIGH 优 先 级 类 别 开 始 应 用 程 序RE
10、ALTIME 在 REALTIME 优 先 级 类 别 开 始 应 用 程 序WAIT 启 动 应 用 程 序 并 等 候 它 结 束parameters 这 些 为 传 送 到 命 令 /程 序 的 参 数执 行 的 应 用 程 序 是 32-位 GUI 应 用 程 序 时 , CMD.EXE 不 等 应 用 程 序常 见 批 处 理 案 例终 止 就 返 回 命 令 提 示 。 如 果 在 命 令脚 本 内 执 行 , 该 新 行 为 则 不 会 发 生 。goto 命 令跳 转 命 令 。 程 序 指 针 跳 转 到 指 定 的 标 签 , 从 标 签 后 的 第 一 条 命 令 开 始
11、 继 续 执 行 批 处理 程 序 。语 法 : goto label ( label 是 参 数 , 指 定 所 要 转 向 的 批 处 理 程 序 中 的 行 。 )Sample:if %1= goto noparmsif %2= goto noparms( 如 果 这 里 的 if、 %1 %2 你 不 明 白 的 话 , 先 跳 过 去 ,后 面 会 有 详 细 的 解 释。 )Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end标 签 的 名
12、 字 可 以 随 便 起 , 但 是 最 好 是 有 意 义 的 字 母 啦 , 字 母 前 加 个 :.选 择 批 处 理用 来 表 示 这 个 字 母 是 标 签 , goto命 令 就 是 根 据 这 个 : 来 寻 找 下 一 步 跳 到 到 那 里 。 最 好 有 一 些 说 明 这 样 你 别 人 看 起 来才 会 理 解 你 的 意 图 啊 。set 命 令显 示 、 设 置 或 删 除 变 量 。显 示 变 量 : set 或 set s 前 者 显 示 批 处 理 当 前 已 定 义 的 所 有 变 量 及 其 值 , 后 者 显示 所 有 以 s 开 头 的 变 量 及 值
13、 。设 置 变 量 : set aa=abcd 此 句 命 令 便 可 向 变 量 aa 赋 值 abcd。 如 果 变 量 aa 已 被定 义 , 则 aa 的 值 被 修 改 为 abcd; 若 aa 尚 未 定 义 , 则 此 句 命 令 即 可 定 义 新 的 变 量aa, 同 时 为 变 量 aa 赋 予 初 始 值 abcd。删 除 变 量 : set aa= 此 句 命 令 即 可 删 除 变 量 aa。 若 变 量 aa 已 被 定 义 , 则 删 除 变量 aa; 若 aa 尚 未 定 义 , 则 此 句 命 令 无 实 质 意 义 。需 要 说 明 的 是 , 批 处 理
14、中 的 变 量 是 不 区 分 类 型 的 , 不 需 要 像 C 语 言 中 的 变 量 那样 还 要 区 分 int、 float、 char 等 。 比 如 执 行 set aa=345 后 , 变 量 aa 的 值 既 可 以 被 视为 数 字 345, 也 可 以 被 视 为 字 符 串 345。set 命 令 具 有 扩 展 功 能 , 如 用 作 交 互 输 入 、 字 符 串 处 理 、 数 值 计 算 等 , 属 于 高 级 命令 范 畴 。批 处 理 符 号 简 介回 显 屏 蔽 表 示 不 显 示 后 面 的 命 令 , 在 入 侵 过 程 中 ( 例 如 使 用 批 处
15、 理 来 格 式 化 敌 人.批 处 理 过 程的 硬 盘 ) 自 然 不 能 让 对 方 看 到 你 使 用 的 命 令 啦 。用 法 举 例 : 通 过 运 行 批 处 理 文 件 对 比 pause 和 pause 命 令 即 可 明 了 的 效果 。重 定 向 1 与 将 输 出 信 息 重 定 向 到 指 定 的 设 备 或 文 件 。 系 统 默 认 输 出 到 显 示 器 。如 : echo aaaaaa.txt 即 可 将 本 在 显 示 器 上 显 示 的 信 息 aaaaa 输 出 到 文 件 a.txt中 , 屏 幕 上 没 有 任 何 显 示 。 如 果 文 件 a.t
16、xt 本 来 已 经 存 在 , 该 命 令 将 首 先 擦 除 a.txt中 的 所 有 信 息 , 然 后 写 入 信 息 aaaaa; 若 a.txt 本 来 就 不 存 在 , 该 命 令 即 可 新 建 一 个a.txt 文 件 , 并 写 入 信 息 aaaaa。echo aaaaaa.txt 类 似 于 echo aaaaaa.txt。 区 别 在 于 : 如 果 a.txt 本 已 存 在 ,a.txt 会 擦 除 a.txt 中 的 原 有 内 容 , 而 a.txt 并 不 擦 除 原 有 内 容 , 仅 在 a.txt 文 件 的末 尾 添 加 信 息 aaaaa。 a.
17、txt 不 存 在 时 , 二 者 没 有 差 别 。重 定 向 2 a.txtecho 请 任 意 输 入 字 符 , 以 回 车 结 束 :set /p ifo=clsecho 【 从 屏 幕 获 得 的 输 入 信 息 】echo %ifo%set /p ifo=nul=读 者 观 察 命 令 与 输 出 即 可 体 会 到 重 定 向 的 功 能 和 效 果 。管 道 符 号 |将 管 道 符 号 前 面 命 令 的 输 出 结 果 重 定 向 输 出 到 管 道 符 号 后 面 的 命 令 中 去 , 作 为 后 面命 令 的 输 入 。 使 用 格 式 为 : command_1|
18、command_2管 道 符 号 使 用 举 例 :=echo off.echo aaaaa.txtdel /p a.txtpause=echo offecho aaaaa.txtecho y|del /p a.txtpause=对 比 以 上 两 个 批 处 理 执 行 结 果 , 读 者 即 可 明 白 管 道 符 的 用 法 和 效 果 。需 要 说 明 的 是 , 上 面 del 命 令 添 加 开 关 /p 只 是 为 了 让 读 者 明 白 管 道 符 号 的 使 用 方法 , 实 际 删 除 文 件 时 不 加 /p 开 关 即 可 实 现 无 提 示 直 接 删 除 。转 义
19、符 将 特 殊 符 号 转 化 为 一 般 符 号 , 即 剥 离 特 殊 符 号 的 特 殊 地 位 。 特 殊 符 号 指 : | & ”, 直 接 用 命 令 echo 是 不 行 的 , 必 须 修 改 为 echo 。 其 余 几 个 特 殊 符 号 类 似 需 要 有 同 样 的 处 理 。转 义 字 符 使 用 举 例 :=echo offecho aaaaa.txtecho 第 一 句 echo 执 行 完 毕echo aaaaa.txtecho 第 二 句 echo 执 行 完 毕pause=比 较 上 面 的 两 句 echo, 第 一 句 echo 将 信 息 aaaa
20、输 出 到 了 文 件 a.txt, 而 第 二 句echo 则 在 直 接 屏 幕 上 显 示 出 aaaaa.txt逻 辑 命 令 符逻 辑 命 令 符 包 括 : &、 &、 |&-它 的 作 用 是 用 来 连 接 n 个 DOS 命 令 , 并 把 这 些 命 令 按 顺 序 执 行 , 而 不 管 是 否有 命 令 执 行 失 败 ;&-当 &前 面 的 命 令 成 功 执 行 时 , 执 行 &后 面 的 命 令 , 否 则 不 执 行 ;|-当 |前 面 的 命 令 失 败 时 , 执 行 |后 面 的 命 令 , 否 则 不 执 行 。=echo offecho |.reg
21、add HKCU /v try /f|echo *成 功 *reg add HKCU1 /v try /f|echo *失 败 *echo ® delete HKCU /v try /f&echo *成 功 *reg delete HKCU /v try /f&echo *失 败 *echo ® delete HKCU /v try /f&echo *成 功 *reg delete HKCU /v try /f&echo *失 败 *pause=执 行 reg add 或 reg delete 后 , 系 统 会 给 出 执 行 结 果 ; 我 们 通 过 echo 命 令 也 给
22、出 了 “执 行 结 果 ”。 对 比 系 统 和 我 们 自 己 给 出 的 结 果 , 既 可 以 验 证 逻 辑 命 令 的 判 断 机 理 。常 用 DOS 命 令 释 义文 件 夹 管 理cd 显 示 当 前 目 录 名 或 改 变 当 前 目 录 。md 创 建 目 录 。rd 删 除 一 个 目 录 。dir 显 示 目 录 中 的 文 件 和 子 目 录 列 表 。tree 以 图 形 显 示 驱 动 器 或 路 径 的 文 件 夹 结 构 。path 为 可 执 行 文 件 显 示 或 设 置 一 个 搜 索 路 径 。copy 复 制 文 件 和 目 录 树 。文 件 管
23、理type 显 示 文 本 文 件 的 内 容 。copy 将 一 份 或 多 份 文 件 复 制 到 另 一 个 位 置 。del 删 除 一 个 或 数 个 文 件 。move 移 动 文 件 并 重 命 名 文 件 和 目 录 。 (Windows XP Home Edition 中 没 有 )ren 重 命 名 文 件 。replace 替 换 文 件 。attrib 显 示 或 更 改 文 件 属 性 。find 搜 索 字 符 串 。fc 比 较 两 个 文 件 或 两 个 文 件 集 并 显 示 它 们 之 间 的 不 同网 络 命 令ping 进 行 网 络 连 接 测 试 、
24、 名 称 解 析ftp 文 件 传 输net 网 络 命 令 集 及 用 户 管 理.telnet 远 程 登 陆ipconfig 显 示 、 修 改 TCP/IP 设 置msg 给 用 户 发 送 消 息arp 显 示 、 修 改 局 域 网 的 IP 地 址 -物 理 地 址 映 射 列 表系 统 管 理at 安 排 在 特 定 日 期 和 时 间 运 行 命 令 和 程 序shutdown 立 即 或 定 时 关 机 或 重 启tskill 结 束 进 程taskkill 结 束 进 程 (比 tskill 高 级 , 但 WinXPHome 版 中 无 该 命 令 )tasklist
25、显 示 进 程 列 表 (Windows XP Home Edition 中 没 有 )sc 系 统 服 务 设 置 与 控 制reg 注 册 表 控 制 台 工 具powercfg 控 制 系 统 上 的 电 源 设 置对 于 以 上 列 出 的 所 有 命 令 , 在 cmd 中 输 入 命 令 +/?即 可 查 看 该 命 令 的 帮 助 信 息 。如 find /?语 句 结 构 释 义类 似 于 C 语 言 , 批 处 理 也 有 它 的 语 句 结 构 。 批 处 理 的 语 句 结 构 主 要 有 选 择 结 构(if 语 句 )、 循 环 结 构 (for 语 句 )等 。if
26、 语 句 (选 择 结 构 )if 语 句 实 现 条 件 判 断 , 包 括 字 符 串 比 较 、 存 在 判 断 、 定 义 判 断 等 。 通 过 条 件 判 断 ,if 语 句 即 可 以 实 现 选 择 功 能 。1 字 符 串 比 较if 语 句 仅 能 够 对 两 个 字 符 (串 )是 否 相 同 、 先 后 顺 序 进 行 判 断 等 。 其 命 令 格 式 为 :IF not string1 compare-op string2 command1 else command2其 中 , 比 较 操 作 符 compare-op 有 以 下 几 类 := - 等 于EQU -
27、 等 于NEQ - 不 等 于LSS - 小 于LEQ - 小 于 或 等 于GTR - 大 于GEQ - 大 于 或 等 于选 择 开 关 /i 则 不 区 分 字 符 串 大 小 写 ; 选 择 not 项 , 则 对 判 断 结 果 进 行 逻 辑 非 。字 符 串 比 较 示 例 :=echo off.set str1=abcd1233set str2=ABCD1234if %str1%=%str2% (echo 字 符 串 相 同 ! ) else (echo 字 符 串 不 相 同 ! )if /i %str1% LSS %str2% (echo str1=str2)echo.se
28、t /p choice=是 否 显 示 当 前 时 间 ? (y/n)if /i not %choice% EQU n echo 当 前 时 间 是 : %date% %time%pausenul=对 于 最 后 一 个 if 判 断 , 当 我 们 输 入 n 或 N 时 的 效 果 是 一 样 的 , 都 不 会 显 示 时 间 。如 果 我 们 取 消 开 关 /i, 则 输 入 N 时 , 依 旧 会 显 示 时 间 。另 外 请 注 意 一 下 几 个 细 节 : 1-echo str1=str2; 2-echo.。2 存 在 判 断存 在 判 断 的 功 能 是 判 断 文 件 或
29、 文 件 夹 是 否 存 在 。 其 命 令 格 式 为 :IF NOT EXIST filename command1 else command2=echo offif exist %0 echo 文 件 %0 是 存 在 的 !if not exist %df0 (echo 文 件 夹 %df0 不 存 在 !) else echo 文 件 夹 %df0 存 在 !pausenul=这 里 注 意 几 个 地 方 :1-存 在 判 断 既 可 以 判 断 文 件 也 可 以 判 断 文 件 夹 ;2-%0 即 代 表 该 批 处 理 的 全 称 (包 括 驱 动 器 盘 符 、 路 径 、
30、 文 件 名 和 扩 展 类 型 );3-%df0 是 对 %0 的 修 正 , 只 保 留 了 其 驱 动 器 盘 符 和 路 径 , 详 情 请 参 考 for /?,属 高 级 批 处 理 范 畴 ;4-注 意 if 语 句 的 多 行 书 写 , 多 行 书 写 要 求 command1 的 左 括 号 必 须 和 if 在 同 一行 、 else 必 须 和 command1 的 右 括 号 同 行 、 command2 的 左 括 号 必 须 与 else 同 行 、command1 和 command2 都 可 以 有 任 意 多 行 , 即 command 可 以 是 命 令
31、集 。3 定 义 判 断定 义 判 断 的 功 能 是 判 断 变 量 是 否 存 在 , 即 是 否 已 被 定 义 。 其 命 令 格 式 为 :IF not DEFINED variable command1 else command2存 在 判 断 举 例 :=echo offset var=111.if defined var (echo var=%var%) else echo var 尚 未 定 义 !set var=if defined var (echo var=%var%) else echo var 尚 未 定 义 !pausenul=对 比 可 知 , “set var
32、=“可 以 取 消 变 量 , 收 回 变 量 所 占 据 的 内 存 空 间 。4 结 果 判 断masm %1.asmif errorlevel 1 pause & edit %1.asmlink %1.obj先 对 源 代 码 进 行 汇 编 , 如 果 失 败 则 暂 停 显 示 错 误 信 息 , 并 在 按 任 意 键 后 自 动 进 入编 辑 界 面 ; 否 则 用 link 程 序 连 接 生 成 的 obj 文 件 , 这 种 用 法 是 先 判 断 前 一 个 命 令 执 行后 的 返 回 码 ( 也 叫 错 误 码 , DOS 程 序 在 运 行 完 后 都 有 返 回
33、码 ) , 如 果 和 定 义 的 错 误 码符 合 ( 这 里 定 义 的 错 误 码 为 1) , 则 执 行 相 应 的 操 作 ( 这 里 相 应 的 操 作 为 pause & edit %1.asm 部 分 ) 。另 外 , 和 其 他 两 种 用 法 一 样 , 这 种 用 法 也 可 以 表 示 否 定 。 用 否 定 的 形 式 仍 表 达 上 面三 句 的 意 思 , 代 码 变 为 :masm %1.asmif not errorlevel 1 link %1.objpause & edit %1.asmfor 语 句 (循 环 结 构 )for 语 句 可 以 实 现
34、类 似 于 C 语 言 里 面 的 循 环 结 构 , 当 然 for 语 句 的 功 能 要 更 强 大一 点 , 通 过 不 同 的 开 关 可 以 实 现 更 多 的 功 能 。 for 语 句 有 多 个 开 关 , 不 同 开 关 将 会 实现 不 同 的 功 能 。1 无 开 关无 开 关 的 for 语 句 能 够 对 设 定 的 范 围 内 进 行 循 环 , 是 最 基 本 的 for 循 环 语 句 。 其命 令 格 式 为 :FOR %variable IN (set) DO command其 中 , %variable 是 批 处 理 程 序 里 面 的 书 写 格 式
35、 , 在 DOS 中 书 写 为 %variable, 即 只 有 一 个 百 分 号 (%); set 就 是 需 要 我 们 设 定 的 循 环 范 围 , 类 似 于 C 语言 里 面 的 循 环 变 量 ; do 后 面 的 command 就 是 循 环 所 执 行 的 命 令 , 即 循 环 体 。无 开 关 for 语 句 举 例 :=echo offfor %i in (a,“b c“,d) do echo %ipausenul=2 开 关 /L.含 开 关 /L 的 for 语 句 , 可 以 根 据 set 里 面 的 设 置 进 行 循 环 , 从 而 实 现 对 循 环
36、 次 数的 直 接 控 制 。 其 命 令 格 式 为 :FOR /L %variable IN (start,step,end) DO command其 中 , start 为 开 始 计 数 的 初 始 值 , step 为 每 次 递 增 的 值 , end 为 结 束 值 。 当end 小 于 start 时 , step 需 要 设 置 为 负 数 。含 开 关 /L 的 for 语 句 举 例 (创 建 5 个 文 件 夹 ):=echo offfor /l %i in (1,2,10) do md %ipause=上 例 将 新 建 5 个 文 件 夹 , 文 件 夹 名 称 依
37、 次 为 1 3 5 7 9。 可 以 发 现 , %i的 结 束 值 并 非 end 的 值 10, 而 是 不 大 于 end 的 一 个 数 。3 开 关 /F含 开 关 /F 的 for 语 句 具 有 最 强 大 的 功 能 , 它 能 够 对 字 符 串 进 行 操 作 , 也 能 够 对 命令 的 返 回 值 进 行 操 作 , 还 可 以 访 问 硬 盘 上 的 ASCII 码 文 件 , 比 如 txt 文 档 等 。 其 命 令格 式 为 :FOR /F “options“ %variable IN (set) DO command其 中 , set 为 (“string“
38、、 command、 file-set)中 的 一 个 ; options 是(eol=c、 skip=n、 delims=xxx、 tokens=x,y,m-n、 usebackq)中 的 一 个 或 多 个 的 组 合 。各 选 项 的 意 义 参 见 for /f。 一 般 情 况 下 , 使 用 较 多 的 是 skip、 tokens、 delims 三 个 选项 。含 开 关 /F 的 for 语 句 举 例 :=echo offecho *No Options:for /f %a in (“1,2,10“) do echo a=%aecho *Options tokens & d
39、elims:for /f “tokens=1-3 delims=,“ %a in (“1,2,10“) do echo a=%a b=%b c=%cpause=echo offecho 本 文 件 夹 里 面 的 文 件 有 :for /f “skip=5 tokens=3* delims= “ %a in (dir) do (if not “%a“=“ if not “%b“=“字 节 “ if not “%b“=“可 用 字 节 “ echo %b).pause=echo offecho 本 文 件 夹 里 面 的 文 件 有 :dirc:file.txtfor /f “skip=5 to
40、kens=3* delims= “ %a in (c:file.txt) do (if not “%a“=“ if not “%b“=“字 节 “ if not “%b“=“可 用 字 节 “ echo %b)del c:file.txtpause=对 于 后 面 的 两 个 例 子 , 其 中 options 里 面 的 delims= 是 可 以 删 除 的 , 因 为 只 要 添加 了 /F 开 关 系 统 就 将 delims 的 值 默 认 为 空 格 。符 号 字 符 串 中 的 最 后 一 个 字 符 星 号 ,那 么 额 外 的 变 量 将 在 最 后 一 个 符 号 解 析
41、之 后分 配 并 接 受 行 的 保 留 文 本 。 本 例 中 也 可 以 改 为 4, 不 过 文 件 名 中 有 空 格 的 文 件 ,只 能 显 示 空 格 以 前 部 分同 时 我 们 也 看 到 了 , for 语 句 的 do 后 面 的 command 也 是 可 以 分 行 的 , 只 需 要 保证 command 的 左 括 号 和 do 在 同 一 行 就 可 以 了 。4 开 关 /D 或 /R含 开 关 /D 或 /R 的 for 语 句 是 与 目 录 或 文 件 有 关 的 命 令 , 一 般 情 况 下 很 少 使 用 。 含开 关 /R 的 命 令 有 时 候
42、 被 用 于 通 过 遍 历 文 件 夹 来 查 找 某 一 个 文 件 或 文 件 夹 , 故 而 列 举 此例 。含 开 关 /R 的 for 语 句 举 例 (文 件 夹 遍 历 ):=echo offsetlocal enabledelayedexpansionFOR /R d: %i IN (.) DO (set dd=%iset “dd=!dd:0,-1!“echo !dd!)pauseexit=上 例 即 可 以 罗 列 出 D 盘 下 的 所 有 文 件 夹 , 其 速 度 要 比 命 令 “tree d:“慢 多 了 , 不 过其 返 回 结 果 的 实 用 性 则 远 远
43、超 过 了 tree 命 令 。.一 般 情 况 下 我 们 不 推 荐 通 过 遍 历 文 件 夹 来 查 找 文 件 , 特 别 是 在 查 找 某 些 程 序 (比如 QQ.exe)的 位 置 时 。 推 荐 通 过 reg 命 令 查 找 注 册 表 来 查 找 QQ 的 路 径 , 以 保 证 查 找效 率 。上 例 中 也 出 现 了 几 个 新 面 孔 , 如 setlocal、 感 叹 号 等 。 其 中 , 感 叹 号 其 实 就 是 变量 百 分 号 (%)的 强 化 版 。 之 所 以 要 用 !而 不 用 %, 是 因 为 在 for 循 环 中 , 当 一 个 变 量
44、 被多 次 赋 值 时 , %dd%所 获 取 的 仅 仅 是 dd 第 一 次 被 赋 予 的 值 ; 要 想 刷 新 dd 的 值 , 就必 须 首 先 通 过 命 令 “setlocal enabledelayedexpansion“来 开 启 延 迟 变 量 开 关 , 然 后 用 !dd!来 获 取 dd 的 值 。for 语 句 是 批 处 理 里 面 功 能 最 强 大 、 使 用 最 普 遍 却 又 最 难 掌 握 的 一 套 命 令 , 这 也 是批 处 理 菜 鸟 和 批 处 理 高 手 最 明 显 的 一 个 分 水 岭 , 一 旦 掌 握 了 这 套 命 令 , 那 么
45、 你 就 离 批 处理 达 人 不 远 了 !字 符 串 处 理 释 义批 处 理 有 着 具 有 非 常 强 大 的 字 符 串 处 理 能 力 , 其 功 能 绝 不 低 于 C 语 言 里 面 的 字符 串 函 数 集 。 批 处 理 中 可 实 现 的 字 符 串 处 理 功 能 有 : 截 取 字 符 串 内 容 、 替 换 字 符 串 特 定字 段 、 合 并 字 符 串 、 扩 充 字 符 串 等 功 能 。 下 面 对 这 些 功 能 一 一 进 行 讲 解 。1 截 取 字 符 串截 取 字 符 串 可 以 说 是 字 符 串 处 理 功 能 中 最 常 用 的 一 个 子 功 能 了 , 能 够 实 现 截 取 字 符串 中 的 特 定 位 置 的 一 个 或 多 个 字 符 。 举 例 说 明 其 基 本 功 能 :=echo offset ifo=abcdefghijklmnopqrstuvwxyz0 12 3456789echo 原 字 符 串 ( 第 二 行 为 各 字 符 的 序 号 ) :echo %ifo%echo 1234567890 123 45678