Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript VBS-如何检查注册表数据中是否存在单词,然后将其删除?_Vbscript_Registry_Registrykey - Fatal编程技术网

Vbscript VBS-如何检查注册表数据中是否存在单词,然后将其删除?

Vbscript VBS-如何检查注册表数据中是否存在单词,然后将其删除?,vbscript,registry,registrykey,Vbscript,Registry,Registrykey,我必须有一个vbs脚本,它可以删除字符串“vmhgfs”(coma很重要),如果它存在于a注册表数据中 注册表项是: “HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order” 注册表值为“ProviderOrder”(它是一个字符串值) 数据类似于“PICAClientNetwork、SNACPP、vmhgfs、RDPNP、LanmanWorkstation、webclient、PnSson”,

我必须有一个vbs脚本,它可以删除字符串“vmhgfs”(coma很重要),如果它存在于a注册表数据中

注册表项是: “HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order”

注册表值为“ProviderOrder”(它是一个字符串值)

数据类似于“PICAClientNetwork、SNACPP、vmhgfs、RDPNP、LanmanWorkstation、webclient、PnSson”,但在不同的计算机上可能会有很大的不同

脚本必须检查此数据中是否存在字符串“vmhgfs”,如果存在,则将其删除。如果它不存在,就结束吧

我是VBS的新手,我已经开始编写以下脚本:

    Dim objShell, RegValue, RegData
    RegValue = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder"
    set objShell = CreateObject("Wscript.Shell")
    RegData = objShell.RegRead(RegKey)
    wscript.echo RegData
回音告诉我我走对了。。。但是没有足够的技能去进一步。。。 你能帮我完成它吗!非常感谢

编辑(在应用建议之前):

嗨,谢谢你们,我写了剧本:

Dim objShell, RegValue, RegData, NewRegData
RegValue = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder"
set objShell = CreateObject("Wscript.Shell")
RegData = objShell.RegRead(RegValue)

if Instr(RegData,",vmhgfs") > 0 then
NewRegData = Replace(RegData,",vmhgfs", "")
objshell.Regwrite RegValue ,NewRegData
    Else IF Instr(RegData,"vmhgfs") > 0 then
    NewRegData2 = Replace(RegData,"vmhgfs,", "")
    objshell.Regwrite RegValue ,NewRegData2
End If
set objshell = nothing

第一个“IF”是管理“,VMHGFS”位于字符串中间的情况。好的,第二个“IF”用于管理“vmhgfs”位于字符串开头的情况

但是如果“vmhgfs”位于字符串的最末端,则这不起作用

我不明白,请帮帮我

这个怎么样

if InStr(1,RegData,",vmhgfs") > 0 then
NewRegData = left(RegData,InStr(1,RegData,",vmhgfs")) & right(RegData,7+InStr(1,RegData,",vmhgfs"))
或者(根据Ansgar:)


然后您只需将它写回注册表

我在这里使用正则表达式而不是
InStr
,因为后者也会(错误地)检测到
、vmhgfsFOOBAR
之类的东西

Set sh = CreateObject("Wscript.Shell")
Set re = New RegExp
re.Global = True

val = "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder"

re.Pattern = "(^|,)vmhgfs(,|$)"
data = re.Replace(sh.RegRead(val), ",")
re.Pattern = "^,|,$"
sh.RegWrite val, re.Replace(data, ""), "REG_SZ"

只需使用
Replace
而不是摆弄字符串操作:
newRegData=Replace(RegData,”,vmhgfs“,”)
Set sh = CreateObject("Wscript.Shell")
Set re = New RegExp
re.Global = True

val = "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder"

re.Pattern = "(^|,)vmhgfs(,|$)"
data = re.Replace(sh.RegRead(val), ",")
re.Pattern = "^,|,$"
sh.RegWrite val, re.Replace(data, ""), "REG_SZ"