windows批处理文件编写「如何在Windows上编写批处理脚本」

你知道如何使用命令提示符吗?如果这样做,您可以编写一个批处理文件。在最简单的形式中,批处理文件(或批处理脚本)是双击文件时执行的几个命令的列表。批处理文件一直回到DOS,但仍然适用于现代版本的 Windows。

PowerShell 脚本和Bash 脚本可能更强大,但如果您需要运行基本的 Windows 命令,批处理文件仍然非常有用。

批处理文件基础

批处理文件只是一个以 .bat 文件扩展名保存的文本文件。您可以使用记事本或更高级的文本编辑器(如Notepad )编写一个,但不要使用文字处理器(如 Microsoft Word)。

让我们创建一个简单的批处理文件。首先,打开记事本。在其中键入以下几行:

ECHO OFF ECHO 你好世界暂停

接下来,通过单击文件 > 保存来保存文件。给它任何你喜欢的名字,但用 .bat 扩展名替换默认的 .txt 文件扩展名。

例如,您可能希望将其命名为hello_world.bat。

您现在有一个带有 .bat 文件扩展名的批处理文件。双击它运行它。这个特定的批处理文件将 ECHO 设置为关闭(它通过隐藏在提示符下打印的命令来清理输出,将文本“Hello World”打印到屏幕上,然后在它结束之前等待您按下一个键。

如果您没有添加PAUSE到文件中,批处理文件将简单地运行其命令,然后自动关闭。在这种情况下,它会将“Hello World”打印到窗口,然后立即关闭命令提示符窗口。当你想快速运行命令而不看到输出时,你可以省略它。如果您正在运行多个命令,则可以将PAUSE命令放在它们之间。

编写更复杂的批处理文件

创建批处理文件从根本上来说很简单。您唯一需要更改的是您在记事本中键入的内容。要运行多个命令,请在单独的行中键入每个命令,批处理文件将按顺序运行每个命令。

例如,假设我们要编写一个运行多个网络诊断命令的批处理文件。我们可能想运行ipconfig /all以查看网络信息,ping google.com查看 Google 的服务器是否有响应,并tracert google.com运行到 google.com 的 traceroute 并查看途中是否有任何问题。

在最基本的形式中,我们可以简单地将所有这些命令一个接一个地放在一个批处理文件中,如下所示:

ipconfig /all ping google.com tracert google.com PAUSE

当我们运行这个文件时,我们只会看到一个接一个命令的输出。但这不一定是编写批处理文件的理想方式。

例如,您可能想要添加注释行。任何以 a 开头的行::都是注释行,不会被执行。这使它们成为一种有用的方式,可以为您可能将文件提供给的任何人或您未来的自己解释文件中发生的事情,他们可能会忘记为什么要在其中放置某个命令。

您可能还想将“ECHO OFF”命令添加到文件的开头。这通常添加到大多数批处理文件的开头。执行此操作时,命令本身不会打印到命令提示符,但结果会打印。例如,您将看到网络连接详细信息,但不会看到“ipconfig /all”行。大多数人不关心看到命令,所以这可以清理输出。

所以这可能是这样的:

:: 该批处理文件检查网络连接问题 ECHO OFF :: 查看网络连接详细信息 ipconfig /all :: 检查 Google.com 是否可访问 ping google.com :: 运行 traceroute 以检查到 Google.com 的路由 tracert google.com PAUSE

还有其他方向可以使用这样的批处理文件。例如,您可能希望让您的批处理脚本运行上述命令,然后将输出转储到您可以稍后查看的文本文件中。为此,您需要>>在每个命令之后使用运算符将其输出附加到文本文件中。因为无论如何我们都要从文本文件中读取输出,所以我们可以省略该PAUSE命令。

:: 该批处理文件检查网络连接问题:: 并将输出保存到 .txt 文件。ECHO OFF :: 查看网络连接详细信息ipconfig /all >> results.txt :: 检查 Google.com 是否可访问 ping google.com >> results.txt :: 运行 traceroute 以检查到 Google.com tracert google的路由。 com >> 结果.txt

运行上述脚本后,您会在批处理文件所在的文件夹中找到一个名为 results.txt 的文件,其中包含命令的输出。批处理文件运行完毕后,命令提示符窗口将自动关闭。

我们上面使用的示例依赖于实际将信息打印到命令提示符,以便用户可以阅读它。但是,许多批处理文件被设计为以非交互方式运行。例如,您可以有一个批处理文件,只要您双击它就会删除多个文件或目录。你只需要使用del命令删除文件或deltree命令删除目录。请记住,您只是使用在命令提示符窗口中运行的相同命令。

从根本上说,这是大多数批处理文件的重点——只是一个接一个地运行一些命令。但是,批处理文件实际上可能比这复杂得多。例如,您可以使用“IF”语句和“ GOTO ”命令来检查某物的值,然后根据结果跳到不同的行。这更像是编写一个实际的小程序,而不是一个快速而肮脏的脚本。这就是 .bat 文件有时被称为“批处理程序”的原因之一。如果你想做一些更复杂的事情,你会找到很多在线批处理编程做特定事情的指南。但是现在,您了解了如何将一个简单的组合在一起的基础知识。

windows批处理文件编写「如何在Windows上编写批处理脚本」

如何用批处理写自动安装软件的脚本

1、新建一个Ergodic.txt文件然后仔枝重名成Ergodic.bat文件,然后输入前置声明:@echooff,pause。

2、set给路径赋值,设定一个路径,比如说D盘的bat。setwork_path=D:\bat。

3、然后cd到文件路径,用cd%work_path%。

4、然后用for循环遍历文件用echo打印出文件名for/R%%sin(.,*)do( echo%%s)。培派

5、运行脚本,可以发现没有跳转到D盘目录下,而是在当前文件下输出文件名了念中敏。

6、应该在cd前面加上D:以用来表示进入的是D盘,再次运行结果如下。

注意事项:

目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的。

windows批处理文件编写「如何在Windows上编写批处理脚本」

windows bat脚本怎么写

批处理之家
你就用记事本就可以编辑了。里面输入dos命令
最后,另存为*.bat的格式
【 echo 命令 】
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一
些命令到特定的文件中。
【 rem 命令 】
注释命令,类似于在C语言中的/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读
和你自己日后修改。
:: 也具有rem的功能
但::和rem还是有区别的,当关闭回显时,rem和::后的内容都不会显示。但是当打开回显时,rem和rem
后的内容会显示出来,然而::后的内容仍然不会显示。
Rem Message
Sample:@Rem Here is the description.
【 pause 命令 】
暂停命令。运行 Pause 命令时,将显示下面的消息:
Press any key to continue. . .(或:请按任意键继续. . .)
Sample:
@echo off
:begin
copy G:*.* d:back
echo 请插入另一张光盘...
pause
goto begin
在这个例子中,驱动器 G 中磁盘上的所有文件均复制到d:back中。显示的注释提示您将另一张光盘
盘放入驱动器 G 时,pause 命令会使程序挂起,以便您更换光盘,然后按任意键继续处理。
【 call 命令 】
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的
标签。如果在脚本或批处理文件外使用扰漏 Call,它将不会在命令行起作用。
语法
call [[Drive:][Path] FileName ] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称缓高烂。
【 start 命令 】
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
如:start calc.exe 即可打开Windows的计算器。
常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令
脚本内执行,该新行为则不会发生。
【 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
命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
【 set 命令 】
显示、设置或删除变量。
显示变量:set 或 set s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。
设置变量:set aa=abcd 此句命令便可向变量aa赋值abcd。如果变量aa已被定义,则aa的值被修改为abcd;若aa尚未定义,则此句命令即可定义新的变量aa,同时为变量aa赋予初始值abcd。
删除变量:set aa= 此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令为实质意义。
需要说明的是,批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。比如执行set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。
[编辑本段]批处理符号简介
【 回显屏蔽 @ 】
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
@用法举例:通过运行批处理文件对比pause和@pause命令即可明了@的效果。
【 重定向1 >与>> 】
将输出信息重定向到指定的设备或文件。系统默认输出到显示器。
如:echo aaaaa>a.txt 即可将本在显示器上显示的信息aaaaa输出到文件a.txt中,屏幕上没有任何显示。如果文件a.txt本来已经存在,该命令将首先擦除a.txt中的所有信息,然后写入信息aaaaa;若a.txt本来就不存在,该命令即可新建一个a.txt文件,并写入信息aaaaa。
echo aaaaa>>a.txt 类似于echo aaaaa>a.txt。区别在于:如果a.txt本已存在,>a.txt会擦除a.txt中的原有内容,而>>a.txt并不擦除原有内容,仅在a.txt文件的末尾添加信息aaaaa。a.txt不存在时,二者没有差别。
【 重定向2 < 】
将输入信息来源重定向为指定的设备或文件。系统默认从显示器读取输入信息。
重定向使用举例:
=========================================
@echo off
echo abcdefg——这是文件a.txt中的信息>a.txt
echo 请任意输入字符,以回车结束:
set /p ifo=
cls
echo 【 从屏幕获得的输入信息 】
echo %ifo%
set /p ifo=<a.txt
echo 【 从文件a.txt获得的输入信息 】
echo %ifo%
pause>nul
=========================================
读者观察命令与输出即可体会到重定向的功能和效果。
【 管道符号 | 】
将管道符号前面命令的输出结果重定向输出到管道符号后面的命令中去,作为后面命令的输入。使用格式为:command_1|command_2
管道符号使用举例:
=========================================
@echo off
echo aaaa>a.txt
del /p a.txt
pause
=========================================
@echo off
echo aaaa>a.txt
echo y|del /p a.txt
pause
=========================================
对比以上两个批处理执行结果,读者即可明白管道符的用法和效果。
需要说明的是,上面del命令添加开关/p只是为了让读者明白管道符号的使用方法,实际删除文件时不加/p开关即可实现无提示直接删除。
【 转义符 ^ 】
将特殊符号转化为一般符号,即剥离特殊符号的特殊地位。特殊符号指:| & > <
比如,如果我们想输出符号“>”,直接用命令 echo > 是不行的,必须修改为 echo ^> 。其余几个特殊符号类似需要有同样的处理。
转义字符使用举例:
=========================================
@echo off
echo aaaa>a.txt
echo 第一句echo执行完毕
echo aaaa^>a.txt
echo 第二句echo执行完毕
pause
=========================================
比较上面的两句echo,第一句echo将信息aaaa输出到了文件a.txt,而第二句echo则在直接屏幕上显示出aaaa>a.txt
【 逻辑命令符 】
逻辑命令符包括:&、&&、||
&-它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败;
&&-当&&前面的命令成功执行时,执行&&后面的命令,否则不执行;
||-当||前面的命令失败时,执行||后面的命令,否则不执行。
=========================================
@echo off
echo ^|^|
reg add HKCU /v try /f||echo **成功**
reg add HKCU1 /v try /f||echo **失败**
echo ^&^&
reg delete HKCU /v try /f&&echo **成功**
reg delete HKCU /v try /f&&echo **失败**
echo ^&
reg delete HKCU /v try /f&echo **成功**
reg delete HKCU /v try /f&echo **失败**
pause
=========================================
执行reg add或reg delete后,系统会给出执行结果;我们通过echo命令也给出了“执行结果”。对比系统和我们自己给出的结果,既可以验证逻辑命令的判断机理。
[编辑本段]常用DOS命令释义
【 文件夹管理 】
cd 显示当前目录名或改变当前目录。
md 创建目录。
rd 删除一个目录。
dir 显示目录中的文件和子目录列表。
tree 以图形显示驱动器或路径的文件夹结构。
path 为可执行文件显示或设置一个搜索路径。
xcopy 复制文件和目录树。
【 文件管理 】
type 显示文本文件的内容。
copy 将一份或多份文件复制到另一个位置。
del 删除一个或数个文件。
move 移动文件并重命名文件和目录。(Windows XP Home Edition中没有)
ren 重命名文件。
replace 替换文件。
attrib 显示或更改文件属性。
find 搜索字符串。
fc 比较两个文件或两个文件集并显示它们之间的不同
【 网络命令 】
ping 进行网络连接测试、名称解析
ftp 文件传输
net 网络命令集及用户管理
telnet 远程登陆
ipconfig显示、修改TCP/IP设置
msg 给用户发送消息
arp 显示、修改局域网的IP地址-物理地址映射列表
【 系统管理 】
at 安排在特定日期和时间运行命令和程序
shutdown立即或定时关机或重启
tskill 结束进程
taskkill结束进程(比tskill高级,但WinXPHome版中无该命令)
tasklist显示进程列表(Windows XP Home Edition中没有)
sc 系统服务设置与控制
reg 注册表控制台工具
powercfg控制系统上的电源设置
对于以上列出的所有命令,在cmd中输入命令 /?即可查看该命令的帮助信息。如find /?
[编辑本段]语句结构释义
类似于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 off
set str1=abcd1233
set str2=ABCD1234
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)
echo.
set /p choice=是否显示当前时间?(y/n)
if /i not %choice% EQU n echo 当前时间是:

上一篇: 女销售原来靠这样卖房(楼盘置业顾问提成大概多少)
下一篇: 南昌4名在校大学生被刑拘!,杭州男子举报卖淫案