1. 批处理常用符号详解:

2023-07-06 16:40:29 浏览数 (1)

1. 批处理常用符号详解:

————————————————————————————————————————————

1、@

一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件,然后运行,比较一下两条echo语句在屏幕上的输出差异: 

代码:

echo a

@pause

@echo b

@pause

执行结果如下: 

引用:

C:Documents and SettingsJM桌面>echo a

a

请按任意键继续...

b

请按任意键继续...

2、%、%%

百分号用在不同的场合,有不同的含义:

① 当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%、%str%。把以下代码保存为批处理文件,运行后观察屏幕显示结果: 

复制内容到剪贴板 

代码:

@echo off

set str=abc

echo 变量 str 的值是: %str%

pause

在屏幕上将显示这样的结果: 

引用:

变量 str 的值是: abc

按任意键继续...

另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如%0、%1,请看演示代码: 

 代码:

@echo off

if defined str goto next

set str=

set /p str=请把文件拉到本窗口后回车:

call "%~0" %str%

pause

exit

:next

cls

echo 本批处理文件完整路径为:"%~0"

echo 拖到本窗口的文件完整路径为:"%~1"

goto :eof

最后, %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %* 用于把命令行中参数传递给批处理。

%0 批处理文件名本身,%1 第一个参数,%9 第九个参数,%* 从第一个参数开始的所有参数。

1.代码:

 @echo off  

     echo cho cho .cho %*

D:>test.bat  */a*  /b  /c

输出结果: test.batecho   */a*echo   /becho    */a* /b /cecho

%0 表示本身文件名:test.bate ,  %*表示整个命令行 */a* /b /c 。

2.代码:

@echo off

echo cho %~f1echo cho %~f0echo %~d0echo %~p0echo %~n0echo %~x0echo %~s0echo %~a0echo %~t0echo %~z0

D:>test.bat "*/a*" /b  /c

输出结果:"*/a*"echo D:1.txta*echo test.batecho D:test.batecho D:echo echo testecho .batecho D:test.batecho --a------echo 2008-12-22 15:49echo 119

解释:

     %I          -   表示输入的参数。 

      %~I        - 删除任何引号(")。

     %~fI        - 将 %I 扩展到一个完全合格的路径名

     %~dI        - 仅将 %I 扩展到一个驱动器号

     %~pI        - 仅将 %I 扩展到一个路径

     %~nI        - 仅将 %I 扩展到一个文件名

     %~xI        - 仅将 %I 扩展到一个文件扩展名

     %~sI        - 扩展的路径只含有短名

     %~aI        - 将 %I 扩展到文件的文件属性

     %~tI        - 将 %I 扩展到文件的日期/时间

     %~zI        - 将 %I 扩展到文件的大小

     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名

                   未被定义,或者没有找到文件,此组合键会扩展到空字符串。

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩展到一个驱动器号和路径

     %~nxI       - 仅将 %I 扩展到一个文件名和扩展名

     %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名

     %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展15:49 2008-12-22

                   到找到的第一个驱动器号和路径。

     %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR

② 出现在 set /a 语句中时,表示两数相除取余数,也就是所谓的模运算,它在命令行窗口和批处理文件中的写法略有差异:在命令行窗口中,只需要单个的%,在批处理文件中,需要连续两个百分号,写成%%。

例如:在命令行窗口中,运行 set /a num=4%2 ,则结果将显示0,因为4除以2的余数为0;如果保存为批处理文件,则此语句将略有改变: 

代码:

@echo off

set /a num=4%%2

echo 4除以2的余数为 %num%

pause

③ 转义符号:如果要显示%本身时,需要在前面用%来转义。例如: 

代码:

@echo off

echo 一个百分号:%%

echo 两个百分号:%%%%

echo 三个百分号:%%%%%%

pause

3、:、::   

① 以:打头的单个的:表示该行是一个标签,它之后的内容是一个标签段,如:test,则表示:test之下的内容是标签段,而test是这个标签段的名,可以用 goto test 、goto :test 跳转到该标签段或用 call :test 调用该子过程;而连续两个冒号打头表示该行内容为注释内容,实际上,:: 是个无效的标签名,:加上空格同样可以起到注释的作用,此时,::的功能和注释命令rem相同;但是,rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行,而如果用::来注释的时候,与::同处一行的所有命令或符号直接被命令解释器忽略掉,无形中提高了注释的兼容性和整个程序的执行效率,并且在众多的命令语句中更显得醒目,所以,注释语句推荐使用::的格式。

② 在 set 语句中:和~同时使用时,: 起到截取字符串的功能。假设 set str=abcde,那么,set var=%str:~0,1% 表示截取字符串abcde的第一个字符;和=同时使用时,起到替换字符串的功能。假设:set str=abc:de,那么,set var=%str:a=1% 则表示把字符串abc:de中的a替换为1,set var=%str::=2% 则表示把字符串abc:de中的:替换为2;

1. 代码:

@echo  off

Set  var=1234567890

Echo   %var:~1%        &::表示舍弃var的前1位。输出结果:234567890

Echo   %var:~0,1%      &::表示舍弃var的前0位之后取1位。输出结果:1

Echo   %var:~1,1%      &::表示舍弃var的前1位之后取1位。输出结果:2

Echo   %var:~0,-1%     & ::表示舍弃var的前0位和最后1位。输出结果:123456789

Echo   %var:~1,-3%     & ::表示舍弃var的前1位和最后3位。输出结果:234567

Echo   %var:~-1%       &::表示取var的最后1位。输出结果:0

Echo   %var:~-4,3%     & ::表示从var的倒数4位开始取3位。输出结果:789

Echo   %var:~-8,-2%    & ::表示从var的倒数8位开始并舍弃最后2位。输出结果:345678

2. 代码:   

@echo off

Set  var=abc:123ef:g123456"hij"789"klm

Echo  %var:"=%          &::表示删除var中的所有"号。输出结果:acb:ef:g123456hij789klm 

Echo  %var::=%          &::表示删除var中的所有:号。输出结果:abc:123efg123456"hij"789"klm

Echo  %var:"=ok%     &::表示替换var中的所有"号为ok字。输出结果:abc:123ef:g123456okhijok789okklm

Echo  %var:*"=%       &::表示删除var中的第一次出现的"号及其前面所有的字符。输出结果:hij"789"klm

Echo  %var:*"=ppp%       &::表示替换var中的第一次出现的"号及其前面所有的字符为ppp。输出结果:ppphij"789"klm

4、~

① 用在 set 语句中,和:同时使用时,起到截取字符串的功能,请参考上一条的解释;

② 用在 set /a 语句中时,它是一元运算符号,表示将操作数字按位取反,例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1

③ 用在for语句中,表示增强for的功能,能够提取到更多的信息。例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。   解释:

5、>、>>、<</div>

①一般而言,>表示用新内容覆盖原文件内容,>>表示向原文件追加内容,此时,它们以重定向符号的身份出现;如果用在 set /a 语句中,则>表示分组,>>表示逻辑移位;

②<从后面中获得输入信息。

代码:

Type 2.txt  > 1.txt  表示把2.txt中的内容覆盖1.txt中的内容。

Echo 2008-12-20 >>1.txt  < 1.txt  10:53  表示把2008-12-20与10:53 附加到1.txt文件中去。

>1.txt echo hello!!

6、|、""

一般而言,它以管道符号的身份出现,表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,简而言之,就是把它之前的输出作为它之后的输入,例如:echo abcd|findstr "b",表示把echo abcd的执行结果,作为findstr "b" 的执行对象,也就是在字符串abcd中查找b字符;如果test.txt中有abcd字符串,则该语句与 findstr "b" test.txt 具有同样的效果;

1.代码:

D:>echo abcd|findstr "b"  & ::表示以"b"为条件,在"abcd"中查找"b". 

D:>dir  | findstr "test"    &::表示查找有"test"的目录。

"": 表示定义成字符型,加上双引号之后命令行中可以有空格符。

比如:set "str=this is a test"   表示str是一个字符型所以要加 ""

7、^

一般而言,^以转义字符的身份出现。因为在cmd环境中,有些字符具备特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功能,如果需要把它们作为字符输出的话,echo> 、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^,因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理;

8、&

一般而言,&表示两条命令或语句同时执行的意思。如 echo a&echo b,将在屏幕上同时显示a和b字符。当几条语句含义近似或作用相同且没有先后的顺序之别时,启用&符号连接这些语句将会增加程序的可读性;& ::  表示注释。   

9、&&、||

这是一对含义截然相反的命令符,&&表示如果它之前的语句成功执行,将执行它之后的语句,而||则表示如果它之前的语句执行失败,将执行它之后的语句;在某些场合,它们能替代 if……else…… 语句;例如: 

代码:

@echo off

md test&&echo 成功创建文件夹test||echo 创建文件夹test失败

pause

效果等同于如下代码: 

代码:

@echo off

md test

if "%errorlevel%"=="0" (echo 成功创建文件夹test) else echo 创建文件夹test失败

pause

10、()

小括号对经常出现在for语句和if语句中,还有一些特定场合;在for和if语句中属于语句格式的要求,例如:

① for %%i in (语句1) do (语句2):在这条语句中,语句1必须用括号对包围,而语句2的括号对则可视情况予以抛弃或保留:如果语句2是单条语句或用&、&&、||等连接符号连接的多条语句,括号对可以抛弃,如果语句2是有逻辑先后关系的多条语句集合,则必须保留括号对,并且,多条语句必须断行书写;例如: 

代码:

@echo off

for %%i in (a b c) do echo %%i&echo --------

pause

也可以改写为: 

代码:

@echo off

for %%i in (a b c) do (

? ? echo %%i

? ? &echo --------

)

pause

② if 条件 (语句1) else (语句2):如果没有else部分,则语句1的括号对可有可无;如果有else部分,则语句1中的括号对必须保留,此时,语句2中的括号对保留与否,和上一点类似。例如: 

代码:

@echo off

if exist test.txt echo 当前目录下有test.txt

pause

代码:

@echo off

if exist test.txt (echo 当前目录下有test.txt) else echo 当前目录下没有test.txt

pause

代码:

@echo off

if exist test.txt (echo 当前目录下有test.txt) else (

? ? echo 当前目录下没有test.txt

? ? pause

? ? cls

? ? echo 即将创建test.txt文件

? ? cd.>test.txt&&echo 成功创建test.txt

)

pause

③ 特定场合下使用括号对,不但可以使代码逻辑清晰,增强可读性,还可能会减少代码量。比如用echo语句构造多行文本内容的时候: 

代码:

@echo off

(

echo 第一行

echo 第二行

echo 第三行

)>test.txt

start test.txt

如果不使用括号对的话,则需要使用如下代码: 

复制内容到剪贴板 

代码:

@echo off

echo 第一行>test.txt

echo 第二行>>test.txt

echo 第三行>>test.txt

start test.txt

11、 、-、*、/

在 set /a 语句中,这些符号的含义分别为:加、减、乘、除。例如:set /a num=1 2-3*4/5。需要注意的是,这些运算符号遵循数学运算中的优先级顺序:先乘除后加减,有括号的先算括号,并且,直接忽略小数点,因此,刚才那个算式的结果是1而不是0或0.6。

另外,有可能会在代码中看到这样的写法:set /a num =1、set /a num-=1、set /a num*=1 和 set /a num/=1,这些表示累加、累减、累乘、累除,步长都是1,展开后的完整写法为:set /a num=num 1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 语句中,变量引用可以忽略百分号对或感叹号对,set /a num=%num% 1 与 set /a num=num 1 等同)

12、equ、neq、lss、leq、gtr、geq:

这几个命令符是if语句中常用到的数值比较符号,取自英文的关键字母,具体的含义为: 

引用:

命令符号? ?? ???含义? ?? ?? ?? ??     ? 英文解释

EQU? ?? ?? ?? ??? 等于? ?? ?? ?? ?? ?    equal

NEQ? ?? ?? ?? ? ? 不等于? ?? ?? ?? ?? ? ?not equal

LSS? ?? ?? ?? ?? ? 小于? ?? ?? ?? ?? ???  less than

LEQ? ?? ?? ?? ?? ? 小于或等于? ?? ?? ?     less than or equal

GTR? ?? ?? ?? ? ? 大于? ?? ?? ?? ?? ???  greater than

GEQ? ?? ?? ? ?? ? 大于或等于? ?? ??  ?       greater than or equal

13、>& 、<& :

>&: 将一个句柄的输出写入到另一个句柄的输入中。 

<&: 从一个句柄读取输入并将其写入到另一个句柄输出中。 

2. ECHO, REM, PAUSE, TITLE, VER, COLOR,  errorlevel, 

md, rd, del, ren, type, copy, xcopy, 

label, vol, date, time, goto, find, more, 

pushd, Subst, assoc, ftype, Sc, 详解。

1.echo :

@? ?? ?? ?? ?? ?? ???#关闭单行回显

echo off? ?? ?? ?? ? #从下一行开始关闭回显

@echo off? ?? ?? ?? ?#从本行开始关闭回显。一般批处理第一行都是这个

echo on? ?? ?? ?? ???#从下一行开始打开回显

echo? ?? ?? ?? ?? ???#显示当前是 echo off 状态还是 echo on 状态

echo.? ?? ?? ?? ?? ? #输出一个"回车换行",一般就是指空白行

Echo                #不显示任何。

echo hello world? ???#输出hello world

"关闭回显"是指运行批处理文件时,不显示文件里的每条命令,只显示运行结果批处理开始和结时,系统都会自动打开回显

2.rem:

rem 和 ::注释命令,注释行不执行操作。一般用::  它后面的包括特殊的符号的一行都不显示。

3.pause:

暂停命令,

运行该命令时,将显示下面的消息:请按任意键继续 . . .    一般用于看清楚屏幕上显示的内容.

Pause >null       #表示暂停,但不显示任意键继续…….

4.title:

设置cmd窗口的标题,

c:>title universal ? ?? ???#可以看到cmd窗口的标题栏变成了universal 。

5.ver:

显示系统版本。

6.color:

设置控制台的前景和背景颜色。

第一个为背景,第二个则为

前景。每个数字可以为以下任何值之一:

    0 = 黑色       8 = 灰色

    1 = 蓝色       9 = 淡蓝色

    2 = 绿色       A = 淡绿色

    3 = 浅绿色     B = 淡浅绿色

    4 = 红色       C = 淡红色

    5 = 紫色       D = 淡紫色

    6 = 黄色       E = 淡黄色

    7 = 白色       F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。

c:>color  1C

7.errorlevel:

程序返回码,

echo %errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0,

一般命令执行出错会设 errorlevel 为1.

8.md:  

创建目录。

md abc? ?? ?? ?? ???#在当前目录里建立子目录 abc.

md d:abc? ?? ?? ?#如果 d:a 不存在,将会自动创建.

9.rd: 

删除目录

rd abc? ?? ?? ?? ???#删除当前目录里的 abc 子目录,要求为空目录

rd /s/q d:temp? ???#删除 d:temp 文件夹及其子文件夹和文件,不需要按 Y 确认

10.del:  

删除文件但不能删除目录。

del d:test.txt? ???#删除指定文件,不能是隐藏、系统、只读文件

del *.*删除当前目录里的所有文件,不包括隐藏、系统、只读文件,要求按 Y 确认

del /q/a/f d:temp*.*删除 d:temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录

del /q/a/f/s d:temp*.*删除 d:temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录

11.ren:

文件重命名

ren 1.txt 2.bak? ???#把 1.txt 更名为 2.bak

ren *.txt *.ini? ???#把当前目录里所有.txt文件改成.ini文件

ren d:temp tmp? ???#支持对文件夹的重命名

12.type:

显示文件内容

type c:boot.ini? ? #显示指定文件的内容,程序文件一般会显示乱码

type *.txt? ?? ?? ? #显示当前目录里所有.txt文件的内容

13.copy,xcopy<增强版>:

拷贝文件

copy c:test.txt d:复制 c:test.txt 文件到 d:

copy c:test.txt d:test.bak复制 c:test.txt 文件到 d: ,并重命名为 test.bak

copy c:*.*复制 c: 所有文件到当前目录,不包括隐藏文件和系统文件不指定目标路径,则默认目标路径为当前目录

copy con test.txt从屏幕上等待输入,按 Ctrl Z 结束输入,输入内容存为test.txt文件con代表屏幕,prn代表打印机

prn代表打印机,nul代表空设备。

copy 1.txt 2.txt 3.txt合并 1.txt 和 2.txt 的内容,保存为 3.txt 文件如果不指定 3.txt ,则保存到 1.txt

copy test.txt 复制文件到自己,实际上是修改了文件日期

xcopy d:mp3 e:mp3 /s/e/i/y复制 d:mp3 文件夹、所有子文件夹和文件到 e: ,覆盖已有文件加 /i 表示如果 e: 没有 mp3 文件夹就自动新建一个,否则会有询问.

14.label 和 vol:

设置卷标

vol? ?? ?? ?? ?? ???#显示卷标

label? ?? ?? ?? ?? ?#显示卷标,同时提示输入新卷标

label c:system? ?? ?#设置C盘的卷标为 system

15.date 和 time:

日期和时间

date? ?? ?? ? #显示当前日期,并提示输入新日期,按"回车"略过输入

date/t? ?? ???#只显示当前日期,不提示输入新日期

time? ?? ?? ? #显示当前时间,并提示输入新时间,按"回车"略过输入

time/t? ?? ???#只显示当前时间,不提示输入新时间

16.goto 和 :   :

跳转命令

:label? ?? ???#行首为:表示该行是标签行,标签行不执行操作

goto label? ? #跳转到指定的标签那一行

17.find :

(外部命令)查找命令

find "abc" c:test.txt在 c:test.txt 文件里查找含 abc 字符串的行如果找不到,将设 errorlevel 返回码为1

find /i "abc" c:test.txt查找含 abc 的行,忽略大小写

find /c "abc" c:test.txt显示含 abc 的行的行数

18.more:

 (外部命令)逐屏显示

more c:test.txt? ? #逐屏显示 c:test.txt 的文件内容

Dir  |more   #把dir执行的结果以逐屏的方式显示。

19.pushd :

切换当前目录

c:>pushd  c:windows

c:windows>

c:>pushd  d:netgear

d:netgear>

20.subst(外部命令):

 将路径与驱动器关联,映射磁盘。

Subst z: d:logs    #把d:logs 映射成z:

subst z: \serverd? ???#这样输入z:就可以访问\serverd了

subst z: /d? ?? ?? ?? ? #取消该映射

subst? ?? ?? ?? ?? ?? ? #显示目前所有的映

21.assoc 和 ftype:

文件关联assoc 设置'文件扩展名'关联,关联到'文件类型',ftype 设置'文件类型'关联,关联到'执行程序和参数'。当你双击一个.txt文件时,windows并不是根据.txt直接判断用 notepad.exe 打开,而是先判断.txt属于 txtfile, '文件类型'再调用 txtfile 关联的命令行 txtfile=%SystemRoot%system32NOTEPAD.EXE %1可以在"文件夹选项"→"文件类型"里修改这2种关联:

assoc? ?? ?? ???#显示所有'文件扩展名'关联

assoc .txt? ?? #显示.txt代表的'文件类型',结果显示 .txt=txtfile

assoc .doc? ?#显示.doc代表的'文件类型',结果显示 .doc=Word.Document.8

assoc .exe? ?#显示.exe代表的'文件类型',结果显示 .exe=exefile

assoc .txt=Word.Document.8   #设置.txt为word类型的文档,可以看到.txt文件的图标都变了

assoc .txt=txtfile              #恢复.txt的正确关联 

ftype? ?? ?? ??? #显示所有'文件类型'关联

ftype exefile? ?#显示exefile类型关联的命令行,结果显示 exefile="%1" %* 

ftype exefile="%1" %*    # 恢复 exefile 的正确关联

修复exe文件关联:

1、搜索cmd.exe,并改名为cmd.com或cmd.scr。

2、运行cmd.com

3、运行下面两个命令:???

ftype exefile="%1" %*????

assoc .exe=exefile??

4、将cmd.com改回cmd.exe 

22.SC:

 用于与服务控制管理器通信的命令行程序。

用法:sc [command] [service name]< option1>< option2>...</div><div><br></div><div> 选项< server> 的格式为 "\ServerName"</div><div> 可以键入 "sc [command]"以获得命令的进一步帮助</div><div> 命令:</div><div> query-----------查询服务的状态, 或枚举服务类型的状态。</div><div> queryex---------查询服务的扩展状态, 或枚举服务类型的状态。</div><div> start-----------启动服务。</div><div> pause-----------发送 PAUSE 控制请求到服务。</div><div> interrogate-----发送 INTERROGATE 控制请求到服务。</div><div> continue--------发送 CONTINUE 控制请求到服务。</div><div> stop------------发送 STOP 请求到服务。</div><div> config----------(永久地)更改服务的配置。</div><div> description-----更改服务的描述。</div><div> failure---------更改服务失败时所进行的操作。</div><div> qc--------------查询服务的配置信息。</div><div> qdescription----查询服务的描述。</div><div> qfailure--------查询失败服务所进行的操作。</div><div> delete----------(从注册表)删除服务。</div><div> create----------创建服务(将其添加到注册表)。</div><div> control---------发送控制到服务。</div><div> sdshow----------显示服务的安全描述符。</div><div> sdset-----------设置服务的安全描述符。</div><div> GetDisplayName--获取服务的 DisplayName。</div><div> GetKeyName------获取服务的 ServiceKeyName。</div><div> EnumDepend------枚举服务的依存关系。</div><div><br></div><div> 下列命令不查询服务名称:</div><div> sc< server> <command>< option></div><div> boot------------(ok | bad) 表明是否将上一次启动保存为</div><div> 最后所知的好的启动配置</div><div> Lock------------锁定服务数据库</div><div> QueryLock-------查询 SCManager 数据库的 LockStatus</div><div>示例:</div><div> sc start MyService</div><div><br></div><div>您想查阅 QUERY 和 QUERYEX 命令的帮助吗? [ y | n ]: </div><div><br></div><div>QUERY 和 QUERYEX 选项:</div><div>如果查询命令带服务名称,将返回该服务的状态其他选项不适合这种情况。如果查询命令不带参数或带下列选项之一,将枚举此服务。</div><div> </div><div> type= 要枚举的服务的类型(driver, service, all)默认 = service)</div><div> state= 要枚举的服务的状态 (inactive, all)(默认 = active)n" </div><div> bufsize= 枚举缓冲区的大小(以字节计)(默认 = 4096) </div><div> ri= 开始枚举的恢复索引号n"(默认 = 0)group= 要枚举的服务组(默认 = all groups)</div><div> </div><div>句法示例</div><div>sc query - 枚举活动服务和驱动程序的状态</div><div>sc query messenger - 显示信使服务的状态</div><div>sc queryex messenger - 显示信使服务的扩展状态</div><div>sc query type= driver - 仅枚举活动驱动程序</div><div>sc query type= service - 仅枚举 Win32 服务</div><div>sc query state= all - 枚举所有服务和驱动程序</div><div>sc query bufsize= 50 - 枚举缓冲区为 50 字节</div><div>sc query ri= 14 - 枚举时恢复索引 = 14</div><div>sc queryex group= "" - 枚举不在组内的活动服务</div><div>sc query type= service type= interact - 枚举所有不活动服务</div><div>sc query type= driver group= NDIS - 枚举所有 NDIS 驱动程序</div><div><br></div><div>代码:</div><div>Sc create pcanywhere binpath= "C:Program FilesSymantecpcAnywherewinaw32.exe" type= share start= auto </div><div>displayname= "pc where hehe" #在本地创建服务。</div><div>Sc \universalbackup create pcanywhere binpath= "C:Program FilesSymantecpcAnywherewinaw32.exe" type= share </div><div>start= auto displayname= "pc where hehe" #在universalbackup创建服务。</div><div>sc description pcanywhere "hehe" #更改aaa的描述为hehe.</div><div>sc config pcanywhere start= disabled binpath= "C:WINDOWSSystem32svchost.exe -k netsvcs" #更改aaa的启动类型:已禁用更改pcanywhere的可执行文件的路径"C:WINDOWSSystem32svchost.exe -k netsvcs"</div><div>sc start pcanywhere #启动pcanywhere服务</div><div>sc stop pcanywhere #停止pcanywhere服务</div><div>sc delete pcanywhere #删除pcanywhere服务</div><div><br></div><div>? 如果参数及其值之间没有空格,(例如,是 type= own,而不是 type=own,后面的参数一样),则操作会失败。</div><div>? 没有服务器名就表示在本地创建服务。</div><div>? type= {own | share | kernel | filesys | rec | adapt | interact type= {own | share}} </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定该服务类型。默认类型为 type= own。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>own</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>服务以其自身的进程运行。不与其他服务共享可执行文件。这是默认设置。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>share</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>服务作为共享进程运行。它与其他服务共享一可执行文件。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>kernel</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>驱动程序。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>filesys</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>文件系统驱动程序。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>rec</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>文件系统识别驱动器(标识在计算机上使用的文件系统)。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>interact</div><div><span class="Apple-tab-span" style="white-space:pre">< /span>服务可以与桌面交互作用,接收用户的输入。交互服务必须在 LocalSystem 帐户下运行。该类型必须与 type= own 或 type= shared(例如,type= interact type= own)结合使用。单独使用 type=?interact 将会产生一个无效参数错误。 </div><div>start= {boot | system | auto | demand | disabled} </div><div><span class="Apple-tab-span" style="white-space:pre">< /span>指定服务的启动类型。默认的启动类型是 start= demand。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>boot</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>由启动引导程序加载的设备驱动器。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>system</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>在核心初始化过程中启动的设备驱动器。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>auto</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>每次计算机重新启动时,甚至没有人登录计算机时,都能自动开始的服务。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>demand</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>必须手动启动的服务。如果没有指定 start=,这就默认值。 </div><div><span class="Apple-tab-span" style="white-space:pre">< /span>disabled</div><div><span class="Apple-tab-span" style="white-space:pre">< /span>不能启动的服务。要启动一个禁用的服务,把启动类型更改为其他值。 </div><div>displayname= DisplayName </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定被用户界面程序用来标识服务的友好名称。</div><div>depend= dependencies </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定必须要在此项服务之前启动的服务名或组名。名称以斜线 (/) 分离开</div><div><br></div><div><br></div><div><br></div><div>3. set 命令使用 详解:</div><div><br></div><div>set的通常用法示例:</div><div>1、set? ? 显示环境变量:</div><div>如:在命令行下输入:</div><div>set? ?? ?? ?? ?? ??#?会显示当前所有的系统环境变量</div><div>set c? ?? ?? ?? ??#会显示所有的以c开头或C开头的变量(也即不区分大小写);</div><div>set com? ?? ?? #会显示所有的以com开头或COM开头的变量(不区分大小写);</div><div>set p=? ?? ?? ??#取消p变量</div><div><br></div><div>2、set? ???设置环境变量,用法示例:set??表达式,</div><div>如:set str=ok</div><div>就是将变量str的值设置成字符串“OK”</div><div>注意:set str=ok></div><div>这个在批处理运行过程中会出错,系统会提示:“命令语法不正确。”</div><div>原因是,因为 变量str 中的值“ok>”的字符">"为一特殊字符,会被系统当成 定向 符处理,所以会运行出错,那如果确实要设置这样的变量str,值为 "ok>"怎么办呢?解决办法有二:将特殊字符转义,转义方法在该特殊字符前加一个“^”,如:set str=ok^> (这种方法比较少用,因为没有多少应用价值)</div><div>常见的解决办法,在set后面将整个表达式用 引号括起来,如:set "str=>"</div><div>动态变量,运行 set 看不到:</div><div>�%? ?? ?? ?? ?? ?? ?#代表当前目录的字符串</div><div>�TE%? ?? ?? ?? ?? ? #当前日期</div><div>%TIME%? ?? ?? ?? ?? ? #当前时间</div><div>%RANDOM%? ?? ?? ?? ???#随机整数,介于0~32767</div><div>%ERRORLEVEL%? ?? ?? ? #当前ERRORLEVEL 值</div><div>%username% #显示当前的用户名</div><div>%CMDEXTVERSION%? ?? ? #当前命令处理器扩展名版本号</div><div>%CMDCMDLINE%? ?? ?? ? #调用命令处理器的原始命令行可以用echo命令查看每个变量值</div><div><br></div><div>如:</div><div>set dir=�%</div><div>Echo %dir%</div><div>输出结果: d:test #当前目录。</div><div><br></div><div>注意变量在 if 和 for 的复合语句里是一次性全部替换的,如</div><div>@echo off</div><div>set p=aaa</div><div>if %p%==aaa (? ? </div><div>??echo %p%? ?</div><div>??set p=bbb? ? </div><div>??echo %p%? ? )</div><div>结果将显示aaaaaa因为在读取 if 语句时已经将所有 %p% 替换为aaa这里的"替换",在 /? 帮助里就是指"扩充"、"环境</div><div>变量扩充"可以启用"延缓环境变量扩充",用 ! 来引用变量,即 !变量名!</div><div>@echo off</div><div>setlocal enabledelayedexpansion</div><div>set p=aaa</div><div>if %p%==aaa (</div><div> echo %p%</div><div> set p=bbb</div><div> echo !p!</div><div>)</div><div>ENDLOCAL</div><div>结果将显示aaabbb</div><div><br></div><div>3、带参数 /a的set? ?? ?? ?数值计算</div><div>用法示例:set /a num=2*10,这样变量num的值将变为:20</div><div><br></div><div>/a 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式</div><div>评估器很简单并以递减的优先权顺序支持下列操作:</div><div>() 在set /a中表示表达式分组。 例如Set /a var=(1 2)*5-3/4</div><div>, 在set /a中表示连续表达式的分割符。 set /a var=1 2,num=3*5,str=100/50 。</div><div>| 在set /a中表示按位或。Set /a var=5 "|" 12 ,5的二进制:101,12的二进制:1100 取:1101 结果:13 。按位取其1.</div><div> 【 %= 两边加上 " 防止 % 被转义,下同。】 </div><div>^ 在set/a中表示按位异或。Set /a var=5 "^" 1 ,5的二进制:101,12的二进制:1100 取:1001 结果:9 。 按位取不相同。</div><div>& 在set/a中是按位与。 Set /a var=5 "&" 12 ,5的二进制:101,12的二进制:1100 取:100 结果:4 。 按位取相同。</div><div>~ 在set/a中表示将操作数按位取反。Set /a var=~2 结果:-3</div><div>! 在set /a中一元运算符,表示逻辑非。比如set /a a=!0,这时a就表示逻辑1。就两个数值0和1.</div><div>>> 在set /a中表示逻辑右移。Set /a var=5 ">>" 2,5的二进制:101,右移动2位, 取:00000001 结果:1 。 按位向右移动。</div><div><< 在set /a中表示逻辑左移。 Set /a var=5 "<<" 2,5的二进制:101,左移动2位, 取:00010100 结果:20 。 按位向右移动。</div><div>%= 在set /a中的二元运算符。例如set /a a"%="b表示将a除以b的余数赋值给a。 </div><div>^= 在set /a中的二元运算符。例如set /a a"^="b表示将a与b按位异的结果赋值给a。 </div><div>&= 在set /a中的二元运算符。例如set /a a"&="b表示将a与b按位与的结果赋值给a。 </div><div>|= 在set /a中的二元运算符。例如set /a a"|="b表示将a与b按位或的结果赋值给a。 </div><div><<= 在set /a中的二元运算符。例如set /a a"<<="b表示将a按位左移b位的结果赋值给a。 </div><div>>>= 在set /a中的二元运算符。例如set /a a">>="b表示将a按位右移b位的结果赋值给a。</div><div>% 在set /a中的二元运算符,表示算术取余。</div><div>* 在set /a中的二元运算符,表示算术乘法。 </div><div>- 在set /a中: 1.表示一个负数。 2.表示算术减运算。</div><div> 在set/a中的二元运算符,表示算术加法。 </div><div>/ 在set/a中表示除法。 </div><div>= 在set/a中表示算术运算,比如"set /a x=5-6*5"。</div><div> = 在set /a中的二元运算符。例如set /a a =b表示将a加上b的结果赋值给a。 </div><div>-= 在set /a中的二元运算符。例如set /a a-=b表示将a减去b的结果赋值给a。</div><div>*= 在set /a中的二元运算符。例如set /a a*=b表示将a乘以b的结果赋值给a。</div><div>/= 在set /a中的二元运算符。例如set /a a/=b表示将a加上b的结果赋值给a。</div><div><br></div><div>代码:</div><div>赋值为数字时,还可以连续赋值。</div><div>如:set var=12 set num=3 set str=100 这时,可以利用set /a 进行连续赋值,只要用逗号分开每个变量名就可以了。</div><div>如: set /a var=12,num=3,str=100 利用逗号,在计算时也可以这样连续。</div><div>如: set /a var=1 2,num=3*5,str=100/50 </div><div>另外:值得注意一点的是,在set /a 计算时,可以省略变量的%号或!号,极为方便。</div><div>如: </div><div>@echo off</div><div>set var=100</div><div>set num=220 set /a str=var-num (这句,实际就是set /a str=%var%-%num%)</div><div>echo %num%</div><div>pause </div><div>取余。 符号 %% :</div><div>@echo off</div><div>set /a var=200%a &:: %%在命令行窗口中,只需要单个的%,在批处理文件中,需要连续两个百分号,写成%%。</div><div>echo %var%</div><div>pause</div><div>结果是17 其实就是用200除以61的余数。需注意的是 若需取余的数,比被取的小,那么结果就是需取余的数。如: </div><div>@echo off</div><div>set /a var=10%< /div><div>echo %var%</div><div>pause</div><div>结果等于 10 简单的理解为: %% 号左边的数字比又边的小结果就仍是左边的数字。</div><div><br></div><div>4、带参数 /p 的set? ? 等待用户输入:</div><div>代码:</div><div>1.</div><div>@echo off</div><div>set /p str=请输入你想输入的字符:</div><div>echo 你输入的字符串为:%str%</div><div>pause>nul</div><div><br></div><div>2.</div><div>@echo off </div><div>:c </div><div>set s= </div><div>:: 用于清除返回之后的变量。=后面不能有空格。</div><div>set /p s=请输入: </div><div>if (^%s%)==(^") goto c </div><div>if "%s%"=="" goto do_01 </div><div>goto Usual </div><div><br></div><div>:do_01 </div><div>echo 回车键被按下 </div><div>pause </div><div>goto :eof </div><div><br></div><div>:Usual </div><div>echo 既不是引号,也不是回车 </div><div>pause</div><div><br></div><div>set /p的特殊应用(set /p=<nul相当于输出字符并不带回车,包括后面的set /p=<nul都是显示在同一行,echo. 表示回车),用法示例: </div><div>代码:</div><div>@echo off</div><div>set/p=1 1^=2< nul</div><div>set/p= < nul</div><div>set/p=1 2^=3< nul</div><div>echo.</div><div>set/p=2 1^=3< nul</div><div>set/p= < nul</div><div>set/p=2 2^=4< nul</div><div>pause</div><div><br></div><div>5、利用set截取字符:</div><div><br></div><div>在 set 语句中:和~同时使用时,: 起到截取字符串的功能。</div><div><br></div><div><br></div><div><br></div><div>4. goto命令详解 :</div><div><br></div><div>一般的批处理命令,都是按照自上而下的流程逐行执行的,也就是说,只有第一行的命令执行了之后,才可能执行第二行,第二行执行完之后,再执行第三行……如此依次执行。</div><div>如果对不同的情况,需要执行不同的既定操作,若还是按照常规的执行流程的话,是无法完成任务的,这个时候,就需要引入流程跳转的概念,动用流程跳转语句 goto 了。流程跳转的含义是:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块。</div><div>先来看个例子:假设需要判断用户输入的是A还是B,代码可以写成这样: </div><div><br></div><div>代码:</div><div>@echo off</div><div>set /p input=请输入字母A或B:</div><div>if "%input%"=="A" goto A</div><div>if "%input%"=="B" goto B</div><div>pause</div><div>exit</div><div><br></div><div>:A</div><div>echo 您输入的字母是A</div><div>pause</div><div>exit</div><div><br></div><div>:B</div><div>echo 您输入的字母是B</div><div>pause</div><div>exit</div><div>按照一般的执行流程,所有的代码都会自上而下逐行执行一次,结果将显示"您输入的字母是A"和"您输入的字母是B"这两行内容,很显然,这是达不到我们的要求的;但是,实际的结果是:如果您输入的字母非A即B,则结果只会显示"您输入的字母是A"或者"您输入的字母是B";也就是说,代码的执行顺序发生了改变,不再一成不变地自上而下逐行执行了:当输入字母A后,将执行第一条if语句,此条语句执行后,将跳转到标签段:A,从而绕过了第一条if语句和:A之间的所有代码行;当输入字母B后,将执行头两条if语句,当执行完第二条if语句后,将跳转到标签段:B,从而绕过了第二条if语句和:B之间的所有代码行。</div><div><br></div><div>从上面的例子可以看到,要让goto语句起作用,还需要:A或:B之类的标签段的配合。所谓的标签段,就是这样的一些代码块:在首行上以单个冒号打头,其后紧跟一串字符,第二行及其之后的所有行为代码语句行。在这里,第一行的冒号是标签标志,紧跟它之后的字符串是标签名,两者合称标签。goto语句后面的部分为标签名,指引着该语句执行完之后该跳到转何方,标签则接收goto语句的跳转指令,引导着goto语句的后续操作。goto语句和标签互相呼应,在实现流程跳转时相辅相成,缺一不可。</div><div><br></div><div>下面说一下使用跳转语句goto的注意事项:</div><div><br></div><div>1、goto语句和标签要互相呼应,不能只有goto语句而没有相应的标签段,否则,程序将找不到相应的标签段而直接退出;只有标签段而没有goto语句是允许的,但不能实现流程跳转功能,从代码精简的角度来看,有标签段而没有goto语句,则此标签是多余的,可以精简掉;</div><div>2、若有多个标签段,则需要注意标签段之间是否需要添加合适的退出语句来终止程序继续向下执行,这是很多新手很容易犯错的地方,需要谨慎。以上面这段代码为例,如果去掉:A和:B之间的exit语句,那么,当输入字母A之后,结果将同时显示"您输入的字母是A"和"您输入的字母是B"这两行内容,而保留exit语句将只会在显示"您输入的字母是A"后,按任意键推出批处理程序,因为批处理是自上而下逐行执行的,即使用goto语句跳转之后,在新的位置上,这一执行流程仍然会保持,直到碰上另一个流程跳转语句,执行过程并不会在两个标签段之间自动终止。</div><div>3、标签名只可以使用常量,而不能使用变量;</div><div>4、若有同名的标签段,将执行位于最顶层的标签段,其后的标签段是否得到执行,将视具体的情况加以处理。</div><div>5、goto :eof </div><div> :EOF,这个标签将控制转移到当前批脚本文件的结尾。不定义就退出批脚本文件,相当于exit命令。</div><div><br></div><div><br></div><div>5. if命令详解 :</div><div><br></div><div>If:用来进行条件判断。翻译过来的意思就是:如果符合某一条件,便执行后面的命令。</div><div><br></div><div>1. If [not] string1==string2 (command) else (command) :</div><div>检测字符串(注意,用if检测字符串是否相等的时候,后面用的不是“=”,而是“==”): </div><div>判断变量var是否是空值,空值用""表示。</div><div>代码:</div><div>@echo off</div><div>set "str=this is a test"</div><div>REM 检测变量%str%是否等于test,如果相等,显示OK,否则显示NO</div><div>if "%str%"=="test" (echo OK) else echo NO</div><div>pause>nul</div><div><br></div><div>2. If [not] exist filename (command) else (command) :</div><div>检测文件是否存在。</div><div>代码:</div><div>@echo off</div><div>If not exist d:test10.txt (copy c:10.txt d:test) else (</div><div> del d:test10.txt</div><div> copy c:10.txt d:test </div><div> ) </div><div>Pause>nul</div><div><br></div><div> 3. If [not] errorlevel number (command) else (command) :</div><div>检测上一个命令执行是否成功。</div><div> DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成</div><div>立,运行命令,否则运行下一句。</div><div>实例:</div><div>@echo off</div><div>dir /b> 1.txt</div><div>if errorlevel 3 echo 3</div><div>if errorlevel 2 echo 2</div><div>if errorlevel 1 echo 1</div><div>if errorlevel 0 echo 0</div><div>pause</div><div><br></div><div>返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式: </div><div>实例:</div><div>@ECHO OFF </div><div>dir /b> 1.txt</div><div><br></div><div>if errorlevel 0 set el=0 </div><div>if errorlevel 1 set el=1 </div><div>if errorlevel 2 set el=2 </div><div>if errorlevel 3 set el=3 </div><div>if errorlevel 4 set el=4 </div><div>if errorlevel 5 set el=5 </div><div>echo %el%</div><div>pause</div><div><br></div><div>4.综合实例:</div><div>1. @echo off</div><div>:error </div><div>set input=</div><div>set /p input=请输入字母A或B:</div><div>if "%input%"=="A" (</div><div> goto A</div><div> ) else (</div><div> if "%input%"=="B" (</div><div> goto B ) else (</div><div> echo 输入出错</div><div> goto error ) </div><div> )</div><div> </div><div>pause</div><div>EXIT</div><div><br></div><div>:A</div><div>echo 您输入的字母是A</div><div>pause</div><div>exit</div><div><br></div><div>:B</div><div>echo 您输入的字母是B</div><div>pause</div><div>exit</div><div> </div><div>2. @echo off</div><div>:name_b </div><div>title 批处理发送邮件→1/5 </div><div>cls </div><div>set name= </div><div>set /p name=请输入邮箱用户名: </div><div>if *%name%==* goto name_b& ::检测用户是否有输入。</div><div>echo %name%|findstr "^[0-9a-zA-Z_-=]*$" >nul ||(echo 语法错误,任意键返回&pause>nul&goto name_b)</div><div>echo 必须保证和上面base64编码前的是同一用户名 </div><div><br></div><div><br></div><div><br></div><div>5. If string1 运算符 string2 command :</div><div>检测数值:(注意,批处理中大于符号不能用:“>”,而用"gtr",其它的也类似)</div><div>比较运算符一览:</div><div>EQU - 等于</div><div>NEQ - 不等于</div><div>LSS - 小于</div><div>LEQ - 小于或等于</div><div>GTR - 大于</div><div>GEQ - 大于或等于</div><div> 详解: equ、neq、lss、leq、gtr、geq:</div><div>检测数值 20 是否大于 15演示代码:</div><div>代码:</div><div>@echo off</div><div>set /a num1=20</div><div>set /a num2=15</div><div>if %num1% gtr %num2% echo %num1%大于%num2%</div><div>if %num1% EQU %num2% echo %num1%等于%num2%</div><div>if %num1% LSS %num2% echo %num1%小于%num2%</div><div>pause>nul</div><div><br></div><div>if 比较字符串与比较数字 之间的区别:</div><div>这种区别体现在引号"上面,看下面对数字的比较。 </div><div>代码:</div><div>if "12" lss "4" echo 12竟然小于4?</div><div>运行之,奇怪,结果是:12竟然小于4?if的逻辑混乱了吗?当然不是,测试下面的代码: </div><div>代码:</div><div>if 12 lss 4 echo 12竟然小于4?</div><div>无任何返回结果,当然是因为条件不成立,谁能理直气壮地告诉我12小于4?那么,从上面的两个测试代码中了解到什么了吗?如果要比较的两个元素加了"",那么会被当成是字符的比较。这样的比较,它的流程是:先比较两个元素的首位,如果首位相同,再比较第二位,如果第二位相同,再比较第三位,依此。所以:if "12" lss "4" echo 12小于4</div><div>实质是1与4的比较,1当然小于4,所以执行了后面的命令。而两个元素都不加"",则会当作是数字的比较,此时与我们的逻辑思维相吻合。测试以上两代码,得出这个结论: </div><div>引用:</div><div>要比较的两元素如果加了"",会被当作是字符串的比较,不加"",则是数字之间的比较。</div><div>如果是个位数之间的比较,加与不加引号""都可行。</div><div>上面所说的"12"小于"4"的现象只出现在比较运算符lss、leq、gtr、geq中,equ(等于)或==(等于)、neq(不等于)中并无此“矛盾”现象。</div><div><br></div><div>6.If defined variable command:</div><div><br></div><div>if defined 用法:</div><div>如defined释义一样,它的作用就是检测一个变量是否被定义,所谓定义,即是一个变量已经被赋值。反之未定义,即是空值。 </div><div>代码:</div><div>set "var=test"</div><div>if defined var (echo 变量var已经被定义,它的值是%var%) else echo var未被赋值。</div><div>set "var="</div><div>if not defined var (echo var未被赋值。) else (echo 变量var已经被定义,它的值是%var%) </div><div>pause</div><div>需注意,var不能用%%闭合,否则,要检测 是否被定义的是 var的值test。</div><div>代码:</div><div>@echo off</div><div>set "str1=ok"</div><div>set "str2=no"</div><div>if defined str1 echo str1已经被定义</div><div>if defined str2 echo str2已经被定义</div><div>if defined str3 (echo str3已经被定义) else echo str3 没有被定义</div><div>pause>nul</div><div><br></div><div>注意问题:</div><div>问题一: 空格问题。</div><div>@echo off</div><div>setlocal EnableDelayedExpansion</div><div>set "var=ab cd"</div><div>if defined !var! (echo var 被定义了) else echo var 没有被定义</div><div>endlocal</div><div>pause</div><div>检测含空格的变量名是否被定义过,需开启延迟变量,?并把 if defined 这里的所有空格都用变量来代替?或是将变量名赋值给别的变量,再用!!来引用这个新的变量。</div><div><br></div><div>问题二: 变量的截取。</div><div>@echo off</div><div>set a=fff</div><div>set var=abc</div><div>if defined %var:~0,1% (echo a 被定义了) else echo a 没有被定义</div><div>pause</div><div>判断的变量名需要使用变量的字符截取功能时,则与上面的正好相反。</div><div>?即:不能使用!!来引用变量。即使是在for中也是一样。</div><div><br></div><div><br></div><div>6. for命令详解:</div><div><br></div><div>1.for语句的基本用法:</div><div>? 在cmd窗口中:for %I in (command1) do command2</div><div>在批处理文件中:for %%I in (command1) do command2</div><div> 之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。</div><div><br></div><div>? for语句的基本要素都有些什么: </div><div>1、for、in和do是for语句的关键字,它们三个缺一不可;</div><div>2、%%I是for语句中对形式变量的引用,就算它在do后的语句中没有参与语句的执行,也是必须出现的;</div><div>3、in之后,do之前的括号不能省略;</div><div>4、command1表示字符串或变量,command2表示字符串、变量或命令语句;</div><div>5、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式 变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0 ~%%9中的任意一个;</div><div>6、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号或等号分隔;</div><div>7、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束;</div><div><br></div><div>? 代码:</div><div>@echo off</div><div>for %%I in (bbs,bathome,cn) do echo %%I</div><div>pause</div><div>输出结果:</div><div>Bbs</div><div>Bathome</div><div>cn</div><div><br></div><div>1、显示结果分成了3行(不算最后一行中文提示);</div><div>2、每一行都从逗号处被切分;</div><div>如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和example2的执行结果别无二致。</div><div><br></div><div>现在,我们来分析一下[code2]代码中for语句的执行过程:</div><div>首先,for语句以逗号为分隔符,把 bbs,bathome,cn 这个字符串切分成三个元素:bbs、bathome和cn,由此决定了do后的语句将会被执行3次;</div><div>然后,第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为bbs,因此,第一次执行的结果,将会在屏幕上显示bbs这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 bathome 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。</div><div><br></div><div>代码:</div><div>@echo off</div><div>set str=c d e f g h i j k l m n o p q r s t u v w x y z</div><div>echo 当前硬盘的分区有:</div><div>for %%i in (%str%) do if exist %%i: echo %%i:</div><div>pause</div><div>这段代码能检测硬盘都有哪些分区,包括U盘和移动硬盘的分区,当光驱中有盘的时候,也会被列出来.</div><div><br></div><div>代码:</div><div>@echo off</div><div>for %%i in (??.txt) do echo "%%i"</div><div>pause</div><div>列出当前目录中只用两个字符作为文件名的文本文件。</div><div><br></div><div><br></div><div>2.for /d 语句的基本用法: </div><div>/D参数(常用来查询 当前目录 或者 指定目录的文件夹)</div><div>基本用法:FOR /D %variable IN (set) DO command [command-parameters]</div><div>如:查询F盘根目录下的文件夹 </div><div>代码:</div><div>@echo off</div><div>for /d %%i in (f:*) do echo %%i</div><div>pause>nul</div><div>如果省略 括号中的 "f:",则会直接查询 批处理 所在目录的文件夹,假设 本批处理文件 保存在:F:test下</div><div>运行以下批处理代码,将会查询 F:test下的文件夹 </div><div>代码:</div><div>@echo off</div><div>for /d %%i in (*) do echo %%i</div><div>pause>nul</div><div><br></div><div>3.for /r 语句的基本用法: </div><div>/r参数 :</div><div>基本用法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]</div><div>检查以 [drive:]path 为根的目录树中,所有符合(set)的文件或者文件夹。如果在 /R 后没有指定目录,则使用当前</div><div>目录。如果集仅为一个单点(.)字符,则枚举该目录树。</div><div>用法示例:</div><div>枚举F:盘下所有的 文件 </div><div>@echo off</div><div>for /r f: %%i in (*) do echo %%i</div><div>pause>nul</div><div><br></div><div>枚举F:盘下所有的 .bat文件(包括子目录),则: </div><div>@echo off</div><div>for /r f: %%i in (*.bat) do echo %%i</div><div>pause>nul</div><div><br></div><div>如果省略以上代码中的F:,则会列举当前目录 所有符合(set)的文件</div><div>如:列举批处理所在目录的 所有 批处理文件(包括子目录) :</div><div>@echo off</div><div>for /r %%i in (*.bat) do echo %%i</div><div>pause>nul</div><div><br></div><div>4.for /L 语句的基本用法: </div><div>参数/L 可以理解为 "list" 的意思,代表一个数列。</div><div>代码:</div><div>@echo off</div><div>for /l %%i in (1 1 5) do echo %%i</div><div>For /l %%i in (5 -1 1) do echo %%i</div><div>pause</div><div>显示结果也为:1 2 3 4 5 5 4 3 2 1 (每字一行).</div><div>它的意思和上面的意思差不多,但是括号中的对象却不需要 写成 1 2 3 4 5 的形式了,而是:1 1 5,因为它启用了参数 /L ,就是告诉for,这个括号里的对象是个数列,怎样的数列?就是以 1 开始,步长 为1 ,结束值为5的一个等差数列,再举个实例:</div><div>::显示 从 10 - 20 的所有偶数:</div><div>@echo off</div><div>for /l %%i in (10 2 20) do echo %%i</div><div>pause</div><div><br></div><div>5.for /f 语句的基本用法: </div><div><br></div><div>FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]</div><div>FOR /F ["options"] %variable IN ("string") DO command [command-parameters]</div><div>FOR /F ["options"] %variable IN ('command') DO command [command-parameters]</div><div>(file-set) : 文件名。</div><div>("string") : 字符串。</div><div>('command') : 运行命令之后的结果。</div><div>"options" :表示选项,有以下五个:</div><div> eol=c <c可以是任何字符。此选项表示忽略以c开头的一行,在""选项中只允许出现一次></div><div> skip=n <n表示行数。此选项指在文件开始时所忽略的n行数,也包括n></div><div> delims=xxx < x可以是任何字符。此选项表示 以 x分隔符分隔一行中的内容,默认取分隔符前的字符串,可以有多个分隔符></div><div> tokens=x,y,m-n,* <些选项表示提取以分隔符分隔的一行中的内容,x,y,m-n是数字,表示提取第几个字符串。</div><div><br></div><div>? 为解析文本而生:</div><div> 提取文本信息,则是for /f的拿手好戏:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样,for /f 都会想方设法帮你办到:</div><div>例如:</div><div>假如当前目录有个文本文件test.txt,内容如下:</div><div>Aaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbb</div><div>Cccccccccccccccc dddddddddddddddddd</div><div>Eeeeeeeeeeeeee ffffffffffffffffffffffffffffff</div><div><br></div><div>代码:</div><div>@echo off</div><div>for /f %%i in (test.txt) do echo %%i</div><div>for %%i in (test.txt) do echo %%i</div><div>pause</div><div><br></div><div>输出结果:</div><div>Aaaaaaaaaaaaaa</div><div>Cccccccccccccccc</div><div>Dddddddddddddd</div><div>Test.txt</div><div>有/f参数表示提取test.txt中的内容来作为%%i中的变量,没的/f参数表示把test.txt作为%%i中的变量。</div><div> 无论for语句做何种变化,它的执行过程仍然遵循基本的for流程:依次处理每个元素,直到所有的元素都被处理为止。只不过在for /f语句中,这里的元素是指文件中的每一行,也就是说,for /f 语句是以行为单位处理文本文件的。这是一条极为重要的规则,在上一章中也强调过它的重要性,希望在接下来的学习过程中,你能时刻牢记这一原则,那么,很多问题将会迎刃而解。以下是验证这一说法的演示代码(在[code4]的基础上添加了&pause语句):</div><div>@echo off</div><div>for /f %%i in (test.txt) do echo %%i&pause</div><div>pause</div><div><br></div><div><br></div><div>? 忽略与跳转:eol=c skip=n :</div><div>例如:</div><div>6.txt 文本文件内容:</div><div> aaaa!bbbb.eeee</div><div> bbbb!ccccc.ffffff</div><div>Gggggg.hhhhhhh</div><div>代码:</div><div>@echo off</div><div> for /f "eol=b" %%i in (6.txt) do echo %%i</div><div> for /f "skip=2" %%i in (6.txt) do echo %%i</div><div>pause</div><div>输出结果:</div><div>aaaa!bbbb.eeee</div><div>Gggggg.hhhhhhh</div><div>Gggggg.hhhhhhh</div><div><br></div><div> eol=b 此选项表示忽略以c开头的一行。</div><div> skip=2 选项指在文件开始时所忽略的2行数。</div><div><br></div><div>? 切分字符串的利器:delims=符号列表<包括任何的字符></div><div>例如:</div><div>"delims=,",它的含义是:以逗号作为被处理的字符串的分隔符号。</div><div>需要注意的是:如果没有指定"delims=符号列表"这个开关,那么,for /f 语句默认以空格键或跳格键作为分隔符号。请把[txt1]中不同位置上的标点符号改为空格或跳格。</div><div><br></div><div>@echo off</div><div>for /f "delims=.," %%i in (6.txt) do echo %%i</div><div>pause</div><div>输出结果:</div><div> aa</div><div> bb</div><div>执行过程是:逐行读取6.txt中的内容,以点号和逗号切分每一行的内容(不存在点号和逗号的行,则不再切分,为了描述的方便,我们把被点号或逗号切分的一个一个的字符串片段,称之为节),然后,for /f 会提取第一节的内容作为最终结果,显示在屏幕上。需要注意的是,在这里,所有行的字符串被切分成了两个以上的节,但是,[code7]的代码只会提取第一节字符串的内容,因为 for /f 语句默认只提取第一节的字符串。</div><div><br></div><div>? 定点提取:tokens=</div><div>tokens= 后面一般跟的是数字,如 tokens=2,也可以跟多个,但是每个数字之间用逗号分隔,如 tokens=3,5,8,它们的含义分别是:提取第2节字符串、提取第3、第5和第8节字符串。注意,这里所说的“节”,是由 delims= 这一开关划分的,它的内容并不是一成不变的。</div><div>下面来看一个例子:</div><div>文本文件6.txt:</div><div> aa,bb,cc,dd,ee,ff</div><div><br></div><div>代码:</div><div>@echo off</div><div>for /f "delims=, tokens=3" %%i in (6.txt) do echo %%i</div><div>for /f "delims=, tokens=2,5" %%i in (6.txt) do echo %%i %%j</div><div>for /f "delims=, tokens=2,3-5" %%i in (6.txt) do echo %%i %%j %%k %%l</div><div>for /f "delims=, tokens=2,*" %%i in (6.txt) do echo %%i %%j</div><div>pause</div><div><br></div><div>输出结果:</div><div> cc</div><div> bb ee</div><div> bb cc dd ee</div><div> bb cc,dd,ee,ff</div><div><br></div><div>for /f 语句对这种情况做如下规定:</div><div>如果 tokens= 后面指定了多个数字,如果形式变量为%%i,那么,第一个数字指代的内容用第一个形式变量%%i来接收,第二个数字指代的内容用第二个形式变量%%j来接收,第三个数字指代的内容用第三个形式变量%%k来接收……第N个数字指代的内容用第N个形式变量来接收,其中,形式变量遵循字母的排序,第N个形式变量具体是什么符号,由第一个形式变量来决定:如果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式变量用的是%%x,那么,第二个形式变量就是%%y。</div><div><br></div><div>如果要提取的内容是连续的多“节”的话,那么,连续的数字可以只写最小值和最大值,中间用短横连接起来即可,比如 tokens=1,2,3,4,5 可以简写为 tokens=1-5 。</div><div>还可以把这个表达式写得更复杂一点:tokens=1,2-5,tokens=1-3,4,5,tokens=1-4,5……怎么方便就怎么写吧。</div><div><br></div><div>[6.txt] 的内容被切分,切分符号为逗号,当切分完第一节之后,切分动作不再继续下去,因为 tokens=1,* 中,星号前面紧跟的是数字1;第一节字符串被切分完之后,其余部分字符串不做任何切分,整体作为第二节字符串,这样,[txt2]就被切分成了两节,分别被变量%%i和变量%%j接收。</div><div><br></div><div><br></div><div>? usebackq的作用:</div><div>例子,大家可以看下理解,本人琢磨这个usebackq最终结论</div><div>@echo off</div><div>for /f "tokens=1" %i in ("123 456") do echo %i</div><div>@REM 系统把双引号里面的 123 456 当成一个字符串。</div><div>for /f "usebackq tokens=1" %i in ("123 456") do echo %i</div><div>@REM 系统把双引号里面的 123 456 当成一个文件名</div><div><br></div><div>for /f "tokens=1" %i in (`123 456`) do echo %i??错误的在CMD下执行会先显示系统找不到文件 `123</div><div>@REM 系统把双引号里面的 123 456 当成一个文件名</div><div>for /f "usebackq tokens=1" %i in (`123 456`) do echo %i</div><div>@REM 系统把双引号里面的 123 456 当成一条命令来执行。</div><div><br></div><div>for /f "tokens=1" %i in (123 456) do echo %i</div><div>@REM 系统把双引号里面的 123 456 当成一个文件名</div><div>for /f "usebackq tokens=1" %i in (123 456) do echo %i</div><div>@REM 系统把双引号里面的 123 456 当成一个文件名</div><div><br></div><div>在一个for /f语句中前面没加"usebackq"的话, 后面in()括号中的文件做为文件处置</div><div>如果在for /f语句前面加上"usebackq"??的话,系统还会把in ()括号中东西当文件来执行</div><div>如果for /f语句中前面加了"usebackq" 后面in (" ")中的文件打双引号的话系统会取反意思,将其变为文件来执行</div><div>如果for /f语句前没没加 "usebackq"??后面in (" ") 中系统会把它当字符串处理,取本来的意思</div><div>如果for /f 语句中前面加了"usebackq" 后面in (' ')中系统会把它原来代表命令的''符号取反意思,结果系统把它()中当成字符串来处理</div><div>如果for /f 语句中前面没加"usebackq" 后面in (' ')中系统会以默认的意思,将(' ') 中文件做为命令执行</div><div>如果for /f 语句中前面加了"usebackq" 后面in (` `)加了反`号系统会把括号中的东西作为命令来执行</div><div>如果for /f 语句中前面没加"usebackq" 后面in (` `)加了反`号系统会把括号中的东西还会做为文件来执行。==(),</div><div><br></div><div><br></div><div>经典实例:</div><div>? @echo off& ::测试单网段内所有计算机的连通性,并且取其IP。</div><div>setlocal enabledelayedexpansion &::开起延迟变量。</div><div>for /l %%a in (1,1,10) do (</div><div> ping -n 1 192.168.201.%%a|find /I "reply">%%b</div><div> for /f "tokens=3" %%c in (%%b) do (</div><div> set var=%%c</div><div> echo !var:~0,-1!</div><div> ) </div><div> )</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>7. findstr命令详解:</div><div>在文件中寻找字符串。</div><div><br></div><div>findstr [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]</div><div> [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]</div><div> strings [[drive:][path]filename[ ...]]</div><div><br></div><div> /B 在一行的开始配对模式。</div><div> /E 在一行的结尾配对模式。</div><div> /L 按字使用搜索字符串。</div><div> /R 将搜索字符串作为一般表达式使用。</div><div> /S 在当前目录和所有子目录中搜索匹配文件。</div><div> /I 指定搜索不分大小写。</div><div> /X 打印完全匹配的行。</div><div> /V 只打印不包含匹配的行。</div><div> /N 在匹配的每行前打印行数。</div><div> /M 如果文件含有匹配项,只打印其文件名。</div><div> /O 在每个匹配行前打印字符偏移量。</div><div> /P 忽略有不可打印字符的文件。 </div><div> /OFF[LINE] 不跳过带有脱机属性集的文件。</div><div> /A:attr 指定有十六进位数字的颜色属性。请见 "color /?"</div><div> /F:file 从指定文件读文件列表 (/ 代表控制台)。</div><div> /C:string 使用指定字符串作为文字搜索字符串。</div><div> /G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。</div><div> /D:dir 查找以分号为分隔符的目录列表。</div><div> strings 要查找的文字。</div><div> [drive:][path]filename 指定要查找的文件。</div><div> </div><div>除非参数有 /C 前缀,请使用空格隔开搜索字符串。</div><div>例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或</div><div>"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找</div><div>"hello there"。</div><div><br></div><div>? 用空格分隔多个搜索字符串,除非参数以 /c 为前缀。要在文件 x.y 中搜索“hello”或“there”,请键入:</div><div>findstr "hello there" x.y</div><div>? 要在文件 x.y 中搜索“hello there”,请键入:</div><div>findstr /c:"hello there" x.y</div><div>? 要查找文件 Proposal.txt 中出现的所有单词“Windows”(首字母 W 大写),请键入:</div><div>Findstr Windows proposal.txt</div><div>? 要搜索包含单词 Windows 的当前目录和所有子目录中的每个文件,不考虑字母大小写,请键入如下命令:</div><div>findstr /s /I test e:softwaretest*.*</div><div>? 要查找包含字“FOR”的所有行(前面可有任意数量的空格,如:计算机程序中的循环),并包括每次出现的行号,请键入:</div><div>findstr /b /n /c:"*FOR" *.bas</div><div>? 如果要在相同组文件中搜索几个不同项目,请创建在新行上包含每个搜索标准的文本文件。也可以列出要在文本文件中搜索的确切文件。要使用文件 Finddata.txt 中内容为搜索条件,来搜索 Filelist.txt 中列出的文件,然后将结果保存到文件 Results.out 中,请键入:</div><div>findstr /g:finddata.txt /f:filelist.txt > results.out</div><div>? 假设您想要找到当前目录和所有子目录中每个包含“computer”这个单词的文件,而不考虑字母的大小写。要列出包含单词“computer”的所有文件,请键入:</div><div>findstr /s /i /m "<computer>" *.*</div><div>? 现在假定不仅需要查找字“computer”,而且需要查找以字母“comp”开头的所有其他字,例如“compliment”和“compete”。请键入:</div><div>findstr /s /i /m "<comp.*" *.*</div><div><br></div><div>一般表达式的快速参考:</div><div> . 通配符: 任何字符</div><div> * 重复: 以前字符或类别出现零或零以上次数</div><div> ^ 行位置: 行的开始</div><div> $ 行位置: 行的终点</div><div> [class] 字符类别: 任何在字符集中的字符</div><div> [^class] 补字符类别: 任何不在字符集中的字符</div><div> [x-y] 范围: 在指定范围内的任何字符</div><div> x Escape: 元字符 x 的文字用法</div><div> <xyz 字位置: 字的开始</div><div> xyz> 字位置: 字的结束</div><div><br></div><div>范例:</div><div><br></div><div>? findstr . 2.txt 或 Findstr "." e:softwaretest2.txt </div><div>从文件2.txt中查找任意字符,不包括空字符或空行。 </div><div>? findstr .* 2.txt 或 findstr ".*" e:softwaretest2.txt </div><div>从文件2.txt中查找任意字符包括空行和空字符 。</div><div>? findstr "[0-9]" e:softwaretest2.txt</div><div>从文件2.txt中查找包括数字0-9的字符串或行。 </div><div>? findstr "[a-zA-Z]" e:softwaretest2.txt</div><div>从文件2.txt中查找包括任意字符的字符串或行 。</div><div>? findstr "[abcezy]" e:softwaretest2.txt</div><div>从文件2.txt中查找包括a b c e z y字母的字符串或行 </div><div>? findstr "[a-fl-z]" e:softwaretest2.txt</div><div>从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。 </div><div>? findstr "M[abc][hig]Y" e:softwaretest2.txt </div><div>从文件2.txt中可以匹配 MahY , MbiY, MahY等….. </div><div>? ^和$符号的应用 </div><div>^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词 </div><div>$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词 </div><div>? finstr "[^0-9]" e:softwaretest2.txt</div><div>如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。 </div><div>? findstr "[^a-z]" e:softwaretest2.txt</div><div>同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了 </div><div>? *号的作用 </div><div>前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。< 最后一行不能显示,奇怪。></div><div>? findstr "^[0-9]*$" e:softwaretest2.txt</div><div>? 这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。 </div><div>? Findstr "^[a-z]*$" 2.txt </div><div>这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了 </div><div>如 果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉, 如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。 </div><div>? "<…>"这个表达式的作用 :</div><div>这个表示精确查找一个字符串,<sss 表示字的开始位置,sss>表示字的结束位置 </div><div>echo hello world computer|findstr "<computer>"这样的形式 </div><div>echo hello worldcomputer|findstr "<computer>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。 </div><div>echo hello worldcomputer|findstr ".*computer>"这样就可以匹配了 </div><div><br></div><div><br></div><div>8. Shift命令详解:</div><div><br></div><div> 批处理文件中可引用的参数为%0~%9,%0是指批处理文件的本身,也可以说是一个外部命令;%1~%9是批处理参数,也称形参;而替换形参的实参若超过了批处理文件中所规定数值(9个)且想在批处理文件中应用这些实参的话,shift命令可以帮你实现!</div><div>Shift命令:更改批处理文件中可替换参数的位置</div><div>shift [/n] </div><div>n的取值是[0,8],且为整数;[/n]为可选参数,当赋予n某个值时,就意味着命令从第n个参数开始移位;当n赋予的值为0,1或不带有任何命令选项的shift时,则表示批处理文件中替换参数左移一个位置,后面的替换参数陆续填补上去,直至可替换参数为空。</div><div>例如:</div><div>? @echo off</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /0</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /1</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /2</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /3</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /4</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /5</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /6</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /7</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>shift /8</div><div>echo %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div>pause 1>nul</div><div><br></div><div>输出结果:</div><div>D:>maple.bat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17</div><div>1 2 3 4 5 6 7 8 9 < 第一个参数结果></div><div>2 3 4 5 6 7 8 9 10 <在第一个结果上替换参数左移一位> shift /0</div><div>3 4 5 6 7 8 9 10 11 <在第二个结果上替换参数左移一位> shift /1</div><div>3 5 6 7 8 9 10 11 12 <在第三个结果上替换参数左移第二位> shift /2</div><div>3 5 7 8 9 10 11 12 13 <在第四个结果上替换参数左移第三位> shift /3</div><div>3 5 7 9 10 11 12 13 14 <以下类推></div><div>3 5 7 9 11 12 13 14 15</div><div>3 5 7 9 11 13 14 15 16</div><div>3 5 7 9 11 13 15 16 17</div><div>3 5 7 9 11 13 15 17</div><div><br></div><div>? @echo off</div><div>:begin</div><div>if "%1" == "" (goto end)</div><div>echo %1</div><div>shift</div><div>goto begin</div><div>:end</div><div><br></div><div>输出结果:</div><div> D:>maple.bat 1 2 3</div><div>1</div><div>2</div><div>3</div><div><br></div><div><br></div><div>9. Choice命令详解:</div><div><br></div><div>CHOICE ? [/C ? choices] ? [/N] ? [/CS] ? [/T ? timeout ? /D ? choice] ? [/M ? text] ? </div><div>? ? </div><div>? 描述: ? </div><div>? ? ? ? ? 该工具允许用户从选择列表选择一个项目并返回所选项目的索引。 ? </div><div>? 参数列表: ? </div><div>? ? ? ? /C ? ? ? ? choices ? ? ? ? ? ? ? 指定要创建的选项列表。默认列表是 ? "YN"。 </div><div>? ? ? ? /N ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。 ? </div><div>? ? ? ? /CS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 允许选择分大小写的选项。在默认情况下,这个工具是不分大小写的。? </div><div>? ? /T ? ? ? ? timeout ? ? ? ? ? ? ? 做出默认选择之前,暂停的秒数。可接受的值是从0到9999。如果指定了0,默认选项。? ? </div><div>? ? ? ? /D ? ? ? ? choice ? ? ? ? ? ? ? ? 在 ? nnnn ? 秒之后指定默认选项。字符必须在用/C ? 选项指定的一组选择中; ? 同时,必须用/T指定 ? nnnn。 ? </div><div>? ? ? ? /M ? ? ? ? text ? ? ? ? ? ? ? ? ? ? 指定提示之前要显示的消息。如果没有指定,工具只显示提示。 ? </div><div>? ? ? ? </div><div>? ? ? ? 注意: ? </div><div>? ? ? ? ERRORLEVEL ? 环境变量被设置为从选择集选择的键索引。列出的第一个选 ? </div><div>? ? ? ? 择返回 ? 1,第二个选择返回 ? 2,等等。如果用户按的键不是有效的选择, ? </div><div>? ? ? ? 该工具会发出警告响声。如果该工具检测到错误状态,它会返回 ? 255 ? 的 ? </div><div>? ? ? ? ERRORLEVEL ? 值。如果用户按 ? Ctrl Break ? 或 ? Ctrl C ? 键,该工具会返回 ? 0 ? </div><div> 的 ? ERRORLEVEL ? 值。在一个批程序中使用 ? ERRORLEVEL ? 参数时,将参数降序排列。 ? </div><div><br></div><div>--------------------------------------------------------------------------------</div><div>CHOICE 例子:</div><div><br></div><div>? Choice /c ync /m yes,no,continue /n /t 5 /d n</div><div> 表示:有Y,N,C选择,但它们是隐藏的,只显示 yes,no,continue 默认选择是N,在选择之前,暂停5秒。</div><div><br></div><div>? @echo ? off ? ? </div><div>? choice ? /c dme ? /m defrag,mem,end ? ? </div><div>? if ? errorlevel ? 3 ? goto ? defrag ? (应先判断数值最高的错误码) ? </div><div>? if ? errorlevel ? 2 ? goto ? mem ? ? </div><div>? if ? errotlevel ? 1 ? goto ? end ? ? </div><div>? ? </div><div>? :defrag ? ? </div><div>? c:dosdefrag ? ? </div><div>? goto ? end ? ? </div><div>? :mem ? ? </div><div>? mem ? ? </div><div>? goto ? end ? ? </div><div>? :end ? ? </div><div>? echo ? good ? bye ? </div><div><br></div><div><br></div><div><br></div><div>10. Call命令详解:</div><div><br></div><div>从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。</div><div>语法</div><div>call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]</div><div>参数</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>[Drive:}[Path] FileName </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>BatchParameters </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定批处理程序所需的任何命令行信息,包括命令行选项、文件名、批处理参数(从 %0 到 %9)或变量(例如,�ud%)。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>:label </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>指定批处理程序要跳转到的标签。使用带有该参数的 call 命令可以创建新的批处理文件上下文,并将控制权交给指定标签后的语句。当首次遇到该批处理文件的末尾时(在跳转到标签后),控制权将交还给 CALL 语句后的语句。第二次遇到批处理文件的末尾,批脚本将被退出。对于可允许您从批处理脚本返回的 goto :eof 命令扩展,要了解关于它的说明,请参阅“相关主题”。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>arguments </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>对于以 :label 打头的批处理程序,指定要传送给其新实例的命令行信息,包括命令行选项、文件名、批处理参数(从 %1 到 %9)或者变量(比如 �ud%)。 </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>/? </div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>在命令提示符显示帮助。 </div><div>注释</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? 使用批处理参数 </div><div>批处理参数可以含有传送给批处理程序的任何信息,包括命令行选项、文件名、批处理参数(从 %1 到 %9)或者变量(例如,�ud%)。有关批处理参数的详细信息,请参阅“相关主题”。</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? 使用管道和重定向符号 </div><div>不要在 call 命令中使用管道和重定向符号。</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>? 发出递归调用 </div><div>可以创建调用自身的批处理程序,但是,必须提供退出条件。否则,父和子批处理程序可以无限循环。</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? 使用命令扩展 </div><div>如果启用命令扩展(即默认情况下),call 将接受 label 参数作为调用目标。正确语法如下:</div><div>call :label arguments</div><div>有关启用和禁用命令扩展的详细信息,请参阅“相关主题”中的 cmd。</div><div><br></div><div>-------------------------------------------------------------------------------------------------------------------------------</div><div>? 范例:</div><div>要从其他批处理程序运行 Checknew.bat 程序,请在父批处理程序中键入以下命令: </div><div>call e:softwaretesttest.bat </div><div>如果父批处理程序接受两个批处理参数并且希望它将这些参数传递给 Checknew.bat,则可以在父批处理程序中使用以下命令: </div><div>call e:softwaretesttest.bat %1 %2 </div><div>Call :start %1 %2 %3 %4 %5</div><div><br></div><div><br></div><div><br></div><div>11. 环境变量延迟扩展<setlocal和endlocal>:</div><div> 当CMD读取for语句时,其后用一对圆扩号闭合的所有语句将一同读取,并完成必要的预处理工作,这其中就包括环境变量的扩展,所以在for中的所有语句执行之前,所有的环境变量都已经被替换为for之前所设定的值,从而成为一个字符串常量,而不再是变量。无论在for中将那些环境变量如何修改,真正受到影响的只是环境变量空间,而非for语句内部。</div><div>? ?? ?而为了能够在for语句内部感知环境变量的动态变化,CMD设计了延迟的环境变量扩展特性,也就是说,当CMD读取了一条完整的语句之后,它不会立即执行变量的扩展行为,而会在某个单条语句执行之前再进行扩展,也就是说,这个扩展行为被“延迟”了。</div><div> </div><div>setlocal 批命令现在可以接受可选参数:</div><div> ENABLEEXTENSIONS / DISABLEEXTENSIONS</div><div> 启动或停用命令处理器扩展。详细信息,请参阅 CMD /?。</div><div> ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION</div><div> 启动或停用延缓环境变量扩展。详细信息,请参阅 SET /?。</div><div>Endlocal :相应的 SETLOCAL 用新的 ENABLEEXTENSIONS, ENABLEDELAYEDEXPANSION 或DISABLEEXTENSIONS, DISABLEDELAYEDEXPANSION 选项启用或停用了命令扩展,那么,在ENDLOCAL 之后,命令扩展的启用/停用状态会还原到执行</div><div>相应的 SETLOCAL 命令前的状态。</div><div><br></div><div>启用"延缓环境变量扩充",用 ! 来引用变量,即 !变量名!</div><div>@echo off</div><div>setlocal enabledelayedexpansion</div><div>set p=aaa</div><div>if %p%==aaa (</div><div> echo %p%</div><div> set p=bbb</div><div> echo !p!</div><div>)</div><div>ENDLOCAL</div><div>结果将显示aaabbb</div><div><br></div><div><br></div><div><br></div><div>12. Reg.exe 与Regedit.exe命令详解<注册表操作>:</div><div>Reg.exe:可以添加、更改和显示注册表项中的注册表子项信息和值。</div><div><br></div><div>? REG.exe Operation [Parameter List]<命令格式>:</div><div> Operation [ QUERY | ADD | DELETE | COPY | SAVE | LOAD | UNLOAD | RESTORE | COMPARE | EXPORT | IMPORT ]</div><div><br></div><div>Return Code: (Except of REG COMPARE)</div><div> 0 - Successful</div><div> 1 - Failed</div><div><br></div><div>? reg add:</div><div>将新的子项或项添加到注册表中。</div><div>语法:reg add KeyName [/v EntryName|/ve] [/t DataType] [/s separator] [/d value] [/f]</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。</div><div>/v EntryName - 指定要添加到指定子项下的项名称。</div><div>/ve - 指定添加到注册表中的项为空值。</div><div>/t DataType - 指定项值的数据类型。DataType 可以是以下几种类型:</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_SZ</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>? REG_MULTI_SZ</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>? REG_DWORD_BIG_ENDIAN</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_DWORD</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_BINARY</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_DWORD_LITTLE_ENDIAN</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_LINK</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_FULL_RESOURCE_DESCRIPTOR</div><div><span class="Apple-tab-span" style="white-space:pre"> < /span>? REG_EXPAND_SZ</div><div>/s separator - 指定用于分隔多个数据实例的字符。当 REG_MULTI_SZ 指定为数据类型且需要列出多个项时,请使用该参数。如果没有指定,将使用默认分隔符为 。</div><div>/d value - 指定新注册表项的值。</div><div>/f - 不用询问信息而直接添加子项或项。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>该操作不能添加子树。该版本的 Reg 在添加子项时无需请求确认。</div><div>下表列出了 reg add 操作的返回值。</div><div>值 - 说明:</div><div>0? - 成功</div><div>1? - 失败</div><div>范例:</div><div>下列范例说明了如何使用 reg add 命令:</div><div>Reg add hklmsoftwaremyco</div><div>::表示在本机的 hklmsoftware"键值上增加myco</div><div>reg add universalvpnhklmsoftwaremyco /v Paths /t REG_EXPAND_SZ /d ^%systemroot^% /f </div><div>::表示在universalvpn服务器上的 hklmsoftwaremyco" 项上增加键值 Paths ,其类型为:REG_EXPAND_SZ, </div><div>数据值是%systemroot%, ^是转义字符的意思。</div><div>reg add hklmsoftwaremyco /v Paths /t REG_EXPAND_SZ /d ^%syste mroot^% /f </div><div>reg add "hklmsoftwaremyco" /v Paths /t REG_EXPAND_SZ /d ^%syste mroot^% /f</div><div> </div><div>? reg compare :</div><div>比较指定的注册表子项或项。</div><div>语法:reg compare KeyName1 KeyName2 [/v EntryName | /ve] {[/oa]|[/od]|[/os]|[on]} [/s]</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定远程计算机,则只可使用 HKLM 和 HKU 子目录树。</div><div>/v EntryName - 比较子项下的特定项。</div><div>/ve - 指定只可以比较没有值的项。</div><div>{[/oa]|[/od]|[/os]|[on]} - 指定不同点和匹配点的显示方式。默认设置是 /od。</div><div>值 - 说明</div><div>/oa - 指定显示所有不同点和匹配点。默认情况下,仅列出不同点。</div><div>/od - 指定仅显示不同点。这是默认操作。</div><div>/os - 指定仅显示匹配点。默认情况下,仅列出不同点。</div><div>/on - 指定不显示任何内容。默认情况下,仅列出不同点。</div><div>/s Separator - 比较所有子项和项。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg compare 操作的返回值。</div><div>值 - 说明</div><div>0 - 比较成功且结果相同。</div><div>1 - 比较失败。</div><div>2 - 比较成功并找到不同点。</div><div>范例:</div><div>下面的范例说明了如何使用 reg compare 命令:</div><div>reg compare "hkcusoftwaremicrosoftwinmine" "hkcusoftwaremicrosoftwinmine" /od /s</div><div><br></div><div>reg copy</div><div>将一个注册表项复制到本地或远程计算机的指定位置。</div><div>语法:reg copy KeyName1 KeyName2 [/s] [/f]</div><div>参数:</div><div>KeyName1 - 指定要复制子项的完整路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定远程计算机,则只可使用 HKLM 和 HKU 子目录树。</div><div>KeyName2 - 指定子项目的地的完整路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定远程计算机,则只可使用 HKLM 和 HKU 子目录树。</div><div>/s - 复制指定子项下的所有子项和项。</div><div>/f - 无需请求确认而直接复制子项。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>该版本的 Reg 在复制子项时无须请求确认。下表列出了 reg copy 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下列范例说明了如何使用 reg copy 命令:</div><div>reg copy "hkcusoftwaremicrosoftwinmine" "hkcusoftwaremicrosoftwinminebk" /s /f</div><div>reg copy "hkcusoftwaremicrosoftwinminebk" "hkcusoftwaremicrosoftwinmine" /s</div><div>reg delete</div><div>从注册表删除项或子项</div><div>语法:reg delete KeyName [{/v EntryName|/ve|/va}] [/f]</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。</div><div>/v EntryName - 删除子项下的特定项。如果未指定项,则将删除子项下的所有项和子项。</div><div>/ve - 指定只可以删除为空值的项。</div><div>/va - 删除指定子项下的所有项。使用本参数不能删除指定子项下的子项。</div><div>/f - 无需请求确认而删除现有的注册表子项或项。</div><div>/?- 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg delete 操作的返回值。</div><div>值 - 说明</div><div>0 -成功</div><div>1 -失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg delete 命令:</div><div>reg delete "hkcusoftwaremicrosoftwinmine" /v Name1</div><div>reg delete "hkcusoftwaremicrosoftwinmine" /v Time1</div><div>---------------------</div><div>reg delete "hkcusoftwaremicrosoftwinmine" /va</div><div><br></div><div>reg export</div><div>将指定子项、项和值的副本创建到文件中,以便将其传输到其它服务器。</div><div>语法:reg export KeyName FileName</div><div>参数:</div><div>KeyName - 指定子项的完全路径。Export 操作仅可在本地计算机上工作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及HKCC。</div><div>FileName - 指定要导出文件的名称和路径。该文件必须具有 .reg 扩展名。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg export 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg export 命令:</div><div>reg export "hkcusoftwaremicrosoftwinmine" c:dataregbackupswmbkup.reg</div><div><br></div><div>reg import</div><div>将包含导出的注册表子项、项和值的文件复制到本地计算机的注册表中。</div><div>语法:reg import FileName</div><div>参数:</div><div>FileName - 指定将复制到本地计算机注册表中的文件的名称和路径。必须预先使用 reg export 命令创建该文件。</div><div>/?- 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg import 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg import 命令:</div><div>reg import hkcusoftwaremicrosoftwinmine" c:dataregbackupswmbkup.reg</div><div><br></div><div>reg load</div><div>将保存的子项和项写回到注册表的不同子项中。其目的是保存到一个临时文件中,而该文件可用于注册表项的疑难解答或编辑注册表项。</div><div>语法:reg load KeyName FileName</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。</div><div>FileName - 指定要加载的文件的名称和路径。必须使用带 .hiv 扩展名的 reg save 操作创建该文件。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg load 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg load 命令:</div><div>reg load "hkcusoftwaremicrosoftwinminebk2" wmbkup.hiv</div><div><br></div><div>reg query</div><div>返回注册表的子项下的项和下一层子项的列表。</div><div>语法:reg query KeyName [{/v EntryName|/ve}] [/s]</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,请在 \ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定远程计算机,则只可使用 HKLM 和 HKU 子目录树。</div><div>/v EntryName - 返回特定的项及其值。该参数只返回直接位于指定子项的下一层中的项。将会找不到当前子项下的子项中的项。如果省略 EntryName,则将返回子项下的所有项。</div><div>/ve - 指定仅返回为空值的项。</div><div>/s - 将返回各个层中的所有子项和项。如果不使用该参数,将只返回下一层的子项和项。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg query 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg query 命令:</div><div>reg query "hklmsystemcurrentcontrolsetcontrolsession manager" /v maxstacktracedepth</div><div>reg query "hkcusoftwaremicrosoftwinmine" /s</div><div><br></div><div>reg restore</div><div>将保存的子项和项写回到注册表。</div><div>语法:reg restore KeyName FileName</div><div>参数:</div><div>KeyName - 指定子项的完全路径。Restore 操作仅在本地计算机上工作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及HKCC。</div><div>FileName - 指定将写回到注册表中的文件的名称和路径。必须使用带 .hiv 扩展名的 reg save 操作预先创建该文件。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>该操作用于覆盖已编辑的注册表项。编辑注册表项之前,请使用 reg save 操作保存父亲子项。如果编辑失败,则可以使用本操作恢复子项。</div><div>表列出了 reg restore 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg restore 命令:</div><div>reg restore "hkcusoftwaremicrosoftwinmine" wmbkup.hiv</div><div><br></div><div>reg save</div><div>将指定的子项、项和注册表值的副本保存到指定文件中。</div><div>语法:reg save KeyName FileName</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,\ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。</div><div>FileName - 指定所创建的文件的名称和路径。如果未指定路径,则使用当前路径。</div><div>/?- 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg save 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg save 命令:</div><div>reg save "hkcusoftwaremicrosoftwinmine" wmbkup.hiv</div><div><br></div><div>reg unload</div><div>使用 reg load 操作删除已加载的部分注册表。</div><div>语法:reg unload KeyName</div><div>参数:</div><div>KeyName - 指定子项的完全路径。对于远程计算机,\ComputerNamePathToSubkey 中的子项路径前包含计算机名称。忽略 ComputerName 会导致默认对本地计算机进行操作。以相应的子目录树开始路径。有效子目录树为 HKLM、HKCU、HKCR、HKU 以及 HKCC。</div><div>/? - 在命令提示符显示帮助。</div><div>注释:</div><div>下表列出了 reg unload 操作的返回值。</div><div>值 - 说明</div><div>0 - 成功</div><div>1 - 失败</div><div>范例:</div><div>下面的范例说明了如何使用 reg unload 命令:</div><div>reg unload "hkcusoftwaremicrosoftwinminebk2"</div><div>让 Windows 注册表修改快速生效</div><div>当我们修改了注册表,许多情况下只按下 F5 键刷新注册表还不足以使修改生效,而需要重新启动计算机。其实我们不必每次都重启机器,只需运行 Windows 的外壳程序 Explorer 即可(在 Windows 9x/Me 和 Windows 2000/XP 中的操作有所不同)。</div><div>在 Windows 9x/Me 中按下“Ctrl Alt Delete”组合键,在弹出的窗口中选择“Explorer”,并点击“结束任务”按钮,这时屏幕会出现“关机”菜单,不要 做任何操作,在再次弹出的窗口中点击“结束任务”按钮,即可让 Windows 在不重新启动的情况下快速刷新注册表。</div><div>在 Windows 2000/XP 中按下“Ctrl Alt Delete”组合键,打开“任务管理器”,单击“进程”标签,找到并单击其中的“Explorer.exe”,点击右下方的 “结束进程”按钮,在打开的警告对话框中单击“是”按钮。然后再单击“应用程序”标签,单击下方的“新任务”按钮,在打开的“创建新任务”对话框中输入 “Explorer.exe”,再按下“确定”按钮即可。</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>题外话:呵呵,这个居然成了我blog里访问量最高的一篇了,虽然没技术含量,不过自我感觉还是稍稍有点意义的,我在远景上也有发过,可惜那篇已经不能再编辑了。</div><div>现在的新本本预装的Vista系统几乎都是家庭版,令人遗憾的是Vista家庭版不论home basic还是home premium, 都和?XP home 一样不包含组策略对象编辑器(GPO editor)。 不少朋友也在抱怨家庭版运行不了gpedit.msc ...</div><div><br></div><div>其实通过本地组策略编辑器进行个性化设置还是挺方便的,虽然基本原理主要还是修改注册表,但是它在易用性方面比注册表编辑器 regedit 要强多了。</div><div><br></div><div>前天比较闲,于是检查了下注册表,写了几个本地组策略的简单设置和对应的reg命令(组策略中多数条目设有三个选项:启用、禁用和未配置,很多时候未配置和禁用是一回事,所以这里只考虑启用了)。</div><div>PS: 以管理员身份运行cmd,然后把下面的reg XXXXX 贴到cmd窗口中回车就可以实现相应设置了,如果要撤销设置就粘贴"撤销"对应的reg XXXX 。</div><div>如果有时候由于某些原因比如乱用优化软件导致下面诸如XXX不可用的情况,也可以去注册表中的相应位置看看哦:HKLM=HKEY_LOCAL_MACHINE , HKCU=HKEY_CURRENT_USER。</div><div><br></div><div>计算机配置:</div><div>-系统</div><div>-设备安装</div><div>安装新硬件时不出现”发现新硬件“气泡提示</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableBalloonTips /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableBalloonTips /f</div><div><br></div><div>当一个通用驱动被安装时,不发送windows错误报告</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableSendGenericDriverNotFoundToWER /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableSendGenericDriverNotFoundToWER /f</div><div><br></div><div>更新或安装新驱动时不创建还原点</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableSystemRestore /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDeviceInstallSettings /v DisableSystemRestore /f</div><div><br></div><div>-驱动安装</div><div>安装驱动时不提示在windows自动更新中搜索</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDriverSearching /v DontPromptForWindowsUpdate /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDriverSearching /v DontPromptForWindowsUpdate /f</div><div><br></div><div>-其它</div><div>关闭启动声音</div><div>reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem /v DisableStartupSound /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem /v DisableStartupSound /f</div><div><br></div><div>关闭系统还原及其配置界面</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindows" "NTSystemRestore /v DisableSR /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindows" "NTSystemRestore /v DisableSR /f</div><div><br></div><div>允许部分程序在运行时阻止或取消系统关机</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsSystem /v AllowBlockingAppsAtShutdown /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsSystem /v AllowBlockingAppsAtShutdown /f</div><div><br></div><div>-Windows 组件</div><div>-IE</div><div>去除IE搜索框</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerInfodeliveryRestrictions /v NoSearchBox /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerInfodeliveryRestrictions /v NoSearchBox /f</div><div><br></div><div>总是显示菜单栏</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerMain /v AlwaysShowMenus /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerMain /v AlwaysShowMenus /f</div><div><br></div><div>不参与客户体验改善计划</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerSQM /v DisableCustomerImprovementProgram /t REG_DWORD /d 0 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerSQM /v DisableCustomerImprovementProgram /f</div><div><br></div><div>禁用页面缩放</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerZOOM /v ZoomDisabled /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftInternet" "ExplorerZOOM /v ZoomDisabled /f</div><div><br></div><div>-备份</div><div>关闭备份功能</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableBackupUI /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableBackupUI /f</div><div><br></div><div>关闭恢复功能</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableRestoreUI /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableRestoreUI /f</div><div><br></div><div>关闭Complete PC备份功能</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableSystemBackupUI /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsBackupClient /v DisableSystemBackupUI /f</div><div><br></div><div>-桌面窗口管理器</div><div>禁用窗口动画(如最大最小化时的动画效果)</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowAnimations /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowAnimations /f</div><div><br></div><div>禁止更改窗口边框颜色</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowColorizationColorChanges /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowColorizationColorChanges /f</div><div><br></div><div>关闭桌面合成(则失去aero玻璃效果、flip3d和任务栏窗口缩略图 等等...)</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowComposition /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowComposition /f</div><div><br></div><div>不使用Flip3d</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowFlip3d /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsDWM /v DisallowFlip3d /f</div><div><br></div><div>-资源管理器</div><div>为本地文件隐藏先前版本列表(即文件属性里将不出现"之前的版本"选项卡)</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftPreviousVersions /v DisableLocalPage /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftPreviousVersions /v DisableLocalPage /f</div><div><br></div><div>为远程文件隐藏先前版本列表</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftPreviousVersions /v DisableRemotePage /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftPreviousVersions /v DisableRemotePage /f</div><div><br></div><div>-Windows Mail</div><div>不在新闻组服务器上检查社区支持</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindows" "Mail /v DisableCommunities /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindows" "Mail /v DisableCommunities /f</div><div><br></div><div>禁用Windows Mail</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindows" "Mail /v ManualLaunchAllowed /t REG_DWORD /d 0 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindows" "Mail /v ManualLaunchAllowed /f</div><div><br></div><div>-Windows Media Player</div><div>禁止wmp自动更新</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsMediaPlayer /v DisableAutoUpdate /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsMediaPlayer /v DisableAutoUpdate /f</div><div><br></div><div>禁用媒体共享</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsMediaPlayer /v PreventLibrarySharing /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsMediaPlayer /v PreventLibrarySharing /f</div><div><br></div><div>-边栏</div><div>关闭边栏</div><div>reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindowsSidebar /v TurnOffSidebar /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindowsSidebar /v TurnOffSidebar /f</div><div><br></div><div>禁用用户安装的小工具</div><div>reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindowsSidebar /v TurnOffUserInstalledGadgets /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindowsSidebar /v TurnOffUserInstalledGadgets /f</div><div><br></div><div>-其它</div><div>关闭移动中心</div><div>reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesMobilityCenter /v NoMobilityCenter /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesMobilityCenter /f</div><div><br></div><div>关闭windows日历</div><div>reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindows /v TurnOffWinCal /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesWindows /v TurnOffWinCal /f</div><div><br></div><div>关闭windows defender</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindows" "Defender /v DisableAntiSpyware /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindows" "Defender /v DisableAntiSpyware /f</div><div><br></div><div>禁用slideshow</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsSideShow /v Disabled /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsSideShow /v Disabled /f</div><div><br></div><div>禁用windows错误报告</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsWindows" "Error" "Reporting /v Disabled /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsWindows" "Error" "Reporting /v Disabled /f</div><div><br></div><div>禁用媒体中心</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsMediaCenter /v MediaCenter /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsMediaCenter /v MediaCenter /f</div><div><br></div><div>禁用MovieMaker</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsMovieMaker /v MovieMaker /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsMovieMaker /v MovieMaker /f</div><div><br></div><div>禁止配置自动更新(此时自动更新设置无法更改)</div><div>reg add HKLMSOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU /v NoAutoUpdate /t REG_DWORD /d 1 /f</div><div>撤销 </div><div>reg delete HKLMSOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU /v NoAutoUpdate /f</div><div><br></div><div><br></div><div>用户设置</div><div>-开始菜单及任务栏</div><div>注销时清空开始菜单上的“最近打开的文档”</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v ClearRecentDocsOnExit /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v ClearRecentDocsOnExit /f</div><div><br></div><div>不保留最近打开的文档的历史记录</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoRecentDocsHistory /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoRecentDocsHistory /f</div><div><br></div><div>去掉开始菜单中的"最近打开的文档"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoRecentDocsMenu /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoRecentDocsMenu /f</div><div><br></div><div>去除开始菜单上的"连接到"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoNetworkConnections /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoNetworkConnections /f</div><div><br></div><div>去掉开始菜单中的"帮助"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMHelp /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMHelp /f</div><div><br></div><div>去掉开始菜单中的"文档"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMMyDocs /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMMyDocs f</div><div><br></div><div>去掉开始菜单中的"图片"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMMyPictures /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoSMMyPictures /f</div><div><br></div><div>去掉开始菜单中的"最近使用的程序列表"</div><div>HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMFUprogramsList /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMFUprogramsList /f</div><div><br></div><div>去掉开始菜单中的"游戏"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMyGames /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMyGames /f</div><div><br></div><div>去掉开始菜单中的"音乐"</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMyMusic /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v NoStartMenuMyMusic /f</div><div><br></div><div>锁定任务栏</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v LockTaskbar /t REG_DWORD /d 1 /f </div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v LockTaskbar /f </div><div><br></div><div><br></div><div>禁止拖拽任务栏到屏幕其它边侧</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v TaskbarNoRedock /t REG_DWORD /d 1 /f </div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v TaskbarNoRedock /f </div><div><br></div><div>禁止更改任务栏大小</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v TaskbarNoResize /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v TaskbarNoResize /f</div><div><br></div><div>-其它</div><div>强制使用控制面板经典视图</div><div>reg add HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v ForceClassicControlPanel /t REG_DWORD /d 1 /f</div><div>撤销</div><div>reg delete HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer /v ForceClassicControlPanel /f</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>13.> nul</div><div>>nul 是屏蔽标准输出在屏幕上的显示,2>nul 是屏蔽出错显示,>nul 2>nul 是无论对错,都屏蔽屏幕显示。</div>

0 人点赞