免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2400 | 回复: 7
打印 上一主题 下一主题

windows下for命令提取文本问题请教? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-19 23:45 |只看该作者 |倒序浏览

原文件内容如下,需要提取一些列赋值到变量:
D:\Temp\1>cat nvrestore.lst
INVISIBLE       File System     backup01 (Saveset 6) 20:42 19 Mar 2012

for /f "tokens=1-10" %a in (nvrestore.lst) do @set NV_CLNTNAME=%a
for /f "tokens=1-10" %a in (nvrestore.lst) do @set NV_JOBNAME=%d
for /f "tokens=1-10" %a in (nvrestore.lst) do @set NV_DATE=%h%i%j

1,请问如何提取“Saveset 2”中的“2”;



2,假如文件有多行,如何逐行读取?希望做到处理完第一行后,变量清空,继续用第二行的值来赋值,直到最后一行
D:\Temp\1>cat nvrestore.lst
INVISIBLE       File System     backup01 (Saveset 6) 20:42 19 Mar 2012
INVISIBLE       File System     backup02 (Saveset 5) 20:42 19 Mar 2012
INVISIBLE       File System     backup02 (Saveset 4) 20:42 19 Mar 2012
INVISIBLE       File System     backup01 (Saveset 3) 20:42 19 Mar 2012
INVISIBLE       File System     backup02 (Saveset 2) 20:37 19 Mar 2012

UNIX下可以轻松搞定,请熟悉WIN的TX拔刀相助。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2012-03-19 23:56 |只看该作者
test.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-10 delims=) " %%a in (a.txt) do (
  4.     set NV_CLNTNAME=%%a
  5.     set NV_JOBNAME=%%d
  6.     set NV_SAVESET=%%f
  7.     set NV_DATE=%%h%%i%%j
  8.     echo,!NV_CLNTNAME!
  9.     echo,!NV_JOBNAME!
  10.     echo,!NV_SAVESET!
  11.     echo,!NV_DATE!
  12.     pause
  13. )
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-03-20 08:08 |只看该作者
Shell_HAT 发表于 2012-03-19 23:56
test.bat


先谢了。
%a是不对的,多了File

D:\Temp\1>for /f "tokens=1-10 delims=) " %a in (nvrestore.lst) do echo %a

D:\Temp\1>echo INVISIBLE        File
INVISIBLE       File

D:\Temp\1>echo INVISIBLE        File
INVISIBLE       File

D:\Temp\1>echo INVISIBLE        File
INVISIBLE       File

论坛徽章:
0
4 [报告]
发表于 2012-03-20 08:35 |只看该作者
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-10" %%a in (nvrestore.lst) do (
    set NV_CLNTNAME=%%a
    set NV_JOBNAME=%%d
    set NV_DATE=%%h%%i%%j
)

for /f "tokens=1-10 delims=) " %%a in (nvrestore.lst) do (
    set NV_SVSET=%%d
    echo !NV_CLNTNAME! !NV_JOBNAME! !NV_DATE! !NV_SVSET! >> 1.txt
)

这样写虽然可以取到所有相要的值,但是如果分开取,那么同一行的其它值就不对了,上面的变量在第一条for结束后就重新赋值了。

D:\Temp\1>cat 1.txt
INVISIBLE backup02 19Mar2012 6
INVISIBLE backup02 19Mar2012 5
INVISIBLE backup02 19Mar2012 4
INVISIBLE backup02 19Mar2012 3
INVISIBLE backup02 19Mar2012 2

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2012-03-20 09:03 |只看该作者
回复 3# sonorous


把你的nvrestore.lst压缩一下传上来我试试
怀疑某些列分隔符不是空格

论坛徽章:
0
6 [报告]
发表于 2012-03-20 09:18 |只看该作者
Shell_HAT 发表于 2012-03-20 09:03
回复 3# sonorous


是的,可能有tab,有办法吗?其实需求很简单,我只要提INVISIBLE  backup01 6 19Mar2012 ,关健“(Saveset 2)”中的“2”弄不出来,用了delims后,2可以取到,但是其它就乱了

论坛徽章:
0
7 [报告]
发表于 2012-03-20 09:23 |只看该作者
或者有没有办法先处理一下文本,把TAB替换成空格,或把()去掉,unix下sed就可以,win下没有,也不让装,不然装个cygwin早搞定了,呵呵

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2012-03-20 10:28 |只看该作者
回复 6# sonorous


for /f "tokens=1-10 delims=) " %%a in
在括号后面加一个tab键
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP