标题: [其他] 请教一个变量获取的批处理代码 [打印本页]
作者: 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
目前我用的代码是这样的:- for /f %%z in ('findstr /s /i /m "a=1" *.txt') do (
- set list=%%z
- for /f "tokens=1,* delims==" %%a in ('find "b" ^< %%z') do (set bb=%%b)
- for /f "tokens=1,* delims==" %%c in ('find "c" ^< %%z') do (set cc=%%d)
- for /f "tokens=1,* delims==" %%e in ('find "d" ^< %%z') do (set dd=%%f)
- )
- echo !bb! !cc! !dd!
复制代码
我就纠结在t=这3段代码上。
上面的变量参与运行。在我的需求中,这些变量都是用来生成配置文件的。
所以,变量t的部分我是这么做的
在需要变量t部分的时候加入如下代码:- for /f "tokens=1,2,3* delims==, " %%q in ('find "t" ^< !list!') do (
- set tt1=%%r
- set t2=%%s
- set t3=%%t
复制代码
但是这样做有个缺点,就是当执行到变量t的时候第一个for循环没有内容输出。
我想问的是,这个地方有什么可以改进的吗?
作者: yangfengoo 时间: 2015-4-23 10:13
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,* delims==" %%a in (cs.txt) do (
- set %%a=%%b
- echo %%a=%%b
- if "%%a"=="t" for /f "tokens=1,2,3 delims=, " %%q in ("%%b") do (set t1=%%q,t2=%%r,t3=%%s
- echo t1=%%q,t2=%%r,t3=%%s)
- )
- pause
复制代码
作者: gawk 时间: 2015-4-23 14:07
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%z in ('findstr /s /i /m "a=1" *.txt') do (
- for /f "tokens=1,* delims==" %%a in ('findstr "b=" "%%z"') do set bb=%%b
- for /f "tokens=1,* delims==" %%c in ('findstr "c=" "%%z"') do set cc=%%d
- for /f "tokens=1,* delims==" %%e in ('findstr "d=" "%%z"') do set dd=%%f
- echo !bb! !cc! !dd!
- for /f "tokens=1,2,3* delims==, " %%q in ('findstr "t=" "%%z"') do (
- set t1=%%r
- set t2=%%s
- set t3=%%t
- echo !t1! !t2! !t3!
- )
- )
- 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 |