Board logo

标题: [注册表类] 批处理如何根据文件名导出注册表项? [打印本页]

作者: 282842712474    时间: 2008-8-12 09:04     标题: 批处理如何根据文件名导出注册表项?

搜索当前指定目录的.sys文件,并依次赋予变量a
然后运行
REG EXPORT "HKLM\SYSTEM\CurrentControlSet\Services\“a”" AppBkUp.reg
Services\后面部分就是a变量。
a可能有多个,因此REG EXPORT "HKLM\SYSTEM\CurrentControlSet\Services\“a”" AppBkUp.reg
会运行多次。
请问这个bat该怎样写?
作者: pusofalse    时间: 2008-8-12 09:12

for %%a in (*.sys) do reg export "hklm\system\currentcontrolset\services\%%a" appbkup,reg
看下是不是这个意思。另外请修改标题,不要用这种“万能”类的。
作者: 282842712474    时间: 2008-8-12 09:22

有两个问题:
1.我需要指定目录,比如C:\windows
2.忘记了说,a为当前的sys,但是要去掉后缀,即有22.sys,就是a=22
作者: pusofalse    时间: 2008-8-12 09:41

for %%a in (c:\windows\*.sys) do reg export "hklm\system\currentcontrolset\services\%%~na" appbkup,reg

如果是别的路径,只需替换()中的c:\windows\
看下这样对否。
作者: 282842712474    时间: 2008-8-12 10:19

成功,

假如我需要为每一个a都生成一个reg文件,那要怎样做?

假如有两个a,就生成1.reg和2.reg,类推...

就是替换掉appbkup,reg,分别用1.reg,2.reg来表示

至于reg的命名,就用阿拉伯数字传递下去
作者: pusofalse    时间: 2008-8-12 10:22

  1. @echo off
  2. for %%a in (c:\windows\*.sys) do (
  3.      set/a n+=1
  4.      call reg export "hklm\system\currentcontrolset\services\%%~na" %%n%%.reg
  5. )
  6. pause
复制代码

[ 本帖最后由 pusofalse 于 2008-8-12 11:02 编辑 ]
作者: 282842712474    时间: 2008-8-12 10:53

假如把指定的目录替换成

搜索指定目录下的含有名字“sata”字眼的文件夹

并且把注册表放在C:\reg
作者: 282842712474    时间: 2008-8-12 10:56

还有楼上的代码不成功,只是生成了一个“!n!.reg”
作者: pusofalse    时间: 2008-8-12 10:58

  1. @echo off
  2. if not exist c:\reg md c:\reg
  3. for /f "delims=" %%a in ('dir/b/s/ad *sata*') do set "folderpath=%%a"
  4. for %%a in ("%folderpath%\*.sys") do (
  5.    set/a n+=1
  6.    call reg export "hklm\system\currentcontrolset\services\%%~na" c:\reg\%%n%%.reg
  7. )
  8. start c:\reg\
复制代码

[ 本帖最后由 pusofalse 于 2008-8-12 11:12 编辑 ]
作者: pusofalse    时间: 2008-8-12 11:01

原帖由 282842712474 于 2008-8-12 10:56 发表
还有楼上的代码不成功,只是生成了一个“!n!.reg”

oh....sorry  太粗心了。已经修改。
作者: 282842712474    时间: 2008-8-12 11:09

测试环境,当前目录下有DriversVIA Serial ATA Controller - 3149文件夹

代码:
@echo off
if not exist c:\reg md c:\reg
for /f "delims=" %%a in ('dir/b/s/ad *Serial ATA *') do set "folderpath=%%a"
for %%a in (%folderpath%\*.sys) do (
   set/a n+=1
   call reg export "hklm\system\currentcontrolset\services\%%~na" c:\reg\%%n%%.reg
)
start c:\reg\

提示:找不到文件
作者: pusofalse    时间: 2008-8-12 11:11

忘记加""了 再试下。。
...
for %%a in ("%folderpath%\*.sys") do (
... ..

其他不变
作者: 282842712474    时间: 2008-8-12 11:23

信息


D:\BoJoneBackup>if not exist c:\reg md c:\reg

D:\BoJoneBackup>for /F "delims=" %a in ('dir/b/s/ad *ata*') do set "folderpath=%
a"

D:\BoJoneBackup>set "folderpath=D:\BoJoneBackup\DriversVIA Serial ATA Controller
- 3149"

D:\BoJoneBackup>set "folderpath=D:\BoJoneBackup\DriversVIA ATA Channel"

D:\BoJoneBackup>set "folderpath=D:\BoJoneBackup\Desktop\AusLogicsVisualStyler_En
\AusLogicsVisualStyler_En\Data"

D:\BoJoneBackup>set "folderpath=D:\BoJoneBackup\Desktop\SeaVoyage3DScreensaver\S
ea Voyage 3D Screensaver\App\Data"

D:\BoJoneBackup>set "folderpath=D:\BoJoneBackup\Desktop\SeaVoyage3DScreensaver\S
ea Voyage 3D Screensaver\App\Data\catalog"

D:\BoJoneBackup>for %a in ("D:\BoJoneBackup\Desktop\SeaVoyage3DScreensaver\Sea V
oyage 3D Screensaver\App\Data\catalog\*.sys") do (
set/a n+=1
call reg export "hklm\system\currentcontrolset\services\%~na" c:\reg\%n%.reg
)

D:\BoJoneBackup>start c:\reg\

D:\BoJoneBackup>pause
请按任意键继续. . .
作者: pusofalse    时间: 2008-8-12 11:26

我觉得没有出错啊。。。
路径是其中包含ata字串的。
而且运行时,这不是没有出错信息吗。
作者: 282842712474    时间: 2008-8-12 13:39

但是最后你没有生成注册表
作者: batman    时间: 2008-8-12 13:51


请楼主引以注意了:
  通观了楼主与pusofalse版主的对话贴,本人不得不指出导致问题迟迟得不到有效解决
的根本问题在于,楼主没有一次性把你要解决的问题和达到的目的描述清楚,而是一直在左
改右改,这样叫别人怎么帮助你?在论坛发贴求助的那么多,要是每个人都如同你一样,大
家不知道要白白浪费多少时间和精力,所以请楼主在以后发贴求助时注意这一点了。

作者: 282842712474    时间: 2008-8-12 15:27

我只是想渐进解决而已




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