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

[文本处理] 对findstr命令/g:开关的一点不解

代码:
  1. @echo off
  2. findstr /x /g:a.txt b.txt
  3. pause
复制代码
a.txt内容
  1. a
  2. b
  3. c
  4. d
复制代码
b.txt内容
  1. b
  2. b
  3. c
  4. d
复制代码

注意,a.txt和b.txt的最后一行都没有换行符。大家一看就知道这个代码的功能是从a.txt中逐一获取每行字符串然后在b.txt里面查找与之精确匹配的行。
问题来了:理想的结果应当是
  1. b
  2. b
  3. c
  4. d
复制代码
对吧?但是实际上的结果是
  1. b
  2. b
  3. c
复制代码
d不见了,这让人很意外...但是如果在b.txt最后一行加上换行符(a.txt最后加不加换行符都无所谓)就能得到理想的
  1. b
  2. b
  3. c
  4. d
复制代码
大家说说这是怎么回事?

非常感谢wc726842270 的回复。去掉/x开关就OK了,这也给我了一点启发。
但是,findstr不也是以行为单位进行匹配的吗?
要是如你所说/x在文本开头和结尾加上换行符的话,就不应该出现“不理想”的结果啊...
还有,
将一个小写的"d "(后有空格.但不包括引号)保存在文件中(格式默认就行),再打开看一下是不是乱码
我这里不是乱码...
总之现在我还是只知道加上/x得不到理想结果,不加可以得到,但是原因还是不清楚,希望有兴趣的朋友一起思考下!

[ 本帖最后由 wankoilz 于 2011-2-28 22:39 编辑 ]

TOP

感谢wc726842270参与讨论。
我想了很久也不能得出让自己信服的答案...很郁闷!
但是下面这个例或许能给人一点启发:
  1. @echo off&setlocal enabledelayedexpansion
  2. set s=^
  3. findstr /n "!s!" a.txt
  4. pause
复制代码
a.txt的内容
  1. a
  2. a
复制代码
a.txt里面有4行,三个换行符(最后一行没有换行符)。代码中变量!s!包含一个换行符,代码执行结果是
  1. 1:a
  2. 2:
  3. 3:
复制代码
打印出了包含换行符的3行,也就说findstr是可以匹配换行符的,但是....在加上/X开关后,就什么都得不到,但我还是不知道顶出现顶楼那种情况的原因....希望大家都来讨论下!

[ 本帖最后由 wankoilz 于 2011-3-1 10:56 编辑 ]

TOP

我自己顶一下...!

TOP

返回列表