当前路径:%~dp0
这个参数只能在bat文件中在正常使用,在cmd窗口直接输入是没用的,在cmd中可以使用cd ./命令查看
符号@
表示不显示后面的命令行信息,常在第一行使用@echo off;为了不打印这句回显命令
未添加@符号
加@符号
特殊符号
符号作用@让后面的命令不显示在窗口,但会执行,一般用于关闭回显@echo off和不显示注释%引导bat文件的输入变量,%19;%*表示所有变量>,>>覆盖和追加内容到文件<从文件中读入>&,<&一个句柄写入到另一个,某个数据流输出的地址,(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="12344567"echo%a% ::"12344567"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 [{onoff}]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:\mp4pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3popd#恢复当前目录为刚才保存的 d:\mp4
setlocal 与 变量延迟
参考:https://hellokandy.blog.csdn.net/article/details/78065145?
每条命令执行后都认为是预处理命令,所以对变量赋值后再赋值将不起作用;而想要改变需要使用变量延时
@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命令使用
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示
call命令语法:
call 文件完整路径 参数1...
如果使用当前bat文件所在文件夹可用%cd%代替文件名字
后缀必须是.bat或.cmd
一个bat文件里
::假如当前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*)doecho%%a
b. 如下命令行会显示 E盘test目录 下所有以bat或者txt为扩展名的文件名。
for/R E:\test %%b in (*.txt *.bat)doecho%%b
for/r %%c in (*)do(echo%%c) :: 遍历当前目录下所有文件
c. 如下命令行将产生序列 1 2 3 4 5
for/L %%c in (1,1,5)doecho%%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 时也不会打印出来remrem 注释内容 ,当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
版权归原作者 MAR-Sky 所有, 如有侵权,请联系我们删除。