中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 有关两个BAT问题的求助,请帮忙解决,谢谢
作者:
标题: 有关两个BAT问题的求助,请帮忙解决,谢谢 上一主题 | 下一主题
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『楼 主』:  有关两个BAT问题的求助,请帮忙解决,谢谢


转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块。虽属论坛新手,但注册也有一年多了,应该对论坛有所熟悉了,适当的扣分予以提醒。
——管理员





我对BAT比较感兴趣,所以常弄弄,现在遇到两个问题,想了一些时间也没能解决,
所以现在想请各位精通BAT的朋友帮个忙,
第一个问题是:我想做一个BAT,用它来提取一个路径
这个路径是在注册表中的,大家都知道从注册表里导出来的注册表文件,路径都是用
双斜杠("\\")来标的,而不是用单斜杠("\")来标志的。
现在就拿QQ的安装路径来做个比如说吧。
以下是我做的提取路径的前面部分,后面做不出来

@Echo off
reg export HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQ\ 1.txt
for /f "tokens=1* delims==" %%i in ('find /I "=" 1.txt') do echo %%j >2.txt

如果你的QQ安装在C:\program files\tencent\qq\下
那么你在1.txt里得到的是下面这段:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQ\]
"Install"="C:\\Program Files\\Tencent\\QQ\\"

而在2.txt里得到的是:

"C:\\Program Files\\Tencent\\QQ\\"

而我现在想要得到 C:\Program Files\Tencent\QQ\ 这样一个形式的显示,
该怎么做呢?
当然,大家也不需要从我做的这个前面两句着手,可以完全用自己的方法。
只要结果能得到 C:\Program Files\Tencent\QQ\  这个形式就可以了。

我尝试过下面的方法

@Echo off
reg export HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQ\ 1.txt
for /f "tokens=1* delims==" %%i in ('find /I "=" 1.txt') do echo %%j >2.txt
set /a n=2
:loop
set /a m=%n%+1
find /i "\\" %n%.txt >NUL
if %errorlevel%==0  set /a n=%n%+1&& for /f "tokens=1* delims=\\" %%i in ('type %n%.txt') do echo %%i\%%j >%m%.txt&&goto loop

但结果,只能得到 "C:\Program Files\\Tencent\\QQ\\" 而且是无止尽的循环

希望各位精通BAT的朋友能顺便帮我指出一下,上面这段批中出的问题在哪里。
不胜感激。



第一种方法是 Slore  提供的,在我原来的基础上使用了set的功能,有点类似重命名。
用最小改动达到要求。实在。
感谢  Slore ,具体如下:
@Echo off
echo y|reg export HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\ 1.txt
for /f "tokens=1* delims==" %%i in ('find /I "QQ.exe" 1.txt') do set a=%%j
set %a%=%a:\\=\%
echo %a% >2.txt
第二种方法,是  tireless    提供的,改进了我的做法,一步到位。精简。
感谢  tireless
@Echo off
echo y|reg export HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\ 1.txt
for /f "tokens=1* delims==" %%i in ('find /I "QQ.exe" 1.txt') do echo %%~fj >2.txt




第二个问题,说起来比较简单,就是我想给一个文件夹里的每个文件都加上序列号,应该怎么做呢?
举例说明一下:假设我在D盘下有一个文件夹MP3,里面有很多歌,我现在想不改变歌曲的名字,
仅在歌曲前面加上01,02,03……这样的序列号,应该怎么做呢?




第二个问题,Slore  朋友让我去搜索,没想到关键字。
结果有朋友发贴询问有关两个文本行对行合并的问题。
地址在这:http://www.cn-dos.net/forum/viewthread.php?tid=45985&fpage=4
有朋友做出来了回答,于是偷师于此,解决了我的问题
具体于下:
@echo off
dir /b >%temp%\1.txt
Setlocal Enabledelayedexpansion
set /a m=0
set /a n=0
set /a a=0
for /f %%k in (%temp%\1.txt) do set /a a+=1
for /l %%i in (1 1 !a!) do (
set /a m+=1
for /f %%j in (%temp%\1.txt) do (
set /a n+=1
if !m!==!n! set b=%%i%%j&&if %%i lss 10 (rename "%%j" "0!b!") else rename "%%j" "!b!"
)
set /a n=0
)
endlocal


[ Last edited by raythunder on 2009-2-9 at 15:21 ]

   此帖被 -2 点积分    点击查看详情   
评分人:【 DOSroot 分数: -2  时间:2009-1-29 23:15


2009-1-29 15:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『第 2 楼』:  

发贴至今有三天了.浏览量有四十一,
高手们怎么还没过完年来上网呢?
或许这个时候发贴真不是时候。

看到有个问题讨论的版就进来了,没想到进错了地方.
感谢Manager斧正!!!
继续期待结果.

这些天,在家里,上网不方便,但每隔几天我会来看看结果.
希望路过的朋友,顺便顶一下,
别让帖子沉了.
一直期待结果中……

2009-1-31 15:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

...

set a=C:\\Program Files\\Tencent\\QQ\\
set a=%a:\\=\%
echo %a%



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-1-31 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『第 4 楼』:  

感谢 Slore 有回帖
结果出来了
想请问一下
set a=%a:\\=\%
这句应该怎么理解?

2009-1-31 15:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

替换\\为\

set /? 好好看下吧。

重命名的那个,论坛也有很多帖子了,善用搜索。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-1-31 15:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『第 6 楼』:  

多谢 Slore 解惑
第二个问题能一起解决吗?

2009-1-31 15:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 7 楼』:  

论坛,搜索吧。很多例子



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-1-31 19:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  



  Quote:
@Echo off
reg export HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQ\ 1.txt
for /f "tokens=1* delims==" %%i in ('find /I "=" 1.txt') do echo %%~fj >2.txt

这样可以变双斜杠为单斜杠。

2009-1-31 23:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『第 9 楼』:  

%~fI        - 将 %I 扩充到一个完全合格的路径名
感谢 tireless  又提供新的一种方法.

2009-2-1 15:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
raythunder
初级用户





积分 47
发帖 30
注册 2007-12-18
状态 离线
『第 10 楼』:  

感谢各位朋友的帮助及论坛相关帖子帮助.
TKS

2009-2-9 15:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: