大家好,欢迎来到IT知识分享网。
参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands,https://blog.csdn.net/wuhenyouyuyouyu/article/details/?
当前路径:%~dp0
这个参数只能在bat文件中在正常使用,在cmd窗口直接输入是没用的,在cmd中可以使用cd ./命令查看
符号@
特殊符号
| 符号 | 作用 |
|---|---|
| @ | 让后面的命令不显示在窗口,但会执行,一般用于关闭回显@echo off和不显示注释 |
| % | 引导bat文件的输入变量,%1~9;%*表示所有变量 |
| >,>> | 覆盖和追加内容到文件 |
| < | 从文件中读入 |
| >&,<& | 一个句柄写入到另一个,某个数据流输出的地址,(NT CMD 称为句柄,MSDOS称为设备),常用句柄0,1,2,分别指:stdin(标准键盘输入),stdout(标准输出输出到命令提示符窗口),stderr(标准错误) |
| ^ | 转义字符,放在某些特殊字符前面,>< |
| , | 可以认为是空格 |
| ; | 命令相同时将多个参数用分号分开 |
| () | 必须成对存在,可以包含多行命令 |
| !和% | 一对包括变量名,!在延迟变量中使用,setlocal |
| :~ | 用于字符串处理 |
字符串处理
字符串截取、命令嵌套
命令格式:%变量名:~ m,n%,其中,m表示开始位置(默认开头),n表示从m位置开始向后截取的字符个数(默认到结尾),若n为负数则表示向前截取个数,作用:将命令中的某段字符截取,通过call将字符做为命令执行。
@echo off set str1=aaa echo ok bbb echo 初始字符串:%str1% ::aaa echo ok bbb echo 生成命令字符串如下: echo %str1:~4,7% ::echo ok echo 运行命令字符串生成最终结果为: call %str1:~4,7% ::ok pause
字符串内字符替换
格式:set 变量名=%变量名:n=m%其中n表示原来字符串,m表示用来替换的新字符串;都不需要用引号包裹
set a="" echo %a% ::"" set a=%a:44=kmk% echo %a% ::"123kmk567" pause
字符串合并
格式:set str1=%str1%%str2%
截取字符串传入截取长度
参考下面的setlocal
直接 echo %args:~%num%,-5% 没办法想要的字符串,需要如下两步 setlocal enabledelayedexpansion ::设置变量延时有效 echo !args:~%num%,-5! ::变量使用!!包括,%num%变量传入
echo
| 例子 | 作用 |
|---|---|
| echo [{on | off}] |
| echo | 显示当前echo状态 |
| echo. | 空白行,echo后紧跟.或,或:或"或[或\或] |
| echo Y |del A:. | 使用管道命令,将y做为后面执行的输入 |
| echo 文件内容>文件名/echo 文件内容 >>文件名 | |
| echo 内容 >;PRN | 向打印机输出打印内容或打印控制码 |
| echo ^G | 产生鸣响,特殊字符 |
pause
功能:暂停,并”打印请按压任何一个键继续…”,相当于两个功能:1、暂停2、@echo 按压任何一个按键继续。。。;
也可以使用echo 其他提示语 & pause>nul 显示自己的提示语
choice选择命令
返回值是默认在环境变量errorlevel中,不需要自己定义返回值;
命令格式
choice /c 选项 /n /m 选项对应提示信息 参数含义: /c后面是实际可输入字符,若没有后面的内容,会自动将每个字符分开作为输入提示,且每个字符自动转为大写 /n隐藏默认选项的提示, /m自定义显示自己的提示
代码实例1
@echo off CHOICE /C YN :: echo 输入是:%errorlevel% ::根据上面选择得到不同返回 pause>nul ::为了不在最后一行显示pause的输出:继续按键。。
实例2
@echo off CHOICE /C YNc /n /m 自己的提示:y:1,n:2,c:3 echo 输入是:%errorlevel% ::根据上面选择得到不同返回 pause>nul ::为了不在最后一行显示pause的输出:继续按键。。
type
type 文件 ::显示文件内的内容
帮助命令help 、/?
两种形式:第一种:help 命令;第二种:命令/?
跳转goto
bat文件中
:label ...其他内容 goto label
目录切换push,pop
相当于push先存储当前路径,然后跳转到路径中执行,然后通过pop返回原来路径,相当于cd 新路径,执行完后再cd 旧路径
@echo off c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹 md d:\mp4 #在 D:\ 建立 mp4 文件夹 cd /d d:\mp4 #更改当前目录为 d:\mp4 pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3 popd #恢复当前目录为刚才保存的 d:\mp4
setlocal 与 变量延迟
@echo off setlocal enabledelayedexpansion ::固定语句 set a=4 ::设置变量值 set a=5 & echo !a! ::这里使用英文叹!号包裹变量 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 也处理文件夹。
传入参数和call命令使用
::假如当前bat文件和test.bat在同一个文件夹下 call test.bat "hell" "haha"
在“test.bat”文件里写:
echo %1 (打印: "hello") echo %2 (打印: "haha")
判断命令if、else
语法:
::第一种形式 if [not] "参数" == "字符" ::执行的命令,经常和call配合使用,**call将参数传入后用%1的形式接收** ::第二种形式 if [not]exit 文件路径 执行对应命令 ::判断文件是否存在 ::第三种情况 if 条件 (成立时执行的命令) else (不成立时执行的命令)
运算符:
EQU - 等于 (一般使用“==”) NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法) LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于
for循环使用
1) for {
%variable | %%variable} in (set) do command [command-parameters] 其中,%variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I 在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。(set) 指定一个或一组文件。可以使用通配符。 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. 如下命令行会显示当前目录下所有以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
对输出字符的显示处理
:: bat 代码 @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 #字符串前面的引号删除了,而中间的引号保留 请按任意键继续. . . ~I - 删除任何引号("),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI - 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩展到 空字符串
注释方式
| 方式 | 例子 |
|---|---|
:: |
::注释内容 ,echo on 时也不会打印出来 |
| rem | rem 注释内容 ,当echo on注释语言会打印出来 |
| @rem | @rem 注释内容,echo on时注释语言也不会打印出来 |
注释方式的不同
rem:是一个命令,所有单独一行或,用&和别的命令隔开
组合命令
| 命令 | 作用 |
|---|---|
命令1 & 命令2&命令3... |
命令都会执行 |
命令1 && 命令2&&命令3... |
碰到一个执行错误,后面的就不执行 |
命令1||命令2||命令3... |
碰到第一个执行正确,后面不执行 |
下面是管道命令 |
|
命令1 | 命令2|命令3 |
前面命令的输出做为后面命令的输入 |
| >, >> | >>表示追加,而>表示对旧的删除后写入 |
| < | 从文件中读入命令写入 |
bat中的变量值
%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% 系统 返回操作系统目录的位置。 变量的显示 在CMD里输入 echo %WINDIR% 这样就能显示一个变量的值了! 举个实际例子,比如我们要复制文件到当前帐号的启动目录里就可以这样 copy d:\1.bat "%USERPROFILE%\「开始」菜单\程序\启动\" %USERNAME% 本地 返回当前登录的用户的名称。 注意有空格的目录要用引号引起来
set自定义系统变量
语法:第一种:在程序中设置好set 变量名 = 变量值,第二种:手动输入set /p 变量名=“请输入变量值”,有点儿像是python中的input或者c语言中的sanf
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114247.html

