中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-07 23:29
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何在变量中查找字符?(未解决) 查看 815 回复 11
楼 主 请教如何在变量中查找字符?(未解决) 发表于 2008-03-30 19:02 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
 我有个批处理需要在变量中判断是否含有指定字符,如下:
echo off
for /f "skip=2 tokens=*" %%i in ('findstr "." a.bat') do (
set str=%%i
setlocal enabledelayedexpansion
findstr "!" !str!
if errorlevel 1 set str=!str:a=b!
echo !str! >>a.txt
endlocal
)
 可执行时总提示findstr不能打开......也就不能进行判断了,只好请教大家了。

[ Last edited by zw19750516 on 2008-3-30 at 11:00 PM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-03-30 19:06 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
为什么一定要这样呢?
echo !str!|findstr "!" 不行吗??
3 发表于 2008-03-30 19:33 ·  中国 台湾 宜兰县 中华电信
初级用户
积分 107
发帖 42
注册 2007-09-03 16:43
18年会员
UID 96475
性别 男
状态 离线
findstr "!" !str!
表示findstr要寻找 档案名称为!str!变量值的档案,然后在那档案中寻找!这个字串
但实际上str变量并没有产生档案
所以会无法执行
4 发表于 2008-03-30 19:42 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by huahua0919 at 2008-3-30 19:06:
为什么一定要这样呢?
echo !str!|findstr "!" 不行吗??

这样是达不到效果的,只会显示每个变量+|findstr "!"字符。
批处理之家新域名:www.bathome.net
5 发表于 2008-03-30 19:49 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
具体什么用处,我还不是很明白,代码帖出来看看,也许有其他解决途径
6 发表于 2008-03-30 19:56 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
echo off
for /f "skip=2 tokens=*" %%i in ('findstr "." a.bat') do (
set str=%%i
setlocal enabledelayedexpansion
echo !str! >temp.txt
findstr "!" temp.txt
del temp.txt
  if errorlevel 1 set str=!str:a=b!
echo !str! >>a.txt
endlocal
)

问题还是未得到解决,好像findstr不能实现这样的查找,是不是它的一个bug啊?

[ Last edited by zw19750516 on 2008-3-30 at 11:02 PM ]
批处理之家新域名:www.bathome.net
7 发表于 2008-03-30 20:02 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
我看效果一样
8 发表于 2008-03-30 20:06 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
有必要这么麻烦吗?
for /f "skip=2 tokens=*" %%i in ('findstr "." a.bat') do (
set str=%%i
echo %%i|findstr "!">nul&&call,echo %%str:a=b%%>>a.txt
)

不就行了??
9 发表于 2008-03-30 20:10 ·  中国 福建 福州 连江县 电信
中级用户
★★
积分 356
发帖 115
注册 2004-07-27 00:00
22年会员
UID 29114
性别 男
状态 离线
if "%str:!=%"=="%str%" (echo 无!) else (echo 有!)
10 发表于 2008-03-30 20:24 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by abcd at 2008-3-30 20:06:
有必要这么麻烦吗?
for /f "skip=2 tokens=*" %%i in ('findstr "." a.bat') do (
set str=%%i
echo %%i|findstr "!">nul&&call,echo %%str:a=b%%> ...

 如这样的话,不包含"!"的变量就全丢了啊,我的意思是对a.bat中的每行进行数次字符替换,如果行中包含"!"字符就不替换,把结果全输入到a.txt中。
批处理之家新域名:www.bathome.net
11 原始部分代码如下: 发表于 2008-03-30 20:26 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
for /f "skip=2 tokens=*" %%i in ('findstr "." a.bat') do (
set str=%%i
setlocal enabledelayedexpansion
  echo !str! >temp.txt
findstr "!" temp.txt
if errorlevel 0 goto echo
set str=!str:a=犇!
set str=!str:b=猋!
set str=!str:c=骉!
set str=!str:d=蟲!
set str=!str:e=麤!
set str=!str:f=毳!
set str=!str:g=淼!
set str=!str:h=掱!
set str=!str:i=焱!
set str=!str:j=垚!
set str=!str:k=煊!
set str=!str:l=烜!
set str=!str:m=煐!
set str=!str:n=焓!
set str=!str:o=烓!
set str=!str:p=焺!
set str=!str:q=瓛!
set str=!str:r=炜!
set str=!str:s=翙!
set str=!str:t=燚!
set str=!str:u=焜!
set str=!str:v=琰!
set str=!str:w=燊!
set str=!str:x=眚!
set str=!str:y=奡!
set str=!str:z=慤!
:echo
del temp.txt
echo !str! >>a.txt
endlocal
)


[ Last edited by zw19750516 on 2008-3-30 at 11:06 PM ]
批处理之家新域名:www.bathome.net
12 发表于 2008-03-30 21:07 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
小心 setlocal enabledelayedexpansion
对!的错误扩充。很....
论坛跳转: