中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-02 22:33
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问如何用for将文本的每一行作为变量 查看 875 回复 3
楼 主 请问如何用for将文本的每一行作为变量 发表于 2006-12-29 06:05 ·  中国 湖南 长沙 雨花区 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
没什么实际作用,关键是想学会for,想了很久都没解决,请各位帮帮忙.
a.txt中的内容及格式如下,有很多.有30个
f:\试验\dc\aj.txt
f:\试验\abc\ua.txt
f:\试验\k\ay.txt
f:\试验\kk\at.txt
f:\试验\hc\a.txt

要求:
新建目录d:\备份\1\......d:\备份\2\.....d:\备份\3\........d:\备份\30\
将a.txt中第一行的内容(其实是一个文档的路径)复制到d:\备份\1\
将a.txt中第二行的内容(其实是一个文档的路径)复制到d:\备份\2\
将a.txt中第三行的内容(其实是一个文档的路径)复制到d:\备份\3\
.....................

我是这样写的
@echo off
set aa=0
:1
set /a aa=%aa%+1
if %aa% gtr 30 goto :eof
md d:\备份\aa%
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=" %%i in (a.txt) do xcopy %%id:\备份\%aa%goto 1
pause
但是不行啊,它会把所有内容都复制到所有新建的文件夹里
.
2 发表于 2006-12-29 06:13 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线

@echo off
set num=0
for /f "delims=" %%i in (a.txt) do call :copy_ "%%i"
goto :eof

:copy_
if %num% gtr 30 goto :eof
set /a num+=1
md d:\备份\%num%
xcopy %1 d:\备份\%num%
goto :eof
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2006-12-29 06:37 ·  中国 湖南 长沙 雨花区 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
谢谢 namejm
版主

还有几个地方不懂,还麻烦解释一下好吗?
@echo off
set num=0
for /f "delims=" %%i in (a.txt) do call :copy_ "%%i"
rem 下面的goto :eof什么情况下执行呢?执行的结果是什么呢?是退出吗?
goto :eof

:copy_
if %num% gtr 30 goto :eof
set /a num+=1
md d:\备份\%num%
rem 下面的%1是什么意思,怎么来的?用%2行不行?
xcopy %1 d:\备份\%num%
goto :eof
这个批处理是怎么实现循环的?

[ Last edited by 26933062 on 2006-12-28 at 05:41 PM ]
4 发表于 2006-12-29 08:01 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
19年会员
UID 67972
状态 离线
没实现循环只不过用CALL放FOR外面了.放里面也可以.


@echo off
for /f "delims=" %%i in (a.txt) do (
set/a num+=1
call xcopy "%%i" d:\备份\%%num%%\
)


或者(没通用性)

@echo off
for /f "tokens=1* delims=:" %%a in ('findstr/n . a.txt') do (
xcopy "%%b" d:\备份\%%a\
)


[ Last edited by tao0610 on 2006-12-28 at 07:02 PM ]

认识自己,降伏自己,改变自己
,才能改变别人!
论坛跳转: