bat批处理文件名,如何reg_dword设置16进制值?

之前项目用到了MySQL、Redis、MongoDB和其他一些独立的jar包程序,测试的时候需要用脚本配置java环境变量,并运行各个程序。结果打开有四五个cmd黑框,领导又要求不显示cmd黑框。经过网上查阅资料,学习了一下批处理的一些知识,写下这篇文章整理一下。一、批处理介绍批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本,而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。批处理是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND.COM或者CMD.EXE)解释运行。批处理的编程能力远不如C语言等编程语言,也十分不规范,大小写不敏感(命令符忽略大小写)。每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。批处理类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等中高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。二、创建批处理文件批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe运行该批处理程序。一般情况下,每条命令占据一行。当然也可以将多条命令用特定符号(如:&、&&、|、
等)分隔后写入同一行中,还有的情况就是像if、for等较高级的命令则要占据几行甚至几十几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。三、常用DOS命令1、文件夹管理:cd 显示当前目录名或改变当前目录。cd #显示当前目录cd /d d:sdk #可以同时更改盘符和目录md 创建目录。rd 删除一个目录。rd abc #删除当前目录里的 abc 子目录,要求为空目录rd /s/q d:temp #删除 d:temp 文件夹及其子文件夹和文件,/q安静模式dir 显示目录中的文件和子目录列表。tree 以图形显示驱动器或路径的文件夹结构。tree d: #显示D盘的文件目录结构path 为可执行文件显示或设置一个搜索路径。xcopy 复制文件和目录树。2、文件管理:type 显示文本文件的内容。copy 将一份或多份文件复制到另一个位置。Sample:copy c:test.txt d:test.bak 复制 c:test.txt 文件到 d: ,并重命名为 test.bakcopy con test.txt 从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为test.txt文件,con代表屏幕,prn代表打印机,nul代表空设备copy 1.txt + 2.txt 3.txt 合并 1.txt 和 2.txt 的内容,保存为 3.txt 文件,如果不指定 3.txt ,则保存到 1.txtcopy test.txt + 复制文件到自己,实际上是修改了文件日期del 删除一个或数个文件。Sample:del d:test.txt #删除指定文件,不能是隐藏、系统、只读文件del /q/a/f d:temp*.* #删除 d:temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录del /q/a/f/s d:temp*.* #删除 d:temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录move 移动文件并重命名文件和目录。(Windows XP Home Edition中没有)ren 重命名文件。replace 替换文件。attrib 显示或更改文件属性。find 搜索字符串。Sample:find “abc” c:test.txt #在 c:test.txt 文件里查找含 abc 字符串的行,如果找不到,将设 errorlevel 返回码为1find /i “abc” c:test.txt #查找含 abc 的行,忽略大小写find /c “abc” c:test.txt #显示含 abc 的行的行数fc 比较两个文件或两个文件集并显示它们之间的不同3、网络命令:ping 进行网络连接测试、名称解析ftp 文件传输net 网络命令集及用户管理Sample:net view 192.168.10.8net share 查看你机器的共享资源net share 共享资源名称$ /d 手工删除共享,注意$后有空格net share mymovie=e:\downloads\movie /users:3 mymovie 共享成功。 同时限制链接用户数为3人telnet 远程登陆ipconfig显示、修改TCP/IP设置msg 给用户发送消息arp 显示、修改局域网的IP地址-物理地址映射列表4、系统管理:title 新标题 #可以看到cmd窗口的标题栏变了ver #显示系统版本vol #显示卷标label #显示卷标,同时提示输入新卷标Sample:label c:system #设置C盘的卷标为 systemdate #显示当前日期,并提示输入新日期,按"回车"略过输入date/t #只显示当前日期,不提示输入新日期time #显示当前时间,并提示输入新时间,按"回车"略过输入time/t #只显示当前时间,不提示输入新时间more c:test.txt #逐屏显示 c:test.txt 的文件内容at 安排在特定日期和时间运行命令和程序cls 清屏shutdown立即或定时关机或重启tskill 结束进程taskkill结束进程(比tskill高级,但WinXPHome版中无该命令)tasklist显示进程列表(Windows XP Home Edition中没有)sc 系统服务设置与控制reg 注册表控制台工具powercfg控制系统上的电源设置对于以上列出的所有命令,在cmd中输入命令+/?即可查看该命令的帮助信息。如find /?四、批处理符号简介回显屏蔽 @重定向1 >与>>,> 清除文件中原有的内容后再写入,>> 追加内容到文件末尾,而不会清除原有的内容,主要将本来显示在屏幕上的内容输出到指定文件中,指定文件如果不存在,则自动生成该文件。type c:test.txt >prn 屏幕上不显示文件内容,转向输出到打印机echo hello world>con 在屏幕上显示hello world,实际上所有输出都是默认 >con 的copy c:test.txt f: >nul 拷贝文件,并且不显示"文件复制成功"的提示信息,但如果f盘不存在,还是会显示出错信息copy c:test.txt f: >nul 2>nul #不显示”文件复制成功”的提示信息,并且f盘不存在的话,也不显示错误提示信息echo ^^W ^> ^W>c:test.txt # 生成的文件内容为 ^W > W,^ 和 > 是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号重定向2 <,#从文件中获得输入信息,而不是从屏幕上,一般用于 date time label 等需要等待输入的命令。Sample:@echo offecho 2005-05-01>temp.txtdate <temp.txtdel temp.txt这样就可以不等待输入直接修改当前日期管道符号
Sample:dir . /s/a
find /c “.exe” #管道命令表示先执行 dir 命令,对其输出的结果执行后面的 find 命令,该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数type c:test.txt|more #这个和 more c:test.txt 的效果是一样的转义符 ^逻辑命令符包括:&、&&、
&顺序执行多条命令,而不管命令是否执行成功&&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令Sample:find “ok” c:test.txt && echo 成功 #如果找到了"ok"字样,就显示"成功",找不到就不显示
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令Sample:find “ok” c:test.txt
echo 不成功 #如果找不到"ok"字样,就显示"不成功",找到了就不显示五、 系统参数1、系统参数%SystemRoot% === C:\WINDOWS (%windir% 同样)%ProgramFiles% === C:\Program Files%USERPROFILE% === C:\Documents and Settings\Administrator (子目录有“桌面”,“开始菜单”,“收藏夹”等)%APPDATA% === C:\Documents and Settings\Administrator\Application Data%TEMP% === C:\DOCUME1\ADMINI1\LOCALS~1\Temp (%TEM% 同样)%APPDATA% === C:\Documents and Settings\Administrator\Application Data%OS% === Windows_NT (系统)%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的设置)%HOMEDRIVE% === C: (系统盘)%HOMEPATH% === \Documents and Settings\Administrator2、传递参数给批处理文件%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示,%* 从第一个参数开始的所有参数Sample:call test2.bat “hello” “haha” (执行同目录下的“test2.bat”文件,并输入两个参数)在“test2.bat”文件里写:echo %1 (打印: “hello”)echo %2 (打印: “haha”)echo %0 (打印: test2.bat)echo %19 (打印: "hello"9)六、Windows Batch 常用命令1、Echo语法: echo [{on|off}] [message]ECHO [ON
OFF] 打开回显或关闭回显功能ECHO [message] 显示信息。在实际应用中我们会把这条命令和重定向符号( 也称为管道符号,一般用 > >> ^ )结合来实现输入一些命令到特定格式的文件中。echo off #从下一行开始关闭回显@echo off #从本行开始关闭回显。一般批处理第一行都是这个echo on #从下一行开始打开回显echo #显示当前是 echo off 状态还是 echo on 状态echo. #输出一个”回车换行”,空白行echo %errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码默认值为0,一般命令执行出错会设 errorlevel 为12、@ 命令表示不显示@后面的命令,@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。3、Pause 命令会暂停批处理的执行并在屏幕上显示Press any key to continue…的提示,等待用户按任意键后继续4、Rem 命令语法:Rem Message…(小技巧:用::代替rem)注释命令,在C语言中相当与/…/,它并不会被执行,只是起一个注释的作用,便于别人阅读和自己日后修改。5、Goto 命令语法:goto label (label是参数,指定所要转向的批处理程序中的行。)指定跳转到标签行,找到标签行后,程序将处理从下一行开始的命令。label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表示这个字母是标签。goto命令就是根据这个冒号来寻找下一步跳到到那里。经常与 if 配合使用,根据不同的条件来执行不同的命令组。Sample:@echo off:begincopy a:. d:\backecho Please put a new disk into driver Apausegoto begin6、If 命令if 表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:(1)、 IF语法: if [not] “参数” == “字符串” 待执行的命令参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)(2)、 if exist语法: if [not] exist [路径]文件名 待执行的命令如果有指定的文件,则条件成立,运行命令,否则运行下一句。(3)、 if errorlevel number语法: if [not] errorlevel <数字> 待执行的命令如果程序返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。(返回值必须按照从大到小的顺序排列)很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),称为错误码errorlevel或称返回码。常见的返回码为0、1。通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令。Sample:@echo offXCOPY F:\test.bat D:IF ERRORLEVEL 1 (ECHO 文件拷贝失败) Else IF ERRORLEVEL 0 ECHO 成功拷贝文件pause(4)、 else语法: if 条件 (成立时执行的命令) else (不成立时执行的命令)如果是多个条件,建议适当使用括号把各条件包起来,以免出错。注:如果 else 的语句需要换行,if 执行的行尾需用“^”连接,并且 if 执行的动作需用(括起来),否则报错(5)、比较运算符:EQU - 等于 (一般使用双等号)NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于7、Start 命令调用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 来调用。8、Call 命令语法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]参数: [Drive:][Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。调用另一个批处理程序,并且不终止父批处理程序。如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。注:可以调用自身(死循环、递归)9、Choice 命令choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的 errorlevel,然后配合 if errorlevel 选择运行不同的命令。注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234…10、For 命令for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。(1)、for {%variable
%%variable} in (set) do command [command-parameters]%variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。(set) 指定一个或一组文件。可以使用通配符。command 指定对每个文件执行的命令。command-parameters 为特定命令指定参数或命令行开关。(2)、 如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:a.FOR /D %variable IN (set) DO command [command-parameters]如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配。b.FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。c.FOR /L %variable IN (start,step,end) DO command [command-parameters]该集表示以增量形式从开始到结束的一个数字序列。如:(1,1,5) 将产生序列 1 2 3 4 5; 而(5,-1,1) 将产生序列 (5 4 3 2 1)。d.有或者没有 usebackq 选项:FOR /F [“options”] %variable IN (file-set) DO commandFOR /F [“options”] %variable IN (“string”) DO commandFOR /F [“options”] %variable IN (command) DO command参数"options"为:eol=c - 指一个行注释字符的结尾(就一个,如“;”)skip=n - 指在文件开始时忽略的行数。delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。(3)、Sample:如下命令行会显示当前目录下所有以bat或者txt为扩展名的文件名。for %%c in (*.bat .txt) do (echo %%c)a. 如下命令行会显示当前目录下所有包含有 e 或者 i 的目录名。for /D %%a in (e i) do echo %%ab. 如下命令行会显示 E盘test目录 下所有以bat或者txt为扩展名的文件名。for /R E:\test %%b in (.txt .bat) do echo %%bfor /r %%c in () do (echo %%c) :: 遍历当前目录下所有文件c. 如下命令行将产生序列 1 2 3 4 5for /L %%c in (1,1,5) do echo %%cd. 以下两句,显示当前的年月日和时间For /f "tokens=1-3 delims=-/. " %%j In (‘Date /T’) do echo %%j年%%k月%%l日For /f "tokens=1,2 delims=: " %%j In (‘TIME /T’) do echo %%j时%%k分e. 把记事本中的内容每一行前面去掉8个字符setlocal enabledelayedexpansionfor /f %%i in (zhidian.txt) do (set atmp=%%iset atmp=!atmp:~8!if {!atmp!}=={} ( echo.) else echo !atmp!):: 读取记事本里的内容(使用 delims 是为了把一行显示全,否则会以空格为分隔符)for /f “delims=” %%a in (zhidian.txt) do echo.%%a(4)、 continue 和 break利用 goto 实现程序中常用的 continue 和 break 命令, 其实非常简单continue: 在 for 循环的最后一行写上一个标签,跳转到这位置即可break: 在 for 循环的外面的下一句写上一个标签,跳转到这位置即可11、Set命令set 设置变量,引用变量可在变量名前后加 % ,即 %变量名%set #显示目前所有可用的变量,包括系统变量和自定义的变量echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2echo %p:~0,3% #显示前3个字符,即aa1echo %p:~-2% #显示最后面的2个字符,即b2echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2becho %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2set /a p=39 #设置p为数值型变量,值为39set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用set /a p=”1&0″ #”与”运算,要加引号。其它支持的运算符参见set/?set p= #取消p变量set /p p=请输入屏幕上显示”请输入”,并会将输入的字符串赋值给变量p注意变量在 if 和 for 的复合语句里是一次性全部替换的。可以启用”延缓环境变量扩充”,用 ! 来引用变量,即 !变量名!12、Color 命令设置背景及字体颜色语法: color bfb 是指定背景色的十六进制数字; f 指定前景颜色(即字体颜色)。颜色值: 0:黑色 1:蓝色 2:绿色 3:湖蓝 4:红色 5:紫色 6:黄色 7:白色8:灰色 9:淡蓝 A:淡绿 B:浅绿 C:淡红 D:淡紫 E:淡黄 F:亮白如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。如果两参数一样,视为无效输入。只有一个参数时,设置字体。13、 Random 命令产生随机数(正整数0~)14、Exit 命令结束程序。即时是被调用的程序,结束后也不会返回原程序七、字符串处理 分割字符串,以查看时间为例%源字符串:~起始值,截取长度% (起始值从0开始;截取长度是可选的,如果省略逗号和截取长度,将会从起始值截取到结尾;截取长度如果是负数,表示截取到倒数第几个。)“%time%” 显示如:“11:04:23.03” (完整的时间"hh:mm:ss.tt")“%time:~0,5%” 显示"hh:mm"(即"11:04"),其中0表示从右向左移位操作的个数,5表示从左向右移位操作的个数“%time:~0,8%” 显示标准时间格式"hh:mm:ss"(即"11:04:23",前8个字符串)“%time:~3,-3%“显示"mm:ss”(即从第4个开始,截去最后3个的字符串)“%time:~3%” 显示"04:23.03”(即去掉前4个字符串)“%time:~-3%” 显示".tt"(即最后3个字符串)上面的字串分割格式,也可以用于其它地方,如目录路径:"%cd:~0,10%"
替换字符串set a=“abcd1234”echo %a% 显示:“abcd1234”set a=%a:1=kk% 替换“1”为“kk”echo %a% 显示:“abcdkk234”
字符串合并由于没有直接的字符串合并函数,只能用笨方法了。set str1=%str1%%str2% (合并 str1 和 str2)
计算字符串长度没有现成的函数。如下程序利用 goto形成循环,不断将字符串截短1,并记录截短的次数,到字符串变成空时的次数即长度。set testStr=This is a test string:: 将 testStr 复制到str,str 是个临时字符串set str=%testStr%:: 标签,用于goto跳转:next1:: 判断str是不是空,如果不是则执行下边的语句if not “%str%”=="" (:: 算术运算,使num的值自增1,相当于num++或者++num语句set /a num+=1:: 截取字符串,每次截短1set “str=%str:~1%”:: 跳转到next1标签: 这里利用goto和标签,构成循环结构goto next1):: 当以上循环结构执行完毕时,会执行下边的语句echo testStr=%testStr%echo testStr的长度为:%num%
截取字符串时,需要传递参数直接 echo %args:~%num%,-5% 没办法想要的字符串,需要如下两步setlocal enabledelayedexpansionecho !args:~%num%,-5! 八、注册表操作 备份注册表,将[HKEY_LOCAL_MACHINE … Run]的内容,备份到“c:\windows\1.reg”reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run c:\windows\1.regreg export HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run c:\windows\2.reg
修改/添加注册表内容a.一般的添加或修改reg add “HKCU\Environment” /v Java_Home /t reg_sz /d “D:\Java\jdk1.6.0_07” /f上句解析:“HKCU”是“HKEY_CURRENT_USER”的缩写,不用缩写用全称也可以;添加名称为“Java_Home”的变量;类型为“reg_sz”,另一种常见类型是“reg_dword”;值为 D:\Java\jdk1.6.0_07;b.使用变量set SoftWareHome=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Javareg add “%SoftWareHome%Web Start\1.6.0_07” /v Home /t reg_sz /d “%cd%\jre1.6.0_07\bin” /fc.如果注册表的名称有空格,或者数据用特殊符号时reg add “%SoftWareHome2%\HelpCommands” /v “01:Online Documentation” /t reg_sz /d “”%cd%\Documentation\Index.htm"" /f传入值为(值用双引号括起来的):“D:\ProgramFiles\1.work_soft\Sybase\PowerDesigner_12\Documentation\Index.htm”reg add “%SoftWareHome2%\Paths” /v ReportTemplates /t reg_sz /d “%cd%\Resource Files\Report Templates\” /f传入值为(“\”结尾的): E:\Holemar\1.notes\90. Windows\Resource Files\Report Templatesd.增加空的内容reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg\IMJPMIG8.1”e.添加或修改默认值reg add “%vpath%InstallPath” /ve /t reg_sz /d “%cd%” /f这里用“/ve”来代替一般修改时的“/v 变量名”,即可修改默认值了
删除注册表的内容双引号里面的是注册表的目录,下面两句将删除这目录下的所有信息reg delete “HKEY_CURRENT_USER\Software\RealVNC” /freg delete “HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC” /f双引号里面的是注册表的目录,下面一句将删除这目录下指定的某个信息reg delete “HKEY_LOCAL_MACHINE\Software\RealVNC” /v VNC_Server /f
注册表的常用位置a.系统启动项:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run][HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]example: REG ADD HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run /v VNC_Server /t REG_SZ /d “%cd%\VNC_Server.bat” /fb.系统环境变量:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]c.当前用户的环境变量:[HKEY_CURRENT_USER\Environment]
修改注册表之后,结束并重新加载explorer.exe进程,可刷新注册表,令其生效taskkill /f /im explorer.exe >nulstart “” “explorer.exe” 九、系统服务 停止服务:NET STOP 服务名启动服务:NET Start 服务名
设置启动类型自动: SC CONFIG 服务名 START= auto手动: SC CONFIG 服务名 START= demand已禁用:SC CONFIG 服务名 START= disabled附:“START= ”等号后面必须要有一个空格。(start还有boot,system两个值)Sample: SC CONFIG Spooler START= demand (打印机加载项,设置成手动,默认自动)
查看系统服务:start %SystemRoot%\system32\services.msc /ssetlocal与变量延迟
在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行。example:set a=4set a=5 & echo %a%结果:4也可以对这种机制加以利用,如下的变量交换example:set var1=abcset var2=123echo 交换前: var1=%var1% var2=%var2%set var1=%var2%& set var2=%var1%echo 交换后: var1=%var1% var2=%var2%
启动批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止。语法: setlocal {enableextension
disableextensions} {enabledelayedexpansion
disabledelayedexpansion}enableextension: 启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。disableextensions: 禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。enabledelayedexpansion: 启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。disabledelayedexpansion: 禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。examle:setlocal enabledelayedexpansionset a=4set a=5 & echo !a!结果: 5变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了另外,启动变量延迟,“%”的变量还是不变example2:setlocal enabledelayedexpansionfor /l %%i in (1,1,5) do (set a=%%iecho !a!)结果,打印从1到5;如果不变量延迟,一个变量也没有打印

我要回帖

更多关于 bat修改文件内容 的文章

 

随机推荐