找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37846|回复: 10

[文本处理] 【已解决】求助批处理findstr命令用变量代替带双引号的搜索字符串时无法正确查找

[复制链接]
发表于 2014-3-3 22:01:51 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-5 22:55 编辑

批处理命令findstr搜索字符串为变量引起的问题
test.txt:
  1. <element id="10" type="exercise"  name="dismal" />
复制代码
搜索其中的字符串name=”dismal“,代码如下:
  1. @echo off
  2. set word=name="dismal"
  3. echo %word%
  4. findstr %word% 1.txt
  5. echo %errorlevel%
  6. pause
复制代码
返回值为1,不成功。但是变量word是赋值成功了的。如果不使用变量,直接用字符串查找,却是可以的。如下:
  1. @echo off
  2. findstr "name="dismal"" 1.txt
  3. echo %errorlevel%
  4. pause
复制代码
这就怪了,究竟是什么地方的问题呢?请大家指点,深表感谢!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-3-3 22:55:13 | 显示全部楼层
本帖最后由 apang 于 2014-3-4 00:09 编辑

如果不加外围引号,name="dismal" 中的等号需要转义,否则会被认为是命令分割符
findstr name^=\"dismal\" 1.txt

回答错误,这里的等号不需要转义,引号需要转义。
 楼主| 发表于 2014-3-3 23:03:11 | 显示全部楼层
本帖最后由 ge_xin_yu 于 2014-3-3 23:08 编辑
如果不加外围引号,name="dismal" 中的等号需要转义,否则会被认为是命令分割符
findstr name^=\"dismal\" ...
apang 发表于 2014-3-3 22:55



    谢谢!但是我用变量作为搜索字符串该怎么处理呢?如何处理%word%中的等号呢?
发表于 2014-3-3 23:06:55 | 显示全部楼层
set "var=a^=\"bc\""
 楼主| 发表于 2014-3-3 23:11:04 | 显示全部楼层
本帖最后由 ge_xin_yu 于 2014-3-3 23:15 编辑
set "var=a^=\"bc\""
apang 发表于 2014-3-3 23:06



    谢谢!按您的方法修改如下,可以正常搜索。但是word却被赋值为name=\"dismal\",正常应该是name="dismal"啊。
  1. @echo off
  2. set "word=name^="dismal""
  3. echo %word%
  4. findstr %word% 1.txt
  5. echo %errorlevel%
  6. pause
复制代码
 楼主| 发表于 2014-3-3 23:18:38 | 显示全部楼层
如果不加外围引号,name="dismal" 中的等号需要转义,否则会被认为是命令分割符
findstr name^=\"dismal\" ...
apang 发表于 2014-3-3 22:55



    试了一下,即便=号不转义,findstr也可以正常搜索。
发表于 2014-3-3 23:31:22 | 显示全部楼层
回复 6# ge_xin_yu


   哦,试了下,不加^确实可以,是我想当然了
发表于 2014-3-3 23:38:10 | 显示全部楼层
谢谢!按您的方法修改如下,可以正常搜索。但是word却被赋值为name=\"dismal\",正常应该是name= ...
ge_xin_yu 发表于 2014-3-3 23:11
  1. @echo off
  2. set word=name="dismal"
  3. echo %word%
  4. findstr %word:"="% 1.txt
  5. echo %errorlevel%
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2014-3-4 09:36:10 | 显示全部楼层
你还在用bat么? powershell祖师爷用智慧,为我们创造了【无需在原始字符串中插入转义符,不破坏原始字符串可读性】的妙法!

参见  [原创教程] powershell单双引号之妙!     http://www.bathome.net/thread-27666-1-2.html
 楼主| 发表于 2014-3-4 13:06:36 | 显示全部楼层
你还在用bat么? powershell祖师爷用智慧,为我们创造了【无需在原始字符串中插入转义符,不破坏原始字符串 ...
PowerShell 发表于 2014-3-4 09:36



    感谢!!
 楼主| 发表于 2014-3-4 13:07:00 | 显示全部楼层
apang 发表于 2014-3-3 23:38



   可以正常使用,非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 07:53 , Processed in 0.044241 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表