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

[文本处理] 批处理命令for /f 导出文本的特殊情况

[复制链接]
发表于 2012-9-6 16:32:15 | 显示全部楼层 |阅读模式
本意是想从一段文本中的某行开始输出文本,直到另一行出现就截止,但是我发现同样的代码在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
复制代码
发表于 2012-9-6 20:10:58 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2012-9-6 21:50:38 | 显示全部楼层
那如果我要查找的关键字不只一个,比如 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
 楼主| 发表于 2012-9-6 21:51:05 | 显示全部楼层
回复 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
发表于 2012-9-6 22:43:48 | 显示全部楼层
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
复制代码
 楼主| 发表于 2012-9-7 09:13:08 | 显示全部楼层
本帖最后由 wnsdt 于 2012-9-7 10:12 编辑

回复 5# terse


    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?
 楼主| 发表于 2012-9-7 10:12:25 | 显示全部楼层
回复 2# Demon


    你修改了代码反而出问题,
    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?
发表于 2012-9-7 10:25:20 | 显示全部楼层
回复  Demon


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


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

至于怎么实现,那是你的事,与我无关。
 楼主| 发表于 2012-9-7 10:58:39 | 显示全部楼层
回复 8# Demon


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

    只是奇怪你修改后的代码,为何加入 copy /z %~s0,有何意义呢?
发表于 2012-9-7 12:02:30 | 显示全部楼层
回复  Demon


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


获取回车符。
发表于 2012-9-7 12:07:42 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 15:31 , Processed in 0.021454 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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