|
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 ]
|
|
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 |
|