Windows cmd(bat) 脚本简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows cmd(bat) 脚本简介相关的知识,希望对你有一定的参考价值。

参考技术A

命令提示符是在 操作系统 中,提示进行命令输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。在 windows 环境下,命令行程序为 cmd.exe,微软 Windows 系统基于 Windows 上的命令解释程序,类似于微软的 DOS 操作系统 。

四种文件类别

命令不区分大小写
在 Windows 系统中,所有的文件夹或者文件名、环境变量、命令都是 不区分大小写 。据说但是是为了兼容 DOS,才没有区分大小写,后续就一直不区分了。

查看 windows 版本
winver

打开注册表
regedit

打开计算器
calc

打开绘图
mspaint

打开记事本
notepad

打开写字板
wordpad

打开控制面板
control

打开远程桌面 (Microsoft terminal services client)
mstsc

打开或关闭 Windows 功能
optionalfeatures

服务管理
services.msc

系统配置
msconfig.exe

防火墙
firewall.cpl

卸载或更改程序
appwiz.cpl

打开计算机管理
compmgmt.msc

打开电源选项
powercfg.cpl

打开 internet 选项
inetcpl.cpl

系统属性
sysdm.cpl

显示设置
desk.cpl

证书管理
certmgr.msc

添加硬件
hdwwiz.exe

关机
shutdown

dir

cd

tree
显示目录结构
tree d:\\ #显示D盘的文件目录结构

日期和时间

文件/文件夹的重命名

复制文件

删除文件是不经过回收站

删除空文件夹

rmdir(rd):删除非空文件夹且需要进行确认

删除非空文件夹且不需要进行确认

重命名文件或者文件夹。(尽管引号不是强制性的,但如果当前名称或新名称中都有空格)

清屏
cls

显示文件内容
type

网址/域名 :检查当前网址是否连通 (注:会返回当前网址对应的IP地址和网络状态)
ping

方法一:使用 ↑↓ 箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况;

方法二:使用快捷键:
F7: 快捷键查看所有执行过的命令
F3:调出上一条执行过的命令,调出后直接回车即可执行;
F8:搜索命令历史记录,和↑向上箭头类似。
F9:按编号选择命令,来调出执行过的命令:

方法三:doskey /HISTORY 显示保存在内存中的所有命令

可搭配 more、findstr 命令进行使用:

doskey /HISTORY | more
doskey /HISTORY | findstr dir
doskey /HISTORY > d:\\123.txt 重定向到文件

后缀一般存储为 bat, cmd 格式的文件。

创建文件:建议右键-新建文本文档。建议选择 gbk 中文编码,换行选择 \\r\\n 。示例中我将文件存储为 hello.bat。

使用方法:双击使用或在命令提示符中键入文件名。

设置 cmd 窗口的标题

输出到屏幕

将参数1,参数2 输入到命令行
hello.bat aaa bbb

说明:
%0 批处理文件本身
%1 第一个参数
...
%9 第九个参数

pause 就是暂停命令
pause > null 的作用是同样的,区别是不显示“请按任意键继续. . .”这些字,nul 相当于空设备。

定义变量,注意等号左右不能加空格。

在批处理中 > 和 < 为重定向符号,这就意味着我们不能用 > 来表示大于,< 表示小于,也就意味着不能用 >=、<=、<> 来表示大于等于、小于等于、不等于,还好,在批处理中用了其他的操作符代替它们,这在"if /?"中有说明:

引用内容 引用内容

1. &
顺序执行多条命令,而不管命令是否执行成功

2. &&
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令

如果找到了"ok"字样,就显示"成功",找不到就不显示

3. ||
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令

如果找不到"ok"字样,就显示"不成功",找到了就不显示

5. 输出重定向命令

> 清除文件中原有的内容后再写入
>> 追加内容到文件末尾,而不会清除原有的内容

6. 管道操作符 |
clip 将内容复制到剪切板

dir 组合 clip 的用法示例

start 可以打开文件夹,文件,网址等

