@ECHO OFF Echo Before Setlocal: Set PATH Pause Setlocal Rem reset environment var PATH Set PATH=E:\TOOLS Echo after Setlocal and reset PATH Set PATH Pause Endlocal Echo Recovery PATH by Endlocal Set PATH
' Create a WSH Shell object: Set wshShell = CreateObject( "WScript.Shell" ) ' ' Create a new key: wshShell.RegWrite "HKCU\TestKey\", ""
' Create a new DWORD value: wshShell.RegWrite "HKCU\TestKey\DWordTestValue", 1, "REG_DWORD"
' Create a new subkey and a string value in that new subkey: wshShell.RegWrite "HKCU\TestKey\SubKey\StringTestValue", "Test", "REG_SZ"
' Read the values we just created: WScript.Echo "HKCU\TestKey\DWordTestValue = " _ & wshShell.RegRead( "HKCU\TestKey\DWordTestValue" ) WScript.Echo "HKCU\TestKey\SubKey\StringTestValue = """ _ & wshShell.RegRead( "HKCU\TestKey\SubKey\StringTestValue" ) & """"
' Delete the subkey and key and the values they contain: wshShell.RegDelete "HKCU\TestKey\SubKey\" wshShell.RegDelete "HKCU\TestKey\"
' Note: Since the WSH Shell has no Enumeration functionality, you cannot ' use the WSH Shell object to delete an entire "tree" unless you ' know the exact name of every subkey. ' If you don't, use the WMI StdRegProv instead.
'read.vbs(将以下代码存为read.vbs文件) Dim OperationRegistry Set OperationRegistry=WScript.CreateObject("WScript.Shell") Dim Read_Data1,Read_Data2 Read_Data1=OperationRegistry.RegRead("HKCR\.xxf\") '读取根键HKEY_CLASSES_ROOT之下的.xxf主键的默认值,并将该数据送至变量Read_Data1 Read_Data2=OperationRegistry.RegRead("HKCR\.xxf\value") '读取.xxf主键之下的value键值的数据,并将该数据送至变量Read_Data2 MsgBox("Default="&Read_Data1&" value="&Read_Data2) '将读取的数据显示出来
'delete.vbs Dim OperationRegistry Set OperationRegistry=WScript.CreateObject("WScript.Shell") OperationRegistry.RegRead("HKCR\.xxf\value") '删除.xxf主键之下的value键值 OperationRegistry.RegRead("HKCR\.xxf\") '删除根键HKEY_CLASSES_ROOT之下的.xxf主键
'ReadComputerName.vbs Dim ReadComputerName Set ReadComputerName=WScript.CreateObject("WScript.Shell") Dim ComputerName,RegPath RegPath="HKLM\System\CurrentControlSet\Control\ ComputerName\ComputerName\ComputerName" ComputerName=ReadComputerName.RegRead(RegPath) MsgBox("计算机名为"&ComputerName)
2、隐藏快捷方式图标上的小箭头
复制代码代码如下:
'Hidden.vbs Dim HiddenArrowIcon Set HiddenArrowIcon=WScript.CreateObject("WScript.Shell") Dim RegPath1,RegPath2 RegPath1="HKCR\lnkfile\IsShortCut" RegPath2="HKCR\piffile\IsShortCut" HiddenArrowIcon.RegDelete(RegPath1) HiddenArrowIcon.RegDelete(RegPath2)
3、改造"开始"菜单
复制代码代码如下:
'ChangeStartMenu.vbs Dim ChangeStartMenu Set ChangeStartMenu=WScript.CreateObject("WScript.Shell") RegPath="HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\" Type_Name="REG_DWORD" Key_Data=1 StartMenu_Run="NoRun" StartMenu_Find="NoFind" StartMenu_Close="NoClose" Sub Change(Argument) ChangeStartMenu.RegWrite RegPath&Argument,Key_Data,Type_Name MsgBox("Success!") End Sub Call Change(StartMenu_Run) '禁用"开始"菜单中的"运行"功能 Call Change(StartMenu_Find) '禁用"开始"菜单中的"查找"功能 Call Change(StartMenu_Close) '禁用"开始"菜单中的"关闭系统"功能
4、向Windows中添加自启动程序 该程序能在开机时自动运行。
复制代码代码如下:
'AddAutoRunProgram.vbs '假设该程序在c:\myfile文件夹中,文件名为autorun.exe Dim AutoRunProgram Set AutoRunProgram=WScript.CreateObject("WScript.Shell") RegPath="HKLM\Software\Microsoft\Windows\CurrentVersion\Run\" Type_Name="REG_SZ" Key_Name="AutoRun" Key_Data="C:\Myfile\autorun.exe" '该自启动程序的全路径文件名 AutoRunProgram.Write RegPath&Key_Name,Key_Data,Type_Name '在启动组中添加自启动程序autorun.exe MsgBox("Success!")
重要:此部分、方法或任务包含一些介绍如何修改注册表的步骤。但是,如果不正确地修改了注册表,可能会出现严重的问题。因此,请确保仔细按照下列步骤操作。为增加保护,对其进行修改之前备份注册表。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
本分步指南介绍如何添加、修改或删除注册表子项和值,通过使用注册项 (.reg) 文件。Regedit.exe 使用.reg 文件来导入和导出注册表子项和值。这些.reg 文件可用于远程分发到多台基于 Windows 的计算机的注册表更改。当您运行.reg 文件时,该文件的内容合并到本地注册表中。因此,分发.reg 文件时必须谨慎。
RegistryEditorVersion要么是 Windows 2000、 Windows XP 和 Windows Server 2003 的 "Windows Registry Editor Version 5.00",要么是 Windows 98 和 Windows NT 4.0 的 "REGEDIT4"。"REGEDIT4"头还在基于 Windows 2000 的基于 Windows XP 的基于 Windows Server 2003 的计算机上工作。
If the snapshot.ini file excludes the HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections key by default, you can remove this key from the snapshot.ini file to ensure that ThinApp captures the key in the capture process.
If you do not customize the snapshot.ini file, the snapshot process loads the file from one of these locations:
•
Application Data\Thinapp\snapshot.ini
This location is the AppData directory of the user.
This script procedure adds a value to the physical system registry.
Add a value to the system registry
1
Create a .reg file and run the regedit /s command as an external process that accesses the system registry instead of the virtual registry.
Function OnFirstParentStart
2
Create the .reg file in a location that has the IsolationMode parameter set to Merged so that the virtual environment can access it with this script and the physical environment can access it with the regedit /s command.
RegFileName = ExpandPath("%Personal%\thin.reg")
Set fso = CreateObject("Scripting.filesystemObject")
Set RegFile = fso.CreateTextFile(RegFileName, true)
The %Personal% directory is a directory that has Merged isolation mode by default.
3
Construct the .reg file.
RegFile.WriteLine("Windows Registry Editor Version 5.00")
1、@ 一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件,然后运行,比较一下两条echo语句在屏幕上的输出差异: echo a @pause @echo b @pause 执行结果如下: C:\Documents and Settings\JM\桌面>echo a a 请按任意键继续...
请按任意键继续...
2、%、%% 百分号用在不同的场合,有不同的含义: ①当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%、%str%。把以下代码保存为批处理文件,运行后观察屏幕显示结果: @echo off set str=abc echo 变量 str 的值是: %str% pause 在屏幕上将显示这样的结果: 变量 str 的值是: abc 按任意键继续... 另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如%0、%1,其中,%0为脚本本身的名称,%1至%9为第二至九个参数...最多支持%0~%9,%10以后就是变量引用了,即%15为%1的值接上5。 请看演示代码: @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 ②出现在 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;
4、~ ①用在 set 语句中,和:同时使用时,起到截取字符串的功能,请参考上一条的解释; ②用在 set /a 语句中时,它是一元运算符号,表示将操作数字按位取反,例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1 ③用在for语句中,表示增强for的功能,能够提取到更多的信息。例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。
5、>、>> 一般而言,>表示用新内容覆盖原文件内容,>>表示向原文件追加内容,此时,它们以重定向符号的身份出现;如果用在 set /a 语句中,则>表示分组,>>表示逻辑移位;
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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步