[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 求助,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
复制代码

回复 1# jason128


    感谢各位大大..时间比较紧.希望各位帮助了.

TOP

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

TOP

回复 3# apang


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

TOP

path是环境变量保留字。  不要用path作为自己程序中的变量名。

TOP

计算机or我的电脑,右键属性,高级-系统变量,改下PATH的值。
  1. %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
复制代码
楼上几位都说的很清楚了,,PATH是系统变量,,不要作为自定义变量名来使用!
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

回复 6# Linuxer


    改系统变量是可以..但是因为是要批量的操作一大堆机子..所以这样去改系统变量不是太可行..暂时只能手动去到system32去操作.

TOP

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

回复 7# jason128

进入system32,然后批处理执行:
  1. set path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
复制代码
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

回复 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

TOP

返回列表