windows脚本

这篇博客详细介绍了Windows批处理中的各种命令,包括help、ECHO、@、GOTO、PAUSE、控制台样式(CLS、title、COLOR)、CALL、start、设定变量、运算、FOR循环、choice、shift、if条件语句、setlocal与变量延迟、文件处理和进程控制等,旨在帮助读者理解和掌握批处理命令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

help 命令

语法: 命令 /?或者help 命令

可显示此命令的帮助信息

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

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

有关某个命令的详细信息,请键入 HELP 命令名

命令解释
ASSOC 显示或修改文件扩展名关联。
ATTRIB显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
BCDEDIT 设置启动数据库中的属性以控制启动加载。
CACLS 显示或修改文件的访问控制列表(ACL)。
CALL从另一个批处理程序调用这一个。
CD显示当前目录的名称或将其更改。
CHCP显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
COPY将至少一个文件复制到另一个位置。
DATE显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKPART显示或配置磁盘分区属性。
DOSKEY编辑命令行、撤回 Windows 命令并创建宏。
DRIVERQUERY显示当前设备驱动程序状态和属性。
ECHO显示消息,或将命令回显打开或关闭。
ENDLOCAL结束批文件中环境更改的本地化。
ERASE 删除一个或多个文件。
EXIT退出 CMD.EXE 程序(命令解释程序)。
FC比较两个文件或两个文件集并显示它们之间的不同。
FIND在一个或多个文件中搜索一个文本字符串。
FINDSTR 在多个文件中搜索字符串。
FOR 为一组文件中的每个文件运行一个指定的命令。
FORMAT格式化磁盘,以便用于 Windows。
FSUTIL显示或配置文件系统属性。
FTYPE 显示或修改在文件扩展名关联中使用的文件类型。
GOTO将 Windows 命令解释程序定向到批处理程序中某个带标签的行。
GPRESULT显示计算机或用户的组策略信息。
GRAFTABL使 Windows 在图形模式下显示扩展字符集。
HELP提供 Windows 命令的帮助信息。
ICACLS显示、修改、备份或还原文件和目录的 ACL。
IF在批处理程序中执行有条件的处理操作。
LABEL 创建、更改或删除磁盘的卷标。
MD创建一个目录。
MKDIR 创建一个目录。
MKLINK创建符号链接和硬链接
MODE配置系统设备。
MORE逐屏显示输出。
MOVE将一个或多个文件从一个目录移动到另一个目录。
OPENFILES 显示远程用户为了文件共享而打开的文件。
PATH为可执行文件显示或设置搜索路径。
PAUSE 暂停批处理文件的处理并显示消息。
POPD还原通过 PUSHD 保存的当前目录的上一个值。
PRINT 打印一个文本文件。
PROMPT更改 Windows 命令提示。
PUSHD 保存当前目录,然后对其进行更改。
RD删除目录。
RECOVER 从损坏的或有缺陷的磁盘中恢复可读信息。
REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)。
REN 重命名文件。
RENAME重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
ROBOCOPY复制文件和目录树的高级实用工具
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL开始本地化批处理文件中的环境更改。
SC显示或配置服务(后台进程)。
SCHTASKS安排在一台计算机上运行命令和程序。
SHIFT 调整批处理文件中可替换参数的位置。
SHUTDOWN允许通过本地或远程方式正确关闭计算机。
SORT对输入排序。
START 启动单独的窗口以运行指定的程序或命令。
SUBST 将路径与驱动器号关联。
SYSTEMINFO显示计算机的特定属性和配置。
TASKLIST显示包括服务在内的所有当前运行的任务。
TASKKILL中止或停止正在运行的进程或应用程序。
TIME显示或设置系统时间。
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE以图形方式显示驱动程序或路径的目录结构。
TYPE显示文本文件的内容。
VER 显示 Windows 的版本。
VERIFY告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
WMIC在交互式命令 shell 中显示 WMI 信息。

