中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问如何用for将文本的每一行作为变量
作者:
标题: 请问如何用for将文本的每一行作为变量 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  请问如何用for将文本的每一行作为变量

没什么实际作用,关键是想学会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
但是不行啊,它会把所有内容都复制到所有新建的文件夹里
.


2006-12-29 06:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  


@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没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-29 06:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 3 楼』:  

谢谢  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 ]

2006-12-29 06:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 4 楼』:  

没实现循环只不过用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 ]




认识自己,降伏自己,改变自己
,才能改变别人!
2006-12-29 08:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: