中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何在变量中查找字符?(未解决)
作者:
标题: 请教如何在变量中查找字符?(未解决) 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  请教如何在变量中查找字符?(未解决)

 我有个批处理需要在变量中判断是否含有指定字符,如下:
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
2008-3-30 19:02
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

为什么一定要这样呢?
echo !str!|findstr "!" 不行吗??

2008-3-30 19:06
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
sylovanas
初级用户





积分 107
发帖 42
注册 2007-9-3
状态 离线
『第 3 楼』:  

findstr "!" !str!
表示findstr要寻找 档案名称为!str!变量值的档案,然后在那档案中寻找!这个字串
但实际上str变量并没有产生档案
所以会无法执行

2008-3-30 19:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by huahua0919 at 2008-3-30 19:06:
为什么一定要这样呢?
echo !str!|findstr "!" 不行吗??

这样是达不到效果的,只会显示每个变量+|findstr "!"字符。



批处理之家新域名:www.bathome.net
2008-3-30 19:42
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

具体什么用处,我还不是很明白,代码帖出来看看,也许有其他解决途径

2008-3-30 19:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  


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
2008-3-30 19:56
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 7 楼』:  

我看效果一样

2008-3-30 20:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 8 楼』:  

有必要这么麻烦吗?
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
)

不就行了??

2008-3-30 20:06
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
balinger
中级用户




积分 356
发帖 115
注册 2004-7-27
状态 离线
『第 9 楼』:  

if "%str:!=%"=="%str%" (echo 无!) else (echo 有!)

2008-3-30 20:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 10 楼』:  



  Quote:
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
2008-3-30 20:24
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  原始部分代码如下:


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
2008-3-30 20:26
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 12 楼』:  

小心 setlocal enabledelayedexpansion
对!的错误扩充。很....

2008-3-30 21:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: