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

[文本处理] 批处理命令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: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
复制代码

TOP

那如果我要查找的关键字不只一个,比如 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

TOP

回复 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

TOP

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
复制代码

TOP

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

回复 5# terse


    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?

TOP

回复 2# Demon


    你修改了代码反而出问题,
    假如不是从第2行开始,而是从变量定义的某关键字所在行开始,知道另一个关键字所在行结束。你的代码如何判断?

TOP

回复  Demon


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


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

至于怎么实现,那是你的事,与我无关。

TOP

回复 8# Demon


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

    只是奇怪你修改后的代码,为何加入 copy /z %~s0,有何意义呢?

TOP

回复  Demon


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


获取回车符。

TOP

回复 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
复制代码

TOP

返回列表