[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
这就怪了,究竟是什么地方的问题呢?请大家指点,深表感谢!!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 apang 于 2014-3-4 00:09 编辑

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

回答错误,这里的等号不需要转义,引号需要转义。

TOP

本帖最后由 ge_xin_yu 于 2014-3-3 23:08 编辑
如果不加外围引号,name="dismal" 中的等号需要转义,否则会被认为是命令分割符
findstr name^=\"dismal\" ...
apang 发表于 2014-3-3 22:55



    谢谢!但是我用变量作为搜索字符串该怎么处理呢?如何处理%word%中的等号呢?

TOP

set "var=a^=\"bc\""

TOP

本帖最后由 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
复制代码

TOP

如果不加外围引号,name="dismal" 中的等号需要转义,否则会被认为是命令分割符
findstr name^=\"dismal\" ...
apang 发表于 2014-3-3 22:55



    试了一下,即便=号不转义,findstr也可以正常搜索。

TOP

回复 6# ge_xin_yu


   哦,试了下,不加^确实可以,是我想当然了

TOP

谢谢!按您的方法修改如下,可以正常搜索。但是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

评分人数

TOP

你还在用bat么? powershell祖师爷用智慧,为我们创造了【无需在原始字符串中插入转义符,不破坏原始字符串可读性】的妙法!

参见  [原创教程] powershell单双引号之妙!     http://www.bathome.net/thread-27666-1-2.html
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

你还在用bat么? powershell祖师爷用智慧,为我们创造了【无需在原始字符串中插入转义符,不破坏原始字符串 ...
PowerShell 发表于 2014-3-4 09:36



    感谢!!

TOP

apang 发表于 2014-3-3 23:38



   可以正常使用,非常感谢!

TOP

返回列表