学习批处理的心得

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:
批处理各符号的功能:
1.
echo有两个状态一个是on 一个是off默认的是on 它的功能是显示当前文件的路径,如果不写on 或者是off的时候,默认情况下
是打开的即显当前文件的路径,加上off后,所有路径都不显示,但是echo off这行还能显出来,要让这行也消失的话就在它们前面
加一个@即@echo off,另外echo命令的另一种用法,可以直接编辑文本文件,例如:
echo netstat -an >a.bat结晶果是在当前目录下生成一个a.bat的文件,双击直接执行这个文件时,就会执行netstat -an这个命令
2.
> 这个字符的意思是将">"前面的内容传递并且覆盖">"后面的内容,它所起的作用是将运行的回显结果传递到后面的范围.
例如:ipconfig.txt中的内容是1113333,执行ipconfig /all >ipconfig.txt即将ipconfig /all的内容覆盖原有的1113333。与这个
符号相似的还有>>它的功能不是覆盖而追加,即将运行后的内容加到原来的1113333后。
3.
| 这是一个管道传输命令,意思是将上一命令执行的结果传到下一个命令去处理
例如:
dir c:\|find "txt"
以上命令是:查找C:\所有,并发现TXT字符串。
||
Usage:第一条命令 || 第二条命令 [|| 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令
;(只要正确后面的就不执行)
4.
^ 是对特殊符号"<",">","&"的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊
意义。
例如:
C:\>echo ipconfig.txt ^>ipconfig
结果为:ipconfig.txt >ipconfig没有追加只是显示出来而已
5.
& 这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行
例如:C:\>dir d:/p & dir e: /p & dir c: /p
结果是先后执行
6.
&& 这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行
例如:C:\>dir w:/p && dir e: /p && dir c: /p 由于电脑上没有w盘所以显示结果为:系统找不到指定的路径。这样以来,后面的
两个盘就不执行啦。(当第n个命令失败时此命令后面的命令将不再执行,也就是说一直执行到失败为止)
7.
"" 双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd "program files"
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录
8.
, 逗号相当于空格,在某些情况下“,”可以用来当做空格使
比如
dir,c:\
9.
; 分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序还是
会执行。
比如:
dir c:\;d:\e:\;f:\
以上命令相当于
dir c:\
dir d:\
dir e:\
dir f:\
但是前面执行的盘不存在的话,后面的命令将不会执行。
例如:C:\>dir w:;d: /p;e: /p
结果为:系统找不到指定的路径。
10.在echo的后面加一个点,所起到的作用是显示一空行。
以下范例显示的批处理程序包含前后各有一个空行的三行消息:
@echo off
echo. 
echo This batch program 
echo formats and checks 
echo new disks 
echo.
如果想让打开的批处理命令的标题栏有名字的话可以用到title这个参数
title filename

">nul 2>nul"可以屏蔽一切屏幕的输出,例如:dir >nul 2>nul这样屏幕上什么都不会输出,也就是没有结果。
1>nul 表示将正确执行目录树的信息禁止输出,2>nul 表示将执行过程中的错误信息禁止输出。

断开网络连接方法有两种:一种是rasphone /h adsl,另一种是rasdial adsl /d
11.goto一般和:是联用的goto跳转的地方入口就是":"。goto命令的另一种用法一:提前结束程序。在程序中间使用goto命令跳转到
某一标签,而这一标签的内容却定义为退出。如:
……
goto end
……
:end

dir中有些命令是要牢记的
dir d: /s /p /b (/a这后面还有一些参数像h,r,d,s/d)具体的可以看帮助

%userprofile%在写批处理时这个相当于C:\Documents and Settings\Administrator
在结束关键进程的时候,要先结束explorer.exe这个进程,最好用系统自带的工具taskkill这个关explorer.exe的时候任何杀毒软件
都没有提示,但是如果换成了用ntsd关的话,卡巴斯基会报毒,而且这时的explorer会在关闭的一下后马上自启动,而taskkill就会
一直关着直到等你开启为止。
在使用for 的时候当用到 /d时,那是因为set中有* ?这两个通配符

shift
1.可替代参数的编号是%o-%9,如果要在一个命令行上使用超过10个可以被代换的参数,则可使用SHIFT命令来突破此限制。
2.每当执行sHIFT一次,命令行上的所有参数将向左移动一位。%1的内容将为%2的内容所取代…,%9内容则由新的参数取代。
3.%o表示批处理文件本身的名称,永远不变,所以每次执行时可以在批处理文件使用一次shift就向右移动一位,例如:
a.bat的内容:
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
运行
c:\>a 1 2 3 4 5 6 7 8 9 10 11(其后有11个参数)
1 2 3 4 5 6 7 8 9 (取到最前面9个参数)
c:\>shift (移位)
2 3 4 5 6 7 8 9 10 11(取到另外9个参数)
c:\>shift (移位)
3 4 5 6 7 8 9 10 (取到另外9个参数)

在批处理中del /f /s /q可以删除指定目录下的任何文件,但是不能删除文件夹,rd /s /q不但可以删除指定目录下的文件夹而且还
可以删除目录下的所有文件,以前总是以为rd只能删除文件夹,现在才知道用这个命令还以删除文件夹

@echo off @echo off
:top :top
if (%1)==() goto end if (%1)==()goto end
shift shift
echo still running echo still running
goto top goto top
:end :end
看到了吧!两个程序就是第三行的goto前面不一样,第一个有一个空格,而第二个没有,就是这个空格所产生的结果就不一样,第一
个结果是三行still running,而第二个结果是一个无限制的循环,一直不停的显示still running,所以写程序的时候一定要注意

errorlevel
若一个程序或DOS命令执行成功,则返回的E只RORLEVEL的值为o,否则为1至255之间AscII值的任意整数,其值只占一个字节约内存
空间,值得注意的是IF语句中检验的ERRORLEVEL值是大于或等于而不是等于,例如语句IF ERRORLEVEL 5检验的是ERRORLEVEL>=5而
不是ERRORLEVEL=5,因此对于5至255之间的任何整数,此语句检验结果都是真值。

在变量延迟时要用到setlocal EnableDelayedExpansion
例如:
@echo off
setlocal EnableDelayedExpansion
.......
然后写要用的代码
需要注意的是,一旦启用了变量延迟,就要用!号把变量括起来,而不能用%号。
echo !n!
显示变量n的值
例如:
@echo off &SETLOCAL ENABLEDELAYEDEXPANSION
set mm=gril&echo !mm!
pause
ping 在批处理中有延时的作用,开始的时候不知道怎么用,后来才发现,每ping一次的时间是一秒,所以写成ping /n 10 127.1或者
是ping /n 10 localhost效果是一样的,都能起来延时十秒的作用

set
SET /A expression
环境变量替换已如下增强:
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
%PATH:str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换
例如:
@echo off
set a= bbs.verybat.cn
echo 替换前的值: "%a%"
set var=%a: =qq%
echo 替换后的值: "%var%"
pause
结果是:替换前的值: " bbs.verybat.cn" 很明显吧,那个空格被qq给代替啦^-^
替换后的值: "qqbbs.verybat.cn"
请按任意键继续. . .

@echo off
set a=bbs.verybat.cn
echo 替换前的值: "%a%"
set var=%a:.=伤脑筋%
echo 替换后的值: "%var%"
pause
解释set var=%a:.=伤脑筋%
set命令 var变量名 字a是要进行字符替换的变量的值,"."为要替换的值,
"伤脑筋"为替换后的值!
执行后就会把变量%a%里面的"."全部替换为"伤脑筋"
这就是set的替换字符的很好的功能!先讲到这

%PATH:~10,5%
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause
执行后,我们会发现只显示了"bs"两个字母,我们的变量%a%的值不是为bbs.verybat.cn吗
怎么只显示了第2个字母和第3个字母"bs",分析一结果我们就可以很容易看出
%PATH:~10,5%就是显示变量PATH里指定几位的值!
分析set var=%a:~1,2%
set命令 var变量值 a要进行字符操作的变量 "1"从变量"a"第几位下一位开始显示 "2"显示几位
和起来就是把变量a的值从第一位开始,把后两位赋予给变量var
%PATH:~-10% 例子
@echo off
set a=bbs.verybat.cn
set var=%a:~-3%
echo %var%
pause

这个的意思是从右往左取三位,把取到的部分给了var ,如果把负号去掉,就成了从左往右去掉三位把剩下的部分给了var
%PATH:~0,-2% 例子
@echo off
set a=bbs.verybat.cn
set var=%a:~4,-3%
echo %var%
pause
结果是verybat,这段代码的意思是,从右去掉三位,把左剩余的部分,从第四位的下一位开始显示,把显示的内容给了var
如果改成set var=%a:~3,-3%结果就是.verybat
延迟和set的综合应用:
@echo off 
setlocal enabledelayedexpansion

title I Love Greatwall
set love=I Love Greatwall Forever
for /l %%i in (1,1,24) do (cls 
echo. !love:~0,%%i! 
ping/n 1 127.1>nul 2>nul)
pause
我觉得这段代码很意思,do里面的命令主要是分三块但是这三块不能在同一行,分三行写.因为它们是不同的命令,要想写在一行的
话要加&,写好后为for /l %%i in (1,1,24) do (cls &echo. !love:~0,%%i! &ping/n 1 127.1>nul 2>nul)

for
在DOs提示符下可直接使用FOR语句,用法的区别在于必须把%%variable写成%variable
关于FOR语句的使用方法,归纳如下:
(1)为了在各种DOS版本下都能运行,%%vart6le的变量必须为单个字符,应避
免使用%%o一%%9作为变量。
(2)FOR%%variaNeIN tnle s就)command%%variable其中File set必须放在
括号内,文件的个数没有限制,只要不超过D05命令行127个字符的限制即可,文件之
间用空格或逗号作为分隔符分开,文件名可以使用通配符。
(3)FoR语句中后面的变量有时可省略,如:
FOR%%a IN(*.BAK)D0 DIR
(4)FOR语句的结尾如果执行另一个批处理程序,执行结束后,不再返回FOR语
FOR /D %%variable IN (set) DO command /D参数只能显示当前目录下的目录名字
@echo off
for /d %%i in (*) do @echo %%i
pause
把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示!
@echo off
for /d %%i in (???) do @echo %%i
pause
这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了
这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符
FOR /R [[drive:]path] %%variable IN (set) DO command
它可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字
@echo off
for /r c:\ %%i in (*.exe) do @echo %%i
pause
把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了