if 关键字和语句
1、if [NOT]"参数" == "字符串"
2、if [NOT] exist 文件名 待执行的命令
3、if [NOT] errorlevel 数字 待执行的命令
如果返回码大于或者等于(或者小于,使用NOT)指定的数字,则条件成立,运行命令,否则运行下一句。DOS 程序运行时都会返回一个数字给 DOS,称为错误码 errorlevel 或称返回码。默认值为 0,一般命令执行出错会设 errorlevel 为1。数字取值范围 0~255。判断时值的排列顺序应该由大到小,否则会出现非期望的结果。

示例1:if 搭配 exist 进行使用,用于判断某文件是否存在

原来的环境变量后加上英文状态下的分号和路径

set PATH=%PATH%;C:\\Users\\zhangsan\\Documents\\winrar-x64-580

setx PATH "%PATH%;D:\\Program Files"

该语句表示添加到用户环境变量, 设置后对当前窗口不生效, 后续窗口都生效了.
(建议执行一次, 防止多试重复添加, 该威力巨大.
目前不知道怎么删除单项环境变量, 只能采取重新赋值的方式)

键入 "SETX /?" 了解用法信息。

切记:每个指令之间必须以空格隔开,in 与 ( 之间有空格,do 与 ( 间也有空格,否则命令会无法成功执行

[ ]:表示此项指令为可选
[参数]:参数取值一共有四种: /d, /r, /l, /f,加上无参数,所以一共五种场景
无参:遍历当前路径的文件夹下的文件,但也可在(匹配符)中指定路径

批处理脚本遍历指定文件夹下的文件_RuncX的技术博客_51CTO博客
https://blog.51cto.com/runcx/2465152

C:\\Users\\ferder>echo %date%
2022/07/02 周六

C:\\Users\\ferder>echo %time%
20:19:37.09

因此
提取年 %date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014
提取月 %date:~5,2%
提取日 %date:~8,2%

同理提取时间的时分秒为 %time:~0,2%%time:~3,2%%time:~6,2%

实战操作:
md %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

则是再当前目录下创建一个空的文件夹。

DOS 批处理中的字符串处理详解(字符串截取)
https://blog.csdn.net/xiaoding133/article/details/39253083

Windows bat脚本——for循环用法详解

Windows bat脚本的for语句基本形态如下:

在cmd窗口中:for %I in (command1) do command2
在批处理文件中:for %%I in (command1) do command2
之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。
我们先来看一下for语句的基本要素都有些什么:

for、in和do是for语句的关键字,它们三个缺一不可;
%%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
in之后,do之前的括号不能省略;
command1表示字符串或变量,command2表示字符串、变量或命令语句;
  下面来看一个Windows bat脚本的demo(记为demo1):

@echo off
for %%I in (ABC) do echo %%I
pause
  保存为.bat文件(批处理文件)并执行,将会在弹出的批处理窗口中看到这样的信息:

 

  对批处理文件的for循环就是这样简单,下面来看看for语句的注意事项,并运行更复杂的for循环实例。


for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。

有了以上的基础,我们再来看下面这个例子,这个例子修改了demo1中的部分内容(记为demo2),结果将大不一样:


@echo off
for %%I in (A,B,C) do echo %%I
pause
  运行结果如下:

 

如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和demo2的执行结果别无二致。

现在,来分析一下demo2代码中for语句的执行过程:

  1.for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,由此决定了do后的语句将会被执行3次; 

  2.第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为A,因此,第一次执行的结果,将会在屏幕上显示A这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 B 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

 高级用法:

1)搜索当前目录下有哪些文件?

@echo off
for %%i in (*.*) do echo "%%i"
pause
2)搜索当前目录下所有的文本文件?

@echo off
for %%i in (*.txt) do echo "%%i"
pause
————————————————
版权声明:本文为CSDN博主「追梦菜鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013514928/article/details/79629937

以上是关于Windows cmd(bat) 脚本简介的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 Python 子进程:启动子进程“cmd.exe”并为其提供 bat 文件,停止主进程执行

bat/cmd脚本开发

Windows批处理脚本陷入死循环问题

如何在windows bat脚本中调用Cygwin并执行命令

建议收藏Windows批处理(cmd/bat)常用命令总结

Windows bat脚本——for循环用法详解