bat脚本是什么?

首先讲讲什么是命令行,在windows操作系统中,点击左下角的win图标,直接输入cmd搜索,左键点击进入命令行模式(或按键盘上的win键+r直接调出来命令行窗口)。

在windows下命令行中,我们可以执行各种命令,通常这些命令被称为dos命令,也是各个版本windows都会自带的命令,所以无论在什么条件下,只要有windows系统,就可以使用dos命令。

bat脚本就是把一条条单独的dos命令组合在一起的多条dos命令集合的文件,后缀是.bat。

前期概要

本文是对第一篇文章补充的详细解释,包括命令详解、bat脚本的格式说明。(在学习的过程中,可以在自己电脑的命令行中直接进行测试验证)

除之前教程中的echo, set, rem, pause外,主要涉及到的dos命令或功能有:

for, wmic, 截取字符串, 延迟执行命令,比较操作,重定向

跳转至第一篇文章 点击这里

源代码如下(有删减)

@echo off

rem 采集内存总容量
for /f "skip=1" %%i in ('wmic os get TotalVisibleMemorySize') do (
if %%i geq 0 set totalMem=%%i
)
set /a tmp=%totalMem%/1024
set totalMem=%tmp:~0,-3%.%tmp:~-3%G echo 总内存容量:%totalMem%
echo -----------------------------------------
rem 设置2秒的延迟
ping 127.0.0.1 -n 2 > null rem 采集磁盘信息
echo 磁盘信息(可用/总量)
wmic LOGICALDISK get DeviceID,FreeSpace,Size > tmp.txt
for /f "skip=1 tokens=1,2,3*" %%i in ('type tmp.txt') do (
set totalDisk=%%k
set freeDisk=%%j
set /a tmp1=!freeDisk:~0,-5!/1074
set /a tmp2=!totalDisk:~0,-5!/1074
set diskStr=%%i!tmp1:~0,-1!.!tmp1:~-1!G/!tmp2:~0,-1!.!tmp2:~-1!G
echo !diskStr!
)
del tmp.txt

命令详解

  • for

功能概述:在命令行中输出自定义字符串。(可以理解为dos命令的循环操作,但是有一些区别)

