标题: [文本处理] 批处理命令for /f 导出文本的特殊情况 [打印本页]
作者: wnsdt 时间: 2012-9-6 16:32 标题: 批处理命令for /f 导出文本的特殊情况
本意是想从一段文本中的某行开始输出文本,直到另一行出现就截止,但是我发现同样的代码在xp、2k3系统中导出的文本每行行尾都有一个“黑块+空格”,但在win7中没有黑块。
请问各位高手,以上问题的原因是什么?如何去掉黑块和空格?多谢- @echo off
- ipconfig /all|findstr . >t.txt
- 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- @echo off
- setlocal enabledelayedexpansion
- for /f %%a in ('copy /z %~s0 nul') do set cr=%%a
- (for /f "skip=1 delims=" %%a in ('ipconfig /all ^| findstr .') do (
- set $=%%a
- if "!$:~-1!" == "!cr!" set $=!$:~0,-1!
- echo;!$!
- if /i "!$:~0,8!" == "Ethernet" exit
- )) > 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 里 频繁使用外部命令 效率问题 相对此文本 是否还是多个判断处理- @echo off
- for /f "skip=1 delims=" %%a in ('ipconfig /all^|findstr .') do >>t2.txt echo %%a&findstr /i /b "Ethernet" t2.txt>nul && exit
- 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
缺点是不能有重复关键词- @echo off & setlocal enabledelayedexpansion
- set A=&set str1=Windows IP&set "str2=Ethernet"
- (for /f "delims=" %%i in ('ipconfig /all^|findstr .') do (
- set str=%%i
- if defined A echo %%i
- if "!str:%str1%=!" neq "%%i" set A=a
- if "!str:%str2%=!" neq "%%i" set "A="
- ))>i.txt
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |