Board logo

标题: [注册表类] 求助,XP系统出现命令行参数过多.(win7,xp)下提示'reg' 不是内部或外部命令 [打印本页]

作者: jason128    时间: 2014-12-18 15:33     标题: 求助,XP系统出现命令行参数过多.(win7,xp)下提示'reg' 不是内部或外部命令

以下代码是最终想用的.在win8下运行没有报错.
但是在win7跟xp机上面运行就会说不是内部或外部命令,也不是可运行的程序
  1. @echo off
  2. ::path
  3. ::keyword
  4. ::bakfile
  5. set path=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
  6. set keyword=NetworkAddress
  7. set bakfile=C:\reg4d36e972Bak.reg
  8. ::Bak up reg
  9. echo "Reg backup..."
  10. reg export %path% %bakfile%
  11. ::Iterate out put path\keywords and delete
  12. for /f "tokens=* delims= " %%i in ('reg query %path% /s /v %keyword% ^| findstr %path%') do (
  13. echo "Removing...    " %%i
  14. reg delete %%i /v %keyword% -f
  15. )
  16. rem netsh winsock reset
  17. rem shutdown -r
  18. pause
复制代码
经过百度.在文件开头加上这些代码.就不会报这个错了.但是感觉不是太安全.希望各位大大指点一下(这段bat是要在很多台机上运行的.所以没办法每一台机去设置环境变量)
  1. cd..
  2. cd..
  3. cd..
  4. cd c:/WINDOWS/SYSTEM32
复制代码
而在XP系统上,单独运行以下代码,则会报
"C:\WINDOWS\system32>reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Cl
ass\{4d36e972-e325-11ce-bfc1-08002be10318} /s /v NetworkAddress

错误: 命令行参数太多

C:\WINDOWS\system32>pause
请按任意键继续. . ."
  1. cd..
  2. cd..
  3. cd..
  4. cd c:/WINDOWS/SYSTEM32
  5. reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318} /s /v NetworkAddress   
  6. pause
复制代码

作者: jason128    时间: 2014-12-18 15:34

回复 1# jason128


    感谢各位大大..时间比较紧.希望各位帮助了.
作者: apang    时间: 2014-12-18 16:07

path 是系统变量,在批处理中修改了它的值,当然会出现找不到路径的错误
xp下 reg query 的 /s 和 /v 开关不能一起使用,用 if 判断吧
作者: jason128    时间: 2014-12-18 18:09

回复 3# apang


    另外有个很奇怪的地方..在搜索HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}下的键好像都找不到..
但是HKEY_LOCAL_MACHINE\SOFTWARE\Adobe这个里面的键就可以搜到..是权限的问题吗
作者: shelluserwlb    时间: 2014-12-18 20:23

path是环境变量保留字。  不要用path作为自己程序中的变量名。
作者: Linuxer    时间: 2014-12-19 09:57

计算机or我的电脑,右键属性,高级-系统变量,改下PATH的值。
  1. %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
复制代码
楼上几位都说的很清楚了,,PATH是系统变量,,不要作为自定义变量名来使用!
作者: jason128    时间: 2014-12-19 10:16

回复 6# Linuxer


    改系统变量是可以..但是因为是要批量的操作一大堆机子..所以这样去改系统变量不是太可行..暂时只能手动去到system32去操作.
作者: Linuxer    时间: 2014-12-19 10:37

本帖最后由 Linuxer 于 2014-12-19 10:39 编辑

回复 7# jason128

进入system32,然后批处理执行:
  1. set path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
复制代码

作者: DAIC    时间: 2014-12-19 10:58

回复 7# jason128


他们的意思是让你改脚本里面的变量名,而不是去修改操作系统的环境变量。
@echo off
::mypath
::keyword
::bakfile
set mypath=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
set keyword=NetworkAddress
set bakfile=C:\reg4d36e972Bak.reg

::Bak up reg
echo "Reg backup..."
reg export %mypath% %bakfile%

::Iterate out put mypath\keywords and delete
for /f "tokens=* delims= " %%i in ('reg query %mypath% /s /v %keyword% ^| findstr %mypath%') do (
        echo "Removing...    " %%i
        reg delete %%i /v %keyword% -f
)

rem netsh winsock reset
rem shutdown -r
pause




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2