@echo off
for /r %%i in (*.exe) do @echo %%i
pause
以当前目录为搜索路径,显示当前目录的全部EXE文件列出来!

for /L %% Variable in (Start#,Step#,End#) do Command
@echo off
for /l %%i in (1,1,5) do start cmd
pause
看上面的start step end就知道是什么意思了吧,开始,结束,步阶,按一步一个的话,就会总有六个cmd跳出来五个
设置默认的控制台前景和背景颜色。

for /F "ParsingKeywords" %% Variable in (FileNameSet) do Command
"ParsingKeywords" 
它表示4个参数
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过 nth 符号指定 mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在 filenameset
中使用双引号扩起文件名称。
例如:新建一个文件名字为test.txt
内容为:
;哈哈
你好!相信自己一定会成功……
Never Say Die
好啦就这样吧
@echo off
FOR /F "eol=; tokens=1 delims= " %%i in (test.txt) do @echo %%i
pause
你好!相信自己一定会成功……
Never
好啦就这样吧
这个命令会读取在当前目录下名为test.txt文件中的内容,然后将每一行的内容赋值给变量%%i,然后忽略掉以;号开头的行,并且以空
格做为分隔符号,打印第每行以空各做分隔符号的第一列
又例如:
@echo off
for /f "tokens=3 delims=- " %%a in ('date /t') do @echo %%a 
pause
date /t的结果是:2007-08-22 星期三
所以批处理的结果为:22
@echo off
for /f "tokens=2,3,4 delims=-" %%a in ('date /t') do @echo %%c-%%a-%%b
pause

结果为:-08-22 星期三
总结:以上两个的结果都是从date /t中以"-"为分隔符,从左往右依次取第三列(这就是第一个的结果22),第二,三,四列(这就是
第二个的结果-08-22 星期三),这个for以后的用处还很大.

FOR的变量全部列出来:凡是 %~ 开头的操作符,都是文件名的分离操作
~I - 删除任何引号("),扩展 %I
这个变量的作用就如他的说明,删除引号!
我们来看这个例子:
首先我们在桌面建立一个名字为temp.txt文本文件,在里面输入这些内容
"1111
2222"
"3333"
44"44
然后在建立个BAT文件代码如下:
FOR /F "delims=" %%i IN (temp.txt) DO @echo %%~i
pause
执行后,我们看CMD的回显如下:
1111
2222"
3333
44"44
和之前temp.txt中的内容对比一下,我们会发现第一行和第三行的引号都消失了,这就是删除引号~i的作用了!
删除引号规则如下(BAT兄补充!)
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除

%~fI - 将 %I 扩展到一个完全合格的路径名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause
执行后显示内容如下
C:\Documents and Settings\Administrator\桌面\test.bat
C:\Documents and Settings\Administrator\桌面\test.vbs
当我把代码中的 %%~fi直接改成%%i
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%i
pause
执行后就会显示这些内容
test.bat
test.vbs
%~dI - 仅将 %I 扩展到一个驱动器号
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
pause
执行后我CMD里显示如下
C:
C:
%%~di作用是,如果变量%%i的内容是一个文件或者目录名,那么%%~di就会把%%i这文件或者目录所在的盘符号打印出来!
%~pI - 仅将 %I 扩展到一个路径
这个用法和上面一样,他只打印路径不打印文件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause
\Documents and Settings\Administrator\桌面\
%~nI - 仅将 %I 扩展到一个文件名
只打印文件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
pause
test
%~xI - 仅将 %I 扩展到一个文件扩展名
只打印文件的扩展名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
pause
.vbs
.bat
.txt
.txt
.txt
%~sI - 扩展的路径只含有短名
打印绝对短文件名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
pause
C:\DOCUME~1\ADMINI~1\桌面\a.vbs
C:\DOCUME~1\ADMINI~1\桌面\a2.bat
C:\DOCUME~1\ADMINI~1\桌面\q.txt
C:\DOCUME~1\ADMINI~1\桌面\test.txt
C:\DOCUME~1\ADMINI~1\桌面\_讨论_~1.TXT
C:\DOCUME~1\ADMINI~1\桌面\常用工具
%~aI - 将 %I 扩展到文件的文件属性
打印文件的属性
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
pause
--a------
--a------
--a------
--a------
--a------
dr-------
%~tI - 将 %I 扩展到文件的日期/时间
打印文件建立的日期
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
pause
2007-08-21 12:30
2007-08-22 18:40
2007-08-22 12:31
2007-08-22 17:58
2007-08-19 23:23
2007-08-16 14:28
%~zI - 将 %I 扩展到文件的大小
打印文件的大小
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
pause
76
439
558
64
34614
0
最后一个不是个文件而是一个文件夹,所以显示为0,其实不为0的
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩展到
空字符串
我们先在桌面建立一个temp.txt文件,里面写上这些内容
c:\windows
c:\windows\system32
c:\windows\teett
然后在把这些代码保存为批处理,放在桌面.
FOR /F "delims==" %%i IN (temp.txt) DO @echo %%~$PATH:i
pause
执行后CMD显示如下内容
c:\WINDOWS
c:\WINDOWS\system32
ECHO 处于打开状态。
为什么会这样呢,还有一行c:\windows\teett呢?
我们直接在CMD里输入echo %path% 会显示C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
%%~$PATH:i也就是在文本里寻找匹配这个PATH变量值的内容,如果里面的内容和PATH变量相同,就打印出来
如果不相同,就显示一个空行!
COLOR [attr]
attr 指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 湖蓝色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时
的颜色。这个值来自当前控制台窗口、/T 开关或
DefaultColor 注册表值。
如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令
echo test>test\x.txt 这句的意思是在test文件夹下往x.txt中写入test

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE] 不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename
指定要搜索的文件。

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data]
KeyName [\\Machine\]FullKey
远程机器的机器名 - 忽略默认到当前机器。
远程机器上只有 HKLM 和 HKU。
FullKey ROOTKEY\SubKey
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下注册表项的完整名
/v 所选项之下要添加的值名
/ve 为注册表项添加空白值名<无名称>
/t RegKey 数据类型
[ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN |
REG_DWORD | REG_BINARY | REG_DWORD_LITTLE_ENDIAN |
REG_NONE | REG_EXPAND_SZ ]
如果忽略,则采用 REG_SZ
/s 指定一个在 REG_MULTI_SZ 数据字符串中
用作分隔符的字符
如果忽略,则将 "\0" 用作分隔符
/d 要分配给添加的注册表 ValueName 的数据
/f 不用提示就强行改写现有注册表项
例如:
REG ADD  \\ABC\HKLM\Software\MyCo
添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo
REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead
添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)
REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail
添加一个值(名称: MRU,类型: REG_MUTLI_SZ,数据: fax\0mail\0\0)
REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d %%systemroot%%
添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%)
注意: 在扩充字符串中使用双百分比符号( %% )
设置屏幕每行显示字符数和每屏的行数 例如∶  MODE CONt COLS=80 LINES=25

如果要在批处理中生成一个空的文本文件可以这样写
type nul>a.txt
find的参数:
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
这三个是常用的

if和else必须在一行之上,比较运算符有
大于 gtr
大于等于 geq
等于 equ或者==
小于等于 leq
小于 lss
else和if必须在一行之上,如果有else部分的话,else前面的command部分必须用()括起来。
FINDSTR正则表达式的基本用法
1.findstr . 2.txt 或 Findstr "." 2.txt 
从文件2.txt中查找任意字符,不包括空字符或空行 
====================
2.findstr .* 2.txt 或 findstr ".*" 2.txt 
从文件2.txt中查找任意字符包括空行和空字符 
====================
3.findstr "[0-9]" 2.txt 
从文件2.txt中查找包括数字0-9的字符串或行 
====================
4.findstr "[a-zA-Z]" 2.txt 
从文件2.txt中查找包括任意字符的字符串或行 
====================
5.findstr "[abcezy]" 2.txt 
从文件2.txt中查找包括a b c e z y字母的字符串或行 
====================
6.findstr "[a-fl-z]" 2.txt 
从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。 
====================
7.findstr "M[abc][hig]Y" 2.txt 
从文件2.txt中可以匹配 MahY , MbiY, MahY等….. 
====================
8. ^和$符号的应用 
^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词 
$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词 
====================
9.finstr "[^0-9]" 2.txt 
如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。 
====================
10.findstr "[^a-z]" 2.txt 
同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺
杂着数字就不成了 
====================
11.*号的作用 
前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次
数,*号表示重复的次数为零次或者多次。 
====================
12.findstr "^[0-9]*$" 2.txt 
这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。 
Findstr "^[a-z]*$" 2.txt 
这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了 
如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符
,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者
9j之类的就不可以了。 
=====================
13. "\<…\>"这个表达式的作用 
这个表示精确查找一个字符串,\<sss 表示字的开始位置,sss\>表示字的结束位置 
echo hello world computer|findstr "\<computer\>"这样的形式 
echo hello worldcomputer|findstr "\<computer\>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。 
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了
所学知识的应用:
@echo off
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v 该休息啦.bat /t reg_sz >nul
@echo off
:start
for /f "delims=: tokens=2" %%i in ('systeminfo ^| findstr "系统启动时间"') do set a=%%i
set var=%a:~2,1%
if var geq 2 (goto alert) else goto start
:alert
echo msgbox "该休息啦">alert.vbs
call alert
del /f/q alert.vbs,time.txt
pause

