Board logo

标题: [其他] 请教一个变量获取的批处理代码 [打印本页]

作者: chouxia    时间: 2015-4-23 08:58     标题: 请教一个变量获取的批处理代码

txt文件内容如下:
a=1
b=0
c=2
d=3
t=1,2,3
t=332,100,9
t=535,456,43
tnum=3
目前我用的代码是这样的:
  1. for /f %%z in ('findstr /s /i /m "a=1" *.txt') do (
  2. set list=%%z
  3. for /f "tokens=1,* delims=="  %%a in ('find "b" ^< %%z') do (set bb=%%b)
  4. for /f "tokens=1,* delims=="  %%c in ('find "c" ^< %%z') do (set cc=%%d)
  5. for /f "tokens=1,* delims=="  %%e in ('find "d" ^< %%z') do (set dd=%%f)
  6. )
  7. echo !bb! !cc! !dd!
复制代码
我就纠结在t=这3段代码上。
上面的变量参与运行。在我的需求中,这些变量都是用来生成配置文件的。
所以,变量t的部分我是这么做的
在需要变量t部分的时候加入如下代码:
  1. for /f "tokens=1,2,3* delims==, " %%q in ('find "t" ^< !list!') do (
  2. set tt1=%%r
  3. set t2=%%s
  4. set t3=%%t
复制代码
但是这样做有个缺点,就是当执行到变量t的时候第一个for循环没有内容输出。
我想问的是,这个地方有什么可以改进的吗?
作者: yangfengoo    时间: 2015-4-23 10:13

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,* delims==" %%a in (cs.txt) do (
  4. set %%a=%%b
  5. echo %%a=%%b
  6. if "%%a"=="t" for /f "tokens=1,2,3 delims=, " %%q in ("%%b") do (set t1=%%q,t2=%%r,t3=%%s
  7. echo t1=%%q,t2=%%r,t3=%%s)
  8. )
  9. pause
复制代码

作者: gawk    时间: 2015-4-23 14:07

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%z in ('findstr /s /i /m "a=1" *.txt') do (
  4.     for /f "tokens=1,* delims==" %%a in ('findstr "b=" "%%z"') do set bb=%%b
  5.     for /f "tokens=1,* delims==" %%c in ('findstr "c=" "%%z"') do set cc=%%d
  6.     for /f "tokens=1,* delims==" %%e in ('findstr "d=" "%%z"') do set dd=%%f
  7.     echo !bb! !cc! !dd!
  8.     for /f "tokens=1,2,3* delims==, " %%q in ('findstr "t=" "%%z"') do (
  9.         set t1=%%r
  10.         set t2=%%s
  11.         set t3=%%t
  12.         echo !t1! !t2! !t3!
  13.     )
  14. )
  15. pause
复制代码
这个代码的结果和你的需求有何差异吗
作者: chouxia    时间: 2015-4-24 21:48

没这么测试过。
原来应该这么测试过。忘记当时的代码了。
效果是t1、t2、t3只有最后一行文件中t=的数据。
另外也有个问题,第一轮循环的时候t1、t2、t3没有数据
回头我再测试下
作者: gawk    时间: 2015-4-24 22:02

回复 4# chouxia


    “第一轮循环的时候t1、t2、t3没有数据”是指3楼的代码,还是你自己的代码?我测试3楼代码没发现这个问题
作者: chouxia    时间: 2015-4-25 08:19

3楼的代码我没测试,最近有点小忙。
而且改成3楼代码,整个批处理都要重新调整。16K的代码啊。复杂到是不复杂,东西太多ctrl+c都麻烦。需要找个好时间。
我自己的代码跑第一遍的时候没数据




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