ECHO 和 @

@在批处理中的意思是关闭当前行的回显,无论此时echo是否为打开状态。

  • @echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
  • @echo off 语句常用于开头,表示不显示所有的命令行信息,包括此句
  • @echo please wait a minite...输出please wait a minite…但是不显示命令行输入
  • @format X: /q/u/autosetformat 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的

echo命令的作用列举如下

  • ECHO [ON | OFF] 打开回显或关闭回显功能。在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现。

  • ECHO 显示当前回显设置。

  • ECHO [message] 显示信息。

命令行的 print 即为回声这个单词 echo

echo hello word

C:\Users\Hi>echo hello word
hello word

ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求

Goto 命令

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

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

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

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

REM ::

REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
:: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

  • 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
    • 有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
    • 无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。
  • 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中。

行内注释格式:%注释内容%(不常用,慎用)

Pause 命令

暂停批处理的执行并在屏幕上显示Press any key to continue…的提示,等待用户按任意键后继续

要显示其他提示语,可以这样用: Echo 其他提示语 pause > nul

@echo begin
@pause
@echo end
@Pause


begin
请按任意键继续. . .
end
请按任意键继续. . .

控制台样式

CLS

清除屏幕

title

设置cmd窗口的标题
title 新标题#可以看到cmd窗口的标题栏变了

COLOR

设置默认的控制台前景和背景颜色。
COLOR [attr]
attr指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:

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

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 开关或DefaultColor 注册表值。
如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。

Call 命令

  • CALL command
    调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套,见教程后面。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子。
  • CALL [drive:][path]filename [batch-parameters]
    调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。
  • CALL :label arguments
    调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头 以命令goto :eof结尾。 另外,批脚本文本参数参照(%0、%1、等等)已如下改变:

批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 …)
批参数(%n)的替代已被增强。可以使用以下语法:%~1 - 删除引号("),扩充 %1

  • %~f1- 将 %1 扩充到一个完全合格的路径名
  • %~d1- 仅将 %1 扩充到一个驱动器号
  • %~p1- 仅将 %1 扩充到一个路径
  • %~n1- 仅将 %1 扩充到一个文件名
  • %~x1- 仅将 %1 扩充到一个文件扩展名
  • %~s1- 扩充的路径指含有短名
  • %~a1- 将 %1 扩充到文件属性
  • %~t1- 将 %1 扩充到文件的日期/时间
  • %~z1- 将 %1 扩充到文件的大小
  • %~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1

扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串

可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。在上面的例子中,%1 和 PATH 可以被其他有效数值替换。

%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*使用

注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展
要理解上面的知识,下面的例子很关键。

@echo off
Echo 产生一个临时文件 > tmp.txt
Rem 下行先保存当前目录,再将c:\\windows设为当前目录
pushd c:\\windows
Call :sub tmp.txt
Rem 下行恢复前次的当前目录
Popd
Call :sub tmp.txt
pause
Del tmp.txt
exit
:sub
Echo 删除引号: %~1
Echo 扩充到路径: %~f1
Echo 扩充到一个驱动器号: %~d1
Echo 扩充到一个路径: %~p1
Echo 扩充到一个文件名: %~n1
Echo 扩充到一个文件扩展名: %~x1
Echo 扩充的路径指含有短名: %~s1
Echo 扩充到文件属性: %~a1
Echo 扩充到文件的日期/时间: %~t1
Echo 扩充到文件的大小: %~z1
Echo 扩展到驱动器号和路径:%~dp1
Echo 扩展到文件名和扩展名:%~nx1
Echo 扩展到类似 DIR 的输出行:%~ftza1
Echo.
Goto :eof

start命令快捷启动程序

启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。

start命令默认不等待程序运行即运行下一条命令,即命令不会阻塞。

语法
start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]