这个是我自己写的,其实也没有什么用就是把自己的东西串一下,从这段代码中我学到了不少东西,在if的时候一定记得要在else前
的command加括号,还有就是^的使用,看看上面,它就是显示它后面的符号,使它们失去功能,还有好多,呵呵,都在程序里啦。
还有就是pan断大小的使用
其中,比较运算符可以是:
equ - 等于
neq - 不等于
lss - 小于
leq - 小于或等于
gtr - 大于
geq - 大于或等于
在一行上写上三个echo.相当于空三行echo.&echo.&echo.这是正确的格式,就是空三行
SET /P verybat= 请选择要进行的操作: 
IF /I "%verybat:~0,1%"=="1" GOTO 1
IF /I "%verybat:~0,1%"=="2" GOTO 2
@echo off 
echo 正在准备生成加密的jpg图片 
echo 请将要加密的图片改名为1.jpg 
echo 请将要密语保存为2.txt 
echo 按任意键开始加密 
pause 
Copy 1.jpg/b + 2.txt/a 3.jpg 
echo 加密结束 
echo 程序将生成加密图片3.jpg 
pause 
以上是图片加密的代码,看看很简单的吧呵呵
用到了copy的参数
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ ...]] [destination [/A | /B]]
source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时,
尽可能使用短文件名。
/Y 不使用确认是否要改写现有目标文件
的提示。
/-Y 使用确认是否要改写现有目标文件
的提示。
/Z 用可重新启动模式复制已联网的文件。
命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。
这可能会被命令行上的 /-Y 替代。除非 COPY
命令是在一个批文件脚本中执行的,默认值应为
在改写时进行提示。
要附加文件,请为目标指定一个文件,为源指定
数个文件(用通配符或 file1+file2+file3 格式)。
 
这些东西是自己当初学习批处理时的总结,现在发表出来,共大家学习



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/353397,如需转载请自行联系原作者
相关文章
|
SQL 关系型数据库 MySQL
批处理|学习笔记
快速学习批处理
批处理|学习笔记
|
Java
什么是批处理
什么是批处理:批处理就是多个dos命令组成的,双击可执行里面的命令。(微软系统) 批处理:桌面文件以双击就能打开,而java一双击是打不开的因为java是一个class文件他需要虚拟机得运行才能打开。
2281 0
|
安全 数据安全/隐私保护 Windows
|
Go 数据安全/隐私保护