参数说明:

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

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

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

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

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

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 ('command') DO command [command-parameters

示例:

for /f "skip=1 tokens=1,2,3*" %%i in ('type tmp.txt') do @echo %%i,%%j,%%k

该语句将会将tmp.txt文件中的内容的前三个字段打印到命令行中,分隔符未指定,则是默认的空格等空白字符

  • wmic

功能概述:wmic可以对window nt系统的WMI管理组件进行管理,功能包括但不限于计算机系统信息,内存信息,磁盘信息,硬件信息等。

参数及说明:

第一种方式:进入命令行,输入wmic,即可进入wmic的命令行,输入/?可查看所有的组件在WMI中的别名。如process(进程信息),os(操作系统信息),computersystem(计算机系统信息)等。。。

第二种方式:直接在cmd命令行输入wmic+各种组件别名+执行的操作,比如wmic os get list brief

示例:

wmic os list brief

输出结果

C:\Users\qjx>wmic os list brief
BuildNumber Organization RegisteredUser SerialNumber SystemDirectory Version
17134 00329-00000-00003-AA288 C:\WINDOWS\system32 10.0.17134

总结:

wmic在windows操作系统中的应用很多,如果利用好这个工具,可以用这个简单的方式实现许多复杂的获取计算机信息的功能。

  • 截取字符串

功能概述:

Windows操作系统级别,实现将字符串分割。

参数说明:

如果定义了一个变量,那么正常的调用该变量的方式是在变量名两边加%符号调用,截取字符串是在调用的同时做了一些特殊的操作。

示例:

@echo off
set tmp=123456
echo %tmp%
echo %tmp:~0,3%
echo %tmp:~0,-2%
echo %tmp:~-1%

输出

G:\Own\WeChat\course2>tmp2.bat
123456
123
1234
6
  • 延迟执行

功能概述:

延迟执行命令,比如3秒后执行某条命令,可以用ping 127.0.0.1 -n 3 > null实现

示例

@echo off

echo 11111
ping 127.0.0.1 -n 3 > null
echo 22222

结果:

G:\Own\WeChat\course2>tmp2.bat
11111
22222
  • 比较操作

功能概述:

比较运算符(精度小于32位,若大于32为则无法比较):

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

@echo off

set num1=11
set num2=22
if %num1% equ %num2% echo "num1=num2"
if %num1% gtr %num2% echo "num1>num2"
if %num1% lss %num2% echo "num1<num2"

结果:

G:\Own\WeChat\course2>tmp2.bat
"num1<num2"
  • 重定向

功能概述:

重定向的作用是将命令行的输出结果输出到文件。

wmic LOGICALDISK get DeviceID,FreeSpace,Size > tmp.txt

总结:

如果程序产生的数据不需要持久化存储,但又需要作为接口传递给下一个程序,通常都会采用中间文件的处理方式。

以上就是对6个命令或功能的讲解了,用好了这些搭配起来上次教程的4个基础命令即可完成各种windows脚本的编写。

如有错误请指出

脚本其实很简单-windows配置核查程序(2)的更多相关文章

  1. 脚本其实很简单-windows配置核查程序(1)

    先上成品图 需求描述 我们电脑上都安装各种过监控软件,比如360.鲁大师等等...其中有一个功能就是性能监控,在安全行业里面通常叫做"配置核查",目的就是将主机的各种性能指标展示, ...

  2. Linux~其实shell脚本也很简单

    用了两个的centos之后,也想看看它的脚本,我们知道shell这个东西就像windows里的批处理,它可以将一些语句进行组合,然后统一去执行,感觉挺方便的. shell文件的组成 shell语言环境 ...

  3. vb6-很简单的配置密码验证提示

    '很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...

  4. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  5. 在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。

    这几天在学习在linux上搭建服务器的工作,可谓历经艰辛.可喜最后收获也不少. 这次是在linux上搭建redis服务器后从windows上缺无法访问,连接不上. 仔细回忆以前搭建nginx和ftp的 ...

  6. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    由于最近比较忙,一直到假期才有空,因此将自己学到的知识进行分享.如果有不对的地方,请指出,谢谢!目前深度学习越来越火,学习.使用tensorflow的相关工作者也越来越多.最近在研究tensorflo ...

  7. 我的第一个WCF程序,很简单适合我等菜鸟

    1.首先我罗列一下网站搜索并经过自己理解的WCF的含义: 1)WCF:(WIndows Communication Foundation)是由微软是由微软发展的一组数据通信的应用开发接口,可以翻译为W ...

  8. Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器

    libuv是一个很强大的异步处理框架(严格意义上不能叫框架,其实就是一组异步函数库,当然框架这东西有各种各样的定义和理解_^...),最初的的目的是用于NODEJS的异步处理,不过因为它是一个独立的项 ...

  9. 快速解决:windows安装程序无法将windows配置为在此计算机的硬件上运行

    用手工运行msoobe.ext启用配置的方法, 快速解决:windows安装程序无法将windows配置为在此计算机的硬件上运行   我自己安装碰到的是蓝色这个错误,下面这个也有网友说用安装驱动等方法 ...

随机推荐

  1. 2015 Multi-University Training Contest 3 1006 Beautiful Set

    Beautiful Set Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5321 Mean: 给出一个集合,有两种计算集合的值的 ...

  2. 程序员自己编写的类和JDK类是一种合作关系

    封装类: JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载. 除了int和char,其余类型首字母大写即成封装类. 转换字符的方式: int I=10; Str ...

  3. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

  4. 【BZOJ】1625: [Usaco2007 Dec]宝石手镯(01背包)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1625 太水了. #include <cstdio> #include <cstri ...

  5. php的form中元素name属性相同时的取值问题

    php的form中元素name属性相同时的取值问题:修改元素的名称,在名称后面加上 '[]',然后取值时即可得array()数组. 一.以复选框为例: <html> <head> ...

  6. 如何用ChemDraw中的ChemFinder查询反应过程

    ChemFinder是ChemDraw化学绘图软件的重要插件之一,ChemFinder是一个贮存众多化学信息的数据库管理系统,不仅可以用于查询基本化学结构,用户还可以用ChemFinder查询需要的反 ...

  7. WPF进阶之接口(2):IDisposable,ICollectionView

    废话不多说,进入正题,先来说说IDisposable,看例子(来自MSDN): using System; using System.ComponentModel; // 下面的例子将展示一个实施了I ...

  8. Animate a custom Dialog,自定义Dialog动画

    Inside res/style.xml <style name="AppTheme" parent="android:Theme.Light" /> ...

  9. Arduino开发版学习计划--蓝牙控制小车行走

    蓝牙模块一共6个引脚,我们一般只需要接4个线就可以了,分别是VCC.GND.TXD.RXD这四个引脚,我们分别接到arduino板子上,VCC接3.3V,GND接板子的GND,蓝牙TXD接板子的RXD ...

  10. IE edge是怎么了??

    IE edge 怎么不能通过$.getJSON(url,function(data){ alert(''); });获取数据呢?,其他浏览器和IE的10以下版本都没问题获取到了,这是什么情况!本来是想 ...