标题: [文本处理] 批处理如何截取一段字符串中间的文本? [打印本页]
作者: zjx4160zl 时间: 2012-5-21 14:45 标题: 批处理如何截取一段字符串中间的文本?
executable REG_SZ C:\Program Files\a\a.exe
这种情况该怎么把C:\Program Files\a截取出来?我试过用\做分隔符,但c:\就没有了,用空格的话Program Files怎么处理?
作者: apang 时间: 2012-5-21 15:07
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("executable REG_SZ C:\Program Files\a\a.exe") do (
- set "str=%%a"
- set "str=!str:*reg_sz=!"
- for /f "tokens=*" %%b in ("!str!") do echo %%~dpb
- )
- pause
复制代码
作者: zjx4160zl 时间: 2012-5-21 15:56
回复 2# apang
非常感谢,只是有些命令不太明白,有介绍批处理命令的帖子吗?
作者: apang 时间: 2012-5-21 16:00
回复 3# zjx4160zl
可以站内搜索
作者: gawk 时间: 2012-5-21 19:52
回复 3# zjx4160zl
http://www.bathome.net/thread-2576-1-1.html
作者: gawk 时间: 2012-5-21 19:53
回复 4# apang
你得给人家提供个关键字啊至少
作者: zjx4160zl 时间: 2012-5-23 14:28
呵呵,我是新学Bat,有很多都不明白,%%~dpb是什么意思?
作者: apang 时间: 2012-5-23 14:42
回复 7# zjx4160zl
http://www.bathome.net/viewthread.php?tid=2205
作者: zjx4160zl 时间: 2012-5-23 14:58
回复 8# apang
所以,代码最后引用的其实是变量b?
作者: zjx4160zl 时间: 2012-5-23 15:44
本帖最后由 zjx4160zl 于 2012-5-23 16:07 编辑
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('reg query HKCU\Software\Aerofox\foxmail\ /v executable') do (
- set "str=%%a"
- set "str=!str:*reg_sz=!"
- for /f "tokens=*" %%b in ("!str!") do echo %%~dpb
- )
- pause
复制代码
这段代码为什么会显示批处理所在的路径??
作者: apang 时间: 2012-5-24 09:31
回复 10# zjx4160zl
reg query命令显示的内容有很多行,你需要先定位到executable的那一行。试试看:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('reg query hkcu\Software\Aerofox\foxmail^|findstr /i "executable"') do (
- set "str=%%a"
- set "str=!str:*reg_sz=!"
- for /f "tokens=*" %%b in ("!str!") do echo %%~dpb
- )
- pause
复制代码
作者: zjx4160zl 时间: 2012-5-24 09:44
回复 11# apang
是这个原因?可是多显示的信息是批处理所在的路径,代码里并没有这个命令啊。
作者: apang 时间: 2012-5-24 09:56
回复 12# zjx4160zl
reg query hkcu\Software\Aerofox\foxmail /v executable显示的内容应该是:
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\Aerofox\foxmail
executable REG_SZ C:\Program Files\Foxmail\Foxmail.exe
for循环读取这几行的内容,如果%%~dpb无法扩展,就显示批处理本身的驱动器和路径
作者: zjx4160zl 时间: 2012-5-24 11:48
回复 13# apang
非常感谢,终于明白了,这就回去改
作者: 喃喃努努 时间: 2012-5-24 11:54
太难懂了。
作者: zjx4160zl 时间: 2012-5-24 13:47
回复 2# apang - @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("executable REG_SZ C:\Program Files\a\a.exe") do (
- set "str=%%a" ::给str赋值
- set "str=!str:*reg_sz=!" ::分割Reg_SZ之前的字符并重新赋值给str
- for /f "tokens=*" %%b in ("!str!") do echo %%~dpb ::这段就不清楚了,看起来像是把str的值传递给b,然后显示出来,那a.exe是怎么去掉的呢?这个地方b的值难道不包含c:\Program files?后面为什么要用延迟扩展
- )
- pause
复制代码
好多不明白啊,这样理解有对的地方吗?
作者: apang 时间: 2012-5-24 16:10
回复 16# zjx4160zl - @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ("executable REG_SZ C:\Program Files\a\a.exe") do (
- set "str=%%a"
- rem 给str赋值
- set "str=!str:*reg_sz=!"
- rem 删除Reg_SZ及Reg_SZ之前的字符并重新赋值给str,此时str值为" C:\Program Files\a\a.exe"(不含引号)。
- for /f "tokens=*" %%b in ("!str!") do echo %%~dpb
- rem %%~dpb是对变量%%b的扩展,先去掉C:\Program Files\a\a.exe前面的空格,再扩展为驱动器和路径。
- )
- pause
复制代码
这下你该明白了
作者: zjx4160zl 时间: 2012-5-25 10:41
回复 17# apang
嗯,这段明白了,我今天有扩充了下,但貌似%%b不能直接引用,%%~dbp也不行,这个变量只能显示不能使用吗?
作者: apang 时间: 2012-5-25 12:13
将echo %%~dpb修改为set var=%%~dpb或set var=%%b,引用变量var的值即可
作者: terse 时间: 2012-5-26 01:03
回复 18# zjx4160zl
可以使用(仅此情况下)- @echo off
- for /f "tokens=2*" %%a in ("executable REG_SZ C:\Program Files\a\a.exe") do set "str=%%~dpb"
- echo %str%
- pause
复制代码
作者: zjx4160zl 时间: 2012-5-29 13:12
嗯,我的问题都解决了,非常感谢,现在来慢慢研究批处理
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |