0


bat批处理文件的注释,和常用简单命令

参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/windows-commands,https://blog.csdn.net/wuhenyouyuyouyu/article/details/120736519?

当前路径:%~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


本文转载自: https://blog.csdn.net/weixin_43794311/article/details/128275588
版权归原作者 MAR-Sky 所有, 如有侵权,请联系我们删除。

“bat批处理文件的注释,和常用简单命令”的评论:

还没有评论