bat脚本笔记(一)

检测数值:

EQU-等于

NEQ-不等于

LSS-小于

LEQ-小于等于

GTR-大于

GEQ-大于等于

IF指令:

if exist 文件名 待执行的命令 :如果有指定的文件则运行命令,否则运行下一句

if  errorlevel / if not errorlevel 数字 待执行的命令 :如果返回码等于指定的数字,则条件成立运行命令,否则运行下一句。环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1,2等

1
2
3
4
@ECHO OFF
XCOPY F:\test.bat D:\
IF ERRORLEVEL 1 ECHO 文件拷贝失败
IF ERRORLEVEL 0 ECHO 成功拷贝文件

 不同命令其返回值所代表的含义也不相同

if “参数”==“字符串” 待执行的命令:检测字符串,用if检测字符串是否相等的时候,后面用到的不是“=”,而是“==”,参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。

CALL命令:call 命令用来从一个批处理脚本中调用另一个批处理脚本。

START命令:调用外部程序,所有dos命令和命令程序行都可以用start命令来调用。

                      常用参数:min 开始时窗口最小化

                                       ......

call命令与start命令的区别:start upload.bat不会等upload.bat执行完再执行下一条,如此可以实现同时执行多条命令,call upload.bat命令是要等调用的程序结束以后才运行下面的命令。

特殊符号:& :第一条命令 & 第二条命令[&第三条命令...]用这种方法可以同时执行多条命令,而不管命令是否执行成功

&&:第一条命令 && 第二条命令 [&&第三条命令...]当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令。

||:第一条命令 || 第二条命令 [||第三条命令...] ]当碰到执行正确的命令后将不执行后面的命令,如果一直没有正确的命令则一直执行完所有命令。

1
2
3
4
5
6
7
@echo off
for /? >for.txt
set /? >set.txt
shift /? >shift.txt
exit
 
执行后在当前路径下就生成for.txt、set.txt、和shift.txt三个文件,里面分别记录了for命令、set命令和shift命令的帮助信息。

FOR命令:

tokens=x,y,m-n 提取列

格式:

FOR /F "tokens=x,y,m-n" %%I       IN (Command1)   DO Command2

用法:

一句话总结:提取列。

通俗讲,共同提取每一行的第m小节的内容。

因此,可以用该命令来指定提取文本信息。

tokens=有时表示提取全部。

tokens=m表示提取第m列。

tokens=m,n表示提取第m列和第n列。

tokens=m-n表示提取第m列至第n列。

Tokens=*表示删除每行前面的空格。忽略行首的所有空格。

tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。

tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。

输出变量的个数由定义了的tokens决定。

在 FOR 语句中显式声明 %%i。使用tokens= 隐式声明%%j 和%%k。只要不会引起试图声明高于字母“z”或“Z”的某个变量,则使用tokens= 可以指定最多 26 个输出变量。

接着前面的例子“静夜思”。

如果我要提取第三小节“举头望明月”,如何做到?

@echo off

for /f   "delims=, tokens=3"   %%i in (静夜思.txt) do echo %%i 

pause>nul

讲解:

首先用delims=,表示命令要用逗号作为诗句的分隔符将四句分成四小节。然后用tokens=3提取第三小节,即“举头望明月”了。

delims=和tokens=共用一对双引号,如果单独用双引号,则FOR命令返回的只能是它们之中的一个。因为在第一节说过,FOR是逐一读取命令的,将delims和tokens分开后,FOR只能一次读取一个,不能一次全部读取。

注意:

Tokens常和delims一起使用。

首先,一行内容被delims用分割符号如逗号等分隔成许多小段或小节。

然后,tokens才能提取每行之间对应的这些小段或小节——列。具体看下面例子。

例:提取前面例子文本“a.txt”中每行的第三段内容“ccc”、“kkk”、“ggg”、“考试”。

@echo off

for /f "skip=1 delims=,, tokens=3" %%i in (a.txt) do echo %%i 

pause>nul

注意:为什么kkk不出现呢?

例:如何屏蔽掉文本“a.txt”中的标点符号?

@echo off

for /f "skip=1delims=,, tokens=1-4" %%i in (a.txt) do echo %%i %%j %%k %%l

pause>nul

讲解:

%%i %%j %%k %%l是输出变量,它的个数由tokens后面的(m-n)决定,一般有(n-m+1)个,但不能超过Z。

并且%%后面的字母存在先后顺序,%%a %%b是顺向,倒过来则是逆向的。

代行号的tokens=m*,星号表示m后面的所有剩余的列。

例:

for /f "tokens=*"   %%i in (a.txt) do echo %%i 

讲解:

没有指定具体的列,"tokens=*"将

提取全部列,后面只需一个输出变量%%i。

例:

for /f "tokens=2*"   %%i in (a.txt) do echo %%i %%j

讲解:

"tokens=2*"提取第二列以后的所有字符,星号表示剩余的字符。输出变量%%i对应于2的输入变量,%%j对应于星号的输入变量。

注意:

这里没有使用delisms但却以空格分隔了,是因为FOR默认空格是做分隔符的。

例:屏蔽掉“易经.txt”中的标点符号: 

@echo off

for /f "tokens=1-5 delims=:," %%a in (易经.txt) do echo %%a %%b %%c %%d %%e

pause>nul

讲解:

当delims定义了两个分隔符“:”和“,”时,提取列要用到tokens。

有五个列,所以tokens要定义提取第一列至第五列,即1-5,相应地,后面需要五个输出显示变量%%a %%b %%c %%d %%e。你也可以这样修改,避免过多的变量符号

你也可以将最后多余的句号定义为分隔符“delims=:,。”将其屏蔽掉。

【续】[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-13798-1-1.html

TASKLIST 命令:


TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

描述:
该工具显示在本地或远程机器上当前运行的进程列表。


参数列表:
/S system 指定连接到的远程系统。

/U [domain\]user 指定应该在哪个用户上下文执行这个命令。

/P [password] 为提供的用户上下文指定密码。如果省略,则
提示输入。

/M [module] 列出当前使用所给 exe/dll 名称的所有任务。
如果没有指定模块名称,显示所有加载的模块。

/SVC 显示每个进程中主持的服务。

/APPS 显示 Microsoft Store 应用及其关联的进程。

/V 显示详细任务信息。

/FI filter 显示一系列符合筛选器
指定条件的任务。

/FO format 指定输出格式。
有效值: "TABLE"、"LIST"、"CSV"。

/NH 指定列标题不应该
在输出中显示。
只对 "TABLE" 和 "CSV" 格式有效。

/? 显示此帮助消息。

筛选器:
筛选器名称 有效运算符 有效值
----------- --------------- --------------------------
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
SESSIONNAME eq, ne 会话名称
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 小时,
mm - 分钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位)
USERNAME eq, ne 用户名,格式为
[域\]用户
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
模块 eq, ne DLL 名称

注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"
筛选器。

Examples:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

posted @   存在与虚无  阅读(315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示