参数

  • "title" 指定在“命令提示符”窗口标题栏中显示的标题。
  • /dpatch 指定启动目录。
  • /i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
  • /min 启动新的最小化窗口。
  • /max 启动新的最大化窗口。
  • /separate 在单独的内存空间启动 16 位程序。
  • /shared 在共享的内存空间启动 16 位程序。
  • /low 以空闲优先级启动应用程序。
  • /normal 以一般优先级启动应用程序。
  • /high 以高优先级启动应用程序。
  • /realtime 以实时优先级启动应用程序。
  • /abovenormal 以超出常规优先级的方式启动应用程序。
  • /belownormal 以低出常规优先级的方式启动应用程序。
  • /wait 启动应用程序,并等待其结束。
  • /b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
    非执行文件只要将文件名作为命令键入,即可通过其文件关联运行该文件。有关使用 assoc 和 ftype 在命令脚本中创建这些关联的详细信息,请参阅“”。
    在运行的命令的第一个标记为“CMD”字符串但不包括扩展名或路径限定符时,“CMD”将被 COMSPEC 变量的值取代。这样可以防止用户从当前目录选取 cmd。
    当您运行 32 位图形用户界面 (GUI) 应用程序时,cmd 不会在返回到命令提示符之前等待应用程序退出。如果从命令脚本运行应用程序,则不会发生这种新情况。在运行的命令中第一个符号不包括扩展名的情况下,Cmd.exe 使用 PATHEXT 环境变量的值确定要查找的扩展名以及查找顺序。PATHEXT 变量的默认值为:COM;.EXE;.BAT;.CMD(语法与 PATH 变量相同,使用分号分开不同元素)。当您搜索可执行文件且在任何扩展名上都没有匹配项时,start 将搜索目录名。

具体例子:

说明:如果所在程序的路径中带有空格,那么必须用“”把路径括起来,否则系统会提示找不到XX文件,另外,在运行某些程序时,需在路径的前面加一对空白的“”,表示创建一个空白的窗口,它指向的程序是XXXXXXXX。还有就是别忘了空格。

  • 运行位于“D:/draw/”的“photoshop.exe”使,应该使用以下命令:
    start “D:/draw/photoshop.exe” 表示以常规窗口运行程序

  • 想让程序以最大/小化窗口运行,则使用以下命令:

    start /max “D:/draw/photoshop.exe” 表示以最大化窗口运行程序

    start /min "D:/draw/photoshop.exe" 表示以最小化窗口运行程序

  • 等待某个程序允许完毕,也就是窗口关闭后,再打开下一个程序这可以这样:

    start /w "D:/draw/photoshop.exe"

    start cmd.exe

  • 新开PowerShell并运行相关命令

    start PowerShell ipconfig;python -m http.server -d D:\

  • 运行appium服务

    @echo off
    choice /C 1234 /N /M "需要启动几个appium服务,最多4个"
    if %errorlevel%==4 goto four
    if %errorlevel%==3 goto three
    if %errorlevel%==2 goto two
    if %errorlevel%==1 goto one
    :one
    start appium -p 4723 -bp 4724
    exit
    
    :two
    start appium -p 4723 -bp 4724
    start appium -p 4725 -bp 4726
    exit
    
    :three
    start appium -p 4723 -bp 4724
    start appium -p 4725 -bp 4726
    start appium -p 4727 -bp 4728
    exit
    
    :four
    start appium -p 4723 -bp 4724
    start appium -p 4725 -bp 4726
    start appium -p 4727 -bp 4728
    start appium -p 4729 -bp 4730
    exit
    

设定变量

设定时用 set 关键字,打印时注意给变量的前面和后面都加上 %

不要在等于号的前后加空格,批处理无法理解这些空格只是用户添加的格式。

字符串的拼接直接使用,如echo %a%ss 即为 wordss

set a=word
echo %a%

C:\Users\Hi>set a=word
C:\Users\Hi>echo %a%
word

运算

整数级别的运算,用批处理就足够了,设置变量后,使用 set /a 这条命令

set a=10
set /a a+=10
set /a (a+20)/10


C:\Users\Hi>set a=10
C:\Users\Hi>set /a a+=10
20
C:\Users\Hi>set /a (a+20)/10
4

for 循环

批处理也是有 for 循环用法如下。

for %a in (x,x,x) do (xxx)

比如说for %i in (a,b,c) do (echo %i)

基本格式

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

/d

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

如果集(指(set))中包含通配符,则指定与目录名匹配,而不与文件名匹配。

如果 Set (也就是我上面写的 “相关文件或命令”) 包含通配符(* 和 ?),将对与 Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。

这个参数主要用于目录搜索,不会搜索文件

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

运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!

/r

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

递归
/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,可以把当前或者指定路径下的文件名字全部读取,注意是文件名字
请注意2点:
1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。

@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause

把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来

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

以当前目录为搜索路径,比如你这个BAT你把他放在d:\test目录下执行,那么他就会把D:\test目录和他下面的子目录的全部EXE文件列出

/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)。

使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。

如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。

还可使用负的 Step# 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。

@echo off
for /l %%i in (1,1,5) do @echo %%i
pause

递增打印1 2 3 4 5,5个数字

/f

\\迭代及文件解析

使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。默认情况下,/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 (#39;command') DO command [command-parameters]

带引号的字符串"options"包括一个或多个,指定不同解析选项的关键字。这些关键字为:

  • eol=c - 指一个行注释字符的结尾(就一个)

  • skip=n- 指在文件开始时忽略的行数。

  • delims=xxx- 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

  • tokens=x,y,m-n- 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外变量将在最后一个符号解析之后分配并接受行的保留文本。经测试,该参数最多只能区分31个字段。

  • usebackq- 使用后引号(键盘上数字1左面的那个键`)。
    未使用参数usebackq时:file-set表示文件,但不能含有空格
    双引号表示字符串,即"string"
    单引号表示执行命令,即#39;command'
    使用参数usebackq时:file-set和"file-set"都表示文件
    当文件路径或名称中有空格时,就可以用双引号括起来
    单引号表示字符串,即#39;string'
    后引号表示命令执行,即command`

FOR命令中的变量

  • FOR的变量全部列出来:
    • ~I- 删除任何引号("),扩展 %I
      • 1、若字符串首尾同时存在引号,则删除首尾的引号;
      • 2、若字符串尾不存在引号,则删除字符串首的引号;
      • 3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
      • 龙卷风补充:无头不删,有头连尾删。
    • %~fI- 将 %I 扩展到一个完全合格的路径名
    • %~dI- 仅将 %I 扩展到一个驱动器号
    • %~pI- 仅将 %I 扩展到一个路径
    • %~nI- 仅将 %I 扩展到一个文件名
    • %~xI- 仅将 %I 扩展到一个文件扩展名
    • %~sI- 扩展的路径只含有短名
    • %~aI- 将 %I 扩展到文件的文件属性
    • %~tI- 将 %I 扩展到文件的日期/时间
    • %~zI- 将 %I 扩展到文件的大小
    • %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展

到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

每行都有一个大写字母I,这个I是FOR带入的变量,FOR语句代入的变量名是什么,这里就写什么.
比如:FOR /F%%z IN (#39;set') DO @echo %%z这里我们代入的变量名是z
前面的%~p这样的内容就是语法

choice 命令

choice该工具允许用户从选择列表选择一个项目并返回所选项目的索引。,从而根据用户的选择返回不同的 errorlevel,然后配合 if errorlevel 选择运行不同的命令。

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

Sample:

  choice /c:dme defrag,mem,end
  if errorlevel 3 goto defrag ::(应先判断数值最高的错误码)
  if errorlevel 2 goto mem
  if errotlevel 1 goto end

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

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

参数列表:

  • /C choices 指定要创建的选项列表。默认列表是 “YN”。

  • /N

    如果加上 /n 参数,那么屏幕上的提示就会被屏蔽了.在实际运用中,为了保持界面美观,通常都加上 /n 参数。如:
    choice /c 123 /n

  • >nul
    choice /c 12 /n
    当你选择时,你输入的字符会显示在屏幕上,影响美观!
    choice /c 12 /n >nul
    可以屏蔽你输入的字符,不在屏幕上显示

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

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

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

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

  • /? 显示此帮助消息。

注意

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 abcde /m "请输入" /d e /t 5

::用户选择的结果会按项目序号数字(从1开始)返回在errorlevel变量中
if %errorlevel%==1 echo 你选择了a
if %errorlevel%==2 echo 你选择了b
if %errorlevel%==3 echo 你选择了c
if %errorlevel%==4 echo 你选择了d
if %errorlevel%==5 echo 你选择了e

@echo off
rem appium启动服务脚本
choice /C 123 /N /M "请输入需要启动几个服务,最多3个"
if %errorlevel%==3 goto three
if %errorlevel%==2 goto two
if %errorlevel%==1 goto one
:one
start appium -p 4723 -bp 4724
exit

:two
start appium -p 4723 -bp 4724
start appium -p 4725 -bp 4726
exit

:three
start appium -p 4723 -bp 4724
start appium -p 4725 -bp 4726
start appium -p 4727 -bp 4728
exit

shift

更改批处理文件中可替换参数的位置。
SHIFT [/n]
如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关,该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。

例如:SHIFT /2
会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

if条件语句

检测字符串

注意,用if检测字符串是否相等的时候,后面用的不是“=”,而是“==”

@echo off 
set "str=this is a test"
REM 检测变量%str%是否等于test,如果相等,显示OK,否则显示NO 
if "%str%"=="test" (echo OK) else echo NO 
pause>nul

检测数值:(注意,批处理中大于符号不能用:“>”,而用"gtr",其它的也类似)

比较运算符一览:

  • EQU - 等于
  • NEQ - 不等于
  • LSS - 小于
  • LEQ - 小于或等于
  • GTR - 大于
  • GEQ - 大于或等于

检测数值 20 是否大于 15演示

@echo off 
set /a num1=20 
set /a num2=15 
if %num1% gtr %num2% echo %num1%大于%num2% 
if %num1% EQU %num2% echo %num1%等于%num2% 
if %num1% LSS %num2% echo %num1%小于%num2% 
pause>nul 

if结合errorlevel使用:

说明:环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等
IF-ERRORLEVEL

@ECHO OFF  
XCOPY F:\test.bat D:\  
IF ERRORLEVEL 1 ECHO 文件拷贝失败  
IF ERRORLEVEL 0 ECHO 成功拷贝文件 

如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。

以下就是几个常用命令的返回值及其代表的意义:
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 
set "str1=ok" 
set "str2=no" 
if defined str1 echo str1已经被定义 
if defined str2 echo str2已经被定义 
if defined str3 (echo str3已经被定义) else echo str3 没有被定义 
pause>nul 

setlocal 与 变量延迟

了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。

先引入一个例1

@echo off
set a=4
set a=5 echo %a%
pause

结果:4

分析一下例1,批处理在运行到这句“set a=5 echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%就是4了

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

变量延迟的启动语句是setlocal enabledelayedexpansion,并且变量要用英文的叹号括起来,否则就没有变量延迟的效果。

例子

@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 echo !a!
pause

结果:5

在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,

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

@echo off
::目的:交换两个变量的值,但是不使用临时变量
::Code by JasonMakarov 2017-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

ATTRIB显示或更改文件属性

ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]

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

ping telnet命令校验连接

ping 命令

测试网络联接状况以及信息包发送和接收状况。但是不能够测试端口。

语法:ping IP地址或主机名 [-t] [-a] [-n count] [-l size]

参数含义:

  • -t 不停地向目标主机发送数据;
  • -a 以IP地址格式来显示目标主机的网络地址;
  • -n count 指定要Ping多少次,具体次数由count来指定;
  • -l size指定发送到目标主机的数据包的大小。

不停的测试192.168.0.1,按ctrl+c停止: ping 192.168.0.1 -t

telnet 命令

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

测试192.168.0.1的80端口: telnet 192.168.0.1 80

random 命令1

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

exit 命令

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

shutdown命令

用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/f] [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

  • /? 显示帮助。这与不键入任何选项是一样的。

  • /i 显示图形用户界面(GUI)。这必须是第一个选项。

  • /l 注销。这不能与 /m 或 /d 选项一起使用。

  • /s 关闭计算机。

  • /r 完全关闭并重新启动计算机。

  • /g 完全关闭并重新启动计算机。在重新启动系统后, 重新启动任何注册的应用程序。

  • /a 中止系统关闭。 这只能在超时期间使用。

  • /p 关闭本地计算机,没有超时或警告。可以与 /d 和 /f 选项一起使用。

  • /h 休眠本地计算机。 可以与 /f 选项一起使用。

  • /hybrid 执行计算机关闭并进行准备以快速启动。 必须与 /s 选项一起使用。

  • /e 记录计算机意外关闭的原因。

  • /o 转到高级启动选项菜单并重新启动计算机。 必须与 /r 选项一起使用。

  • /m \\computer 指定目标计算机。

  • /t xxx 将关闭前的超时时间设置为 xxx 秒。 有效范围是 0-315360000 (10 年),默认值为 30。 如果超时时间大于 0,则默示为 /f 参数。

  • /c "comment" 有关重新启动或关闭的原因的注释。 最多允许 512 个字符。

  • /f 强制关闭正在运行的应用程序而不事先警告用户。 如果为 /t 参数指定大于 0 的值, 则默示为 /f 参数。

  • /d [p|u:]xx:yy 提供重新启动或关闭的原因。

    • p 指示重新启动或关闭是计划内的。
    • u 指示原因是用户定义的。
    • 如果未指定 p 也未指定 u,则重新启动或关闭是计划外的。
    • xx 是主要原因编号(小于 256 的正整数)。
    • yy 是次要原因编号(小于 65536 的正整数)。
    30秒后自动关机    shutdown -s
    1小时后自动关机   shutdown -s -t 3600
    晚上10点钟自动关机   at 22:00 shutdown -s
    远程pc重启    shutdown -m \\[ip地址或计算机名] -r
    

taskkill终止进程

这个命令行工具可用来结束至少一个进程。可以根据进程 id 或图像名来结束进程。

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

参数列表:

  • /S system 指定要连接到的远程系统。

  • /U [domain]user 指定应该在哪个用户上下文执行这个命令。

  • /P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。

  • /F 指定要强行终止的进程。

  • /FI filter 指定筛选进或筛选出查询的的任务。

  • /PID process id 指定要终止的进程的PID。

  • /IM image name 指定要终止的进程的图像名。通配符 '*'可用来指定所有图像名。

  • /T Tree kill: 终止指定的进程和任何由此启动的子进程。

  • /? 显示帮助/用法。

筛选器:

筛选器名有效运算符有效值
STATUSeq, neRUNNING ,NOT RESPONDING
IMAGENAMEeq, ne映像名称
PIDeq, ne, gt, lt, ge, lePID 值
SESSIONeq, ne, gt, lt, ge, le会话编号。
CPUTIMEeq, ne, gt, lt, ge, leCPU 时间,格式为hh:mm:ss。hh - 时,mm - 分,ss - 秒
MEMUSAGEeq, ne, gt, lt, ge, le内存使用量,单位为 KB
USERNAMEeq, ne用户名,格式为 [domain]user
MODULESeq, neDLL 名称
SERVICESeq, ne服务名称
WINDOWTITLEeq, ne窗口标题
  • 只有在应用筛选器的情况下,/IM 切换才能使用通配符 ‘*’。
  • 远程进程总是要强行 (/F) 终止。
  • 当指定远程机器时,不支持 “WINDOWTITLE” 和 “STATUS” 筛选器。
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

tasklist

该工具显示在本地或远程机器上当前运行的进程列表

语法

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

参数列表:

参数说明
/S system指定连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。
如果省略,则提示输入。
/M [module] 列出当前使用所给 exe/dll 名称的所有任务。
如果没有指定模块名称,显示所有加载的模块。
/SVC显示每个进程中主持的服务。
/APPS显示 Microsoft Store 应用及其关联的进程。
/V显示详细任务信息。
/FI filter显示一系列符合筛选器
指定条件的任务。
/FO format指定输出格式。
有效值: “TABLE”、“LIST”、“CSV”。
/NH指定列标题不应该
在输出中显示。
只对 “TABLE” 和 “CSV” 格式有效。
/?显示此帮助消息。

筛选器:

运算符简写运算符解释
EQEQUAL等于
NQNOT EQUAL不等于
GTGREATER THAN大于
LTLESS THAN小于
GEGREATER THAN OR EQUAL大于等于
LELESS THAN OR EQUAL小于等于
筛选器名称有效运算符说明
STATUSeq, ne运行RUNNING 暂停SUSPENDED 不回应NOT RESPONDING 未知UNKNOWN
IMAGENAMEeq, ne映像名称
PIDeq, ne, gt, lt, ge, lePID 值
SESSIONeq, ne, gt, lt, ge, le会话编号
SESSIONNAMEeq, ne会话名称
CPUTIMEeq, ne, gt, lt, ge, leCPU 时间
格式为hh:mm:ss,hh - 小时,mm - 分钟,ss - 秒
MEMUSAGEeq, ne, gt, lt, ge, le内存使用(以 KB 为单位)
USERNAMEeq, ne用户名,格式为 [域]用户
SERVICESeq, ne服务名称
WINDOWTITLEeq, ne窗口标题
模块eq, neDLL 名称

注意: 当查询远程计算机时,不支持 “WINDOWTITLE” 和 “STATUS”筛选器。

TASKLIST//列出所有进程
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"//显示应用商店应用及其关联的所有状态运行中的进程
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running" //列出系统中正在运行的非“SYSTEM“状态的所有进程。
tasklist -fi "IMAGENAME eq QQ.exe"//查找QQ进程

字符串处理

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

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

替换字符串

set a="abcd1234"
echo %a%          显示:"abcd1234"
set a=%a:1=kk%    替换“1”为“kk”
echo %a%          显示:"abcdkk234"

字符串合并

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

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

计算字符串长度

如下程序利用 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%

系统服务

  • 停止服务:NET STOP 服务名
  • 启动服务:NET Start 服务名

设置启动类型

  • 自动: SC CONFIG 服务名 START= auto
  • 手动: SC CONFIG 服务名 START= demand
  • 已禁用:SC CONFIG 服务名 START= disabled

“START= ”等号后面必须要有一个空格。(start还有boot,system两个值)

查看系统服务:start %SystemRoot%\system32\services.msc /s

启动mysql80服务: net start mysql80

文件处理

删除

删除一个文件或多个文件

删除文件的时候可以使用“*”作通配符

  • 删除一个文件或多个文件

    del /s /q /f d:\test\a.bat

  • 将直接删除d:\test\a.bat,没有任务提示

del temp\* /q /f /s

  • 将直接删除 本目录的 temp 目录的所有文件,没有任务提示

删除一个空目录

​ rd /q /s d:\test\log

​ 将直接删除d:\test\log目录,如果log目录里面有文件将无法删除

删除一个非空目录 (必须指定目录名称)

rmdir /q /s d:\test\logs

​ 必须指定目录名称,不能使用通配符

/S 除目录本身外,还将删除指定目录下的所有子目录

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

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

创建目录

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

find

在文件中搜索字符串。
FIND [/V] [/C] [/N] [/OFF[LINE]] string [[drive:][path]filename[ ...]]

  • /V显示所有未包含指定字符串的行
  • /C仅显示包含字符串的行数
  • /N显示行号
  • /I搜索字符串时忽略大小写
  • /OFF[LINE] 不要跳过具有脱机属性集的文件
  • string指定要搜索的文字串,
  • [drive:][path]filename指定要搜索的文件。
    如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。
    Find常和type命令结合使用
    Type [drive:][path]filename | find \"string\" [>tmpfile] #挑选包含string的行
    Type [drive:][path]filename | find /v \"string\" #剔除文件中包含string的行
    Type [drive:][path]filename | find /c #显示文件行数
    以上用法将去除find命令自带的提示语(文件名提示)
@echo off
echo 111 >test.txt
echo 222 >>test.txt
find \"111\" test.txt
del test.txt
pause

运行显示如下:
---------- TEST.TXT
111
请按任意键继续. . .

cd命令

键入 CD drive: 显示指定驱动器中的当前目录。
不带参数只键入 CD,则显示当前驱动器和目录。

使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。

如果命令扩展被启用,CHDIR 会如下改变:

cd E:\my_code 直接在命令行运行此命令会切换到至此磁盘和目录,当在bat脚本中运行并不会切换工作目录需要加上/d参数即cd /d E:\my_code

命令符

> 重定向符

输出重定向命令
这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符,&&,||和语句块的制约限制。
比如:
使用命令:echo hello >1.txt将建立文件1.txt,内容为”hello “(注意行尾有一空格)
使用命令:echo hello>1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)

>>重定向符

输出重定向命令
这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖
用法同上
同样拿1.txt做例子
使用命令:

echo hello > 1.txt
echo world >>1.txt

这时候1.txt 内容如下:

hello
world

|命令管道符

格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
例如:
dir c:\\|find \"txt\"
以上命令是:查找C:\所有,并发现TXT字符串。
FIND的功能请用 FIND /? 自行查看
在不使format的自动格式化参数时,我是这样来自动格式化A盘的
echo y|format a: /s /q /v:system
用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令从而达到自动输入y的目的

^转义字符

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

echo test ^>1.txt结果则是:test > 1.txt

转义字符还可以用作续行符号,因为每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。

@echo off
echo 英雄^
是^
好^
男人

& 组合命令

语法:第一条命令 & 第二条命令 [& 第三条命令...]
可以把多个命令组合起来当一个命令来执行,允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。

如:
dir z:\ & dir y:\ & dir c:\
以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在

&& 组合命令

语法:第一条命令 && 第二条命令 [&& 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行

dir z:\ && dir y:\ && dir c:\

||组合命令

语法:第一条命令 || 第二条命令 [|| 第三条命令...]
用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

组合命令和重定向命令一起使用必须注意优先级管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令

" "字符串界定符

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd "program files"
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录

, 逗号

逗号相当于空格,在某些情况下,可以用来当做空格使
比如
dir,c:

;分号

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。
比如:
dir c:\;d:\;e:\;z:\
以上命令相当于
dir c:\
dir d:\
dir e:\
dir f:\
如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。
例:dir c:\\;d:\\;e:\\1.txt
以上命令相当于
dir c:\
dir d:\
dir e:\1.txt
其中文件e:\1.txt不存在,但e盘存在,有错误提示,但命令仍会执行。

() 括号

小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。
括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。
命令:echo 1 echo 2 & echo 3
可以写成:

(
echo 1
echo 2
echo 3
)

上面两种写法效果一样,这两种写法都被视为是一条命令行。

注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值