标题: [文件操作] [已解决]批处理如何将TXT每行内容赋值给不同变量并显示? [打印本页]
作者: YJDP 时间: 2010-11-22 10:52 标题: [已解决]批处理如何将TXT每行内容赋值给不同变量并显示?
本帖最后由 YJDP 于 2012-6-18 16:37 编辑
闲话不多说,直接说问题
a.txt 中有5行(或更多)的字符
内容为:
a
b
c
d
e
我想用for将以上5行字条都分别赋值给5个不同的变量,但都是序列排列的
我想要的输出效果为:
st1=a
st2=b
st3=c
st4=d
st5=e
看了好多例子,试了一个通宵都没有办法实现。。。。
代码改了无数次,反正都没个对的,就随便贴其中一个版的吧。。。- Setlocal enabledelayedexpression
- for /f "usebackq" %%i in (“a.txt”) do (
- for %%j in (1,1,5) do set st%%j=%%i
- echo st%%j
- )
- pause
复制代码
结果为 !st%%j!
其中运算时的变量赋值为
set st1=a
set st1=a
set st5=a
set st1=b
set st1=b
set st5=b
set st1=c
set st1=c
set st5=c
set st1=d
set st1=d
set st5=d
……
请高手给出正确代码并详细说明下原理。。。
这个问题弄了一晚上都没懂,不甘心啊。。。。
[ 本帖最后由 YJDP 于 2010-11-22 18:08 编辑 ]
作者: canyuexiaolang 时间: 2010-11-22 13:00
是,你没开启变量延迟啊。加上Setlocal enabledelayedexpression试试啊
作者: YJDP 时间: 2010-11-22 13:21
原帖由 canyuexiaolang 于 2010-11-22 13:00 发表
是,你没开启变量延迟啊。加上Setlocal enabledelayedexpression试试啊
这里忘贴上(已补上)
加了也不行= =!
我总是把同1行的字符不断的赋给每一个变量,郁闷死了。。
求解。。。。
[ 本帖最后由 YJDP 于 2010-11-22 13:52 编辑 ]
作者: wc726842270 时间: 2010-11-22 14:46
LZ是要这样的么?- @echo off
- set n=0
- for /f %%i in (a.txt) do call :1 %%i
- pause
- :1
- set /a n+=1
- set st%n%=%1
- if defined st%n% (echo st%n%=%1) else echo 出现了错误
- goto :eof
复制代码
作者: manhua 时间: 2010-11-22 15:30 标题: 回复 1楼 的帖子
你要的输出效果是这个吧 你没有看变量延迟 所以得不到想要的结果- @echo off
- setlocal enabledelayedexpansion
- for /f %%i in (a.txt) do (
- set /a n+=1
- echo st!n!=%%i
-
- )
复制代码
[ 本帖最后由 manhua 于 2010-11-22 15:33 编辑 ]
作者: YJDP 时间: 2010-11-22 15:51
原帖由 wc726842270 于 2010-11-22 14:46 发表
LZ是要这样的么?@echo off
set n=0
for /f %%i in (a.txt) do call :1 %%i
pause
:1
set /a n+=1
set st%n%=%1
if defined st%n% (echo st%n%=%1) else echo 出现了错误
goto :eof
晕!这点代码就完美解决了!!
而且是无论多少行都行!太强大了!!
加上usebackq 更是好用!
非常感谢!!一定要好好研究下才行!!
作者: wc726842270 时间: 2010-11-22 16:29 标题: 回复 6楼 的帖子
本人很少用”USEBACKUP“所以不敢轻易使用,不过在这里我感觉没有必要啊,代码是次要的,思路才是重点(个人感觉)
作者: YJDP 时间: 2010-11-22 17:06
4楼的代码解决了变量的,不过在使用发现新问题
无法读出一行中空格后的内容,比如一行内容为 1(空格)2
取出来的结果是 1
在 for /f "usebackq" %%i in ("!updatefilename!") do call :readtxt %%i
使用了"usebackq" 没有效果
根据运行结果可以得出是在赋值时就将空格后面的字符给截了
set /a n+=1
set st%n%=%1
请问这是为什么呢,如何避免?
作者: wc726842270 时间: 2010-11-22 21:34 标题: 回复 8楼 的帖子
LZ解决不了么?很好办的啊!!- @echo off
- set n=0
- for /f "delims=" %%i in (a.txt) do call :1 "%%i"
- pause
- :1
- set /a n+=1
- set b=%1
- set c=%b:"=%
- set st%n%=%c%
- if defined st%n% (echo st%n%=%c%) else echo 出现了错误
- goto :eof
复制代码
作者: lhsbqb 时间: 2010-11-26 10:32 标题: 回复 1楼 的帖子
- @echo off
- setlocal enabledelayedexpansion
- set /a num=0
- for /f "delims=" %%i in (a.txt) do (
- set /a num+=1
- set str!num!=%%i
- call echo str!num!=%%str!num!%%
- )
- pause
复制代码
作者: changzhi 时间: 2010-11-28 22:59
很不错呢,楼主这个可以做个好例子了
[ 本帖最后由 changzhi 于 2010-11-28 23:02 编辑 ]
作者: hanyeguxing 时间: 2010-11-28 23:49
因为不知道具体行数,所以不能直接for /l,而set/a的运算效率低,一般使用find或findstr来完成:- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set st%%a=%%b
复制代码
如果要跳过空行,则:- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do if not "%%b"=="" set st%%a=%%b
复制代码
以上要求行首不能为分隔符
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |