最近做安全加固
需要用到bat方面的东东,
不怎么熟悉bat的人去做这个有点太勉强。
于是,
在网上搜了好久,才发现。。
首先谢谢整理出本资料的朋友!
处理文本:
使用for循环指令,类似于linux下面的AWK效果。
例如:
FOR /F ["options"] %%variable IN (file-set) DO command [command-parameters]
%%variable 指定一个单一字母表示可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
带引号的字符串"options"包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的 默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代 的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。经测试,该参数最多只能区分31个字段。
usebackq - 使用后引号(键盘上数字1左面的那个键`)。未使用参数usebackq时:file-set表示文件,但不能含有空格双引号表示字符串,即"string"单引号表示执行命令,即'command'使用参数usebackq时:file-set和"file-set"都表示文件。 当文件路径或名称中有空格时,就可以用双引号括起来。单引号表示字符串,即'string', 后引号表示命令执行,即`command`
在AWK中使用的命令是:
显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段:
awk -F % 'NR==7,NR==15 {print $1 $3 $7}' myfile
查找文字:
使用find指令,类似于linux下面的grep效果
字符替换:
使用
变量定义:
使用set关键字
例如:set a=10,注意等号两边不要有空格
变量引用:
使用%a%,类似与linux下面的$
指令执行结果处理(bat脚本和linux脚本处理相同)
指令执行完成后 1 表示成功输出 ,2表示失败的输出 。
紧跟在指令后面的“&&”和“||” 表示执行完前面指令之后要执行的工作
||前面的工作表示前面指令执行成功后的动作,||后面的表示前面指令执行失败的动作
1>nul表示执行成功的信息放入到nul中,即不显示,
2>nul表示执行失败的信息放入到nul中,即不显示。这两条指令可以省略,即会显示结果
例如:
command 1>nul 2>nul && echo 运行成功||echo 运行失败
附一个关于标准输入输出的说明:
在linux中,一个进程启动时,都会打开 3 个文件:标准输入、标准输出和标准出错处理。这3 个文件分别对应文件描述符为 0、1 和 2(也就是宏替换 STDIN_FILENO、STDOUT_FILENO和 STDERR_FILENO
在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、 标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到的从终端输入或输出都不需要打开终端文件。系统自定义了3个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。
标准输入流:stdin
标准输出流:stdout
标准错误输出流:stderr
用户输入命令来选择程序执行流程
使用set 或choice命令,
@echo off :a set /p a=请选择(1或2): if "%a%"=="2" exit if not "%a%"=="1" ( echo 请输入1或2! pause cls goto a ) 要继续运行的命令写在这里
rem 注意在不同的goto程序体要加入“exit”