Board logo

标题: [文本处理] 批处理命令for /f 导出文本的特殊情况 [打印本页]

作者: wnsdt    时间: 2012-9-6 16:32     标题: 批处理命令for /f 导出文本的特殊情况

本意是想从一段文本中的某行开始输出文本,直到另一行出现就截止,但是我发现同样的代码在xp、2k3系统中导出的文本每行行尾都有一个“黑块+空格”,但在win7中没有黑块。

请问各位高手,以上问题的原因是什么?如何去掉黑块和空格?多谢
  1. @echo off
  2. ipconfig /all|findstr . >t.txt
  3. for /f "tokens=1,* delims=:" %%a in ('findstr /n . t.txt') do if %%a gtr 1 echo %%b>>t2.txt & findstr /i /b "Ethernet" t2.txt>nul && exist
复制代码

作者: Demon    时间: 2012-9-6 20:10

本帖最后由 Demon 于 2012-9-6 20:48 编辑

XP、2K3的ipconfig行末多了个回车符\r
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in ('copy /z %~s0 nul') do set cr=%%a
  4. (for /f "skip=1 delims=" %%a in ('ipconfig /all ^| findstr .') do (
  5.     set $=%%a
  6.     if "!$:~-1!" == "!cr!" set $=!$:~0,-1!
  7.     echo;!$!
  8.     if /i "!$:~0,8!" == "Ethernet" exit
  9. )) > a.txt
复制代码

作者: wnsdt    时间: 2012-9-6 21:50

那如果我要查找的关键字不只一个,比如 findstr /i /b "Ethernet wireless" t2.txt

是不是有几个关键字就再加几个判断?
如:
if /i "!$:~0,8!" == "Ethernet" exit
if /i "!$:~0,8!" == "Wireless" exit
if /i "!$:~0,3!" == "ppp" exit
作者: wnsdt    时间: 2012-9-6 21:51

回复 2# Demon


    那如果我要查找的关键字不只一个,比如 findstr /i /b "Ethernet wireless" t2.txt

是不是有几个关键字就再加几个判断?
如:
if /i "!$:~0,8!" == "Ethernet" exit
if /i "!$:~0,8!" == "Wireless" exit
if /i "!$:~0,3!" == "ppp" exit
作者: terse    时间: 2012-9-6 22:43

for 里 频繁使用外部命令 效率问题 相对此文本 是否还是多个判断处理
  1. @echo off
  2. for /f "skip=1 delims=" %%a in ('ipconfig /all^|findstr .') do >>t2.txt echo %%a&findstr /i /b "Ethernet" t2.txt>nul && exit
  3. pause
复制代码

作者: wnsdt    时间: 2012-9-7 09:13

本帖最后由 wnsdt 于 2012-9-7 10:12 编辑

回复 5# terse


    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?
作者: wnsdt    时间: 2012-9-7 10:12

回复 2# Demon


    你修改了代码反而出问题,
    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?
作者: Demon    时间: 2012-9-7 10:25

回复  Demon


    你修改了代码反而出问题,
    假如不是从第2行开始,而是从变量定义的某关键字所在 ...
wnsdt 发表于 2012-9-7 10:12


我只是告诉你inconfig行末多了一个回车符\r,也就是你说的黑框。

至于怎么实现,那是你的事,与我无关。
作者: wnsdt    时间: 2012-9-7 10:58

回复 8# Demon


    感谢你的回答,最初我也是怀疑系统的区别造成的问题,现在证实了NT5系统(xp、2k3)ipconfig导出的文本行尾都多出一个回车符,再经过for输出后,可能是我没做转义处理,所以输出的文本变成了黑方块。

    只是奇怪你修改后的代码,为何加入 copy /z %~s0,有何意义呢?
作者: Demon    时间: 2012-9-7 12:02

回复  Demon


    感谢你的回答,最初我也是怀疑系统的区别造成的问题,现在证实了NT5系统(xp、2k3) ...
wnsdt 发表于 2012-9-7 10:58


获取回车符。
作者: terse    时间: 2012-9-7 12:07

回复 6# wnsdt
缺点是不能有重复关键词
  1. @echo off & setlocal enabledelayedexpansion
  2. set A=&set str1=Windows IP&set "str2=Ethernet"
  3. (for /f "delims=" %%i in ('ipconfig /all^|findstr .') do (
  4.      set str=%%i
  5.      if defined A echo %%i
  6.      if "!str:%str1%=!" neq "%%i" set A=a
  7.      if "!str:%str2%=!" neq "%%i" set "A="
  8. ))>i.txt
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2