中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于使用for循环取文件名作变量的问题
作者:
标题: 关于使用for循环取文件名作变量的问题 上一主题 | 下一主题
bobofu
新手上路





积分 13
发帖 8
注册 2007-5-11
状态 离线
『楼 主』:  关于使用for循环取文件名作变量的问题

【情景】文件夹下有一批.txt文件,需要逐一读取文件名,并以文件名作为参数执行后续的处理。后续处理是从每个文件中按规则提取相应数据生成另一个文件。

【测试代码】

for %%a in ("*.txt") do (
set fff=%%a
echo %%a >> m.txt
for /f "delims=" %%i in (%%a) do (
set line=%%i
set flag=!line:~2,1!
set data1=!line:~3,10!
set data2=!line:~11,10!
if "!flag!"=="0" (echo !data1!>>a.txt) else (echo !data2!>>a.txt)
)
)

【问题】:文件名参数%%a似乎不能传到第二个for循环中,请帮助检查,谢谢

2008-11-25 19:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir/b *.txt') do (
echo %%a >> m.txt
  for /f "delims=" %%i in (%%a) do (
  set line=%%i
  set flag=!line:~2,1!
  set data1=!line:~3,10!
  set data2=!line:~11,10!
  if "!flag!"=="0" (echo !data1!>>a.txt) else (echo !data2!>>a.txt)
)
)
不知道上面的代码能否满足你的要求,没有测试

   此帖被 +3 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-11-25 23:16
评分人:【 bobofu 分数: +1  时间:2008-11-26 10:53


2008-11-25 20:41
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 3 楼』:  

在一个 FOR 里用%%~na 不是可以省个FOR?
另 FOR里用dir/b *.txt 似乎好点



简单!简单!再简单!
2008-11-25 20:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hackate
中级用户





积分 228
发帖 125
注册 2008-8-25
状态 离线
『第 4 楼』:  

我感觉楼主的给出的代码并没有问题,很可能你的问题出在其他代码地方,如你是否有加延迟变量语句等?

2008-11-25 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

RE: 3F
第一个FOR是提取当前文件夹下的所有txt文件,第二个FoR是提取每个TXT文件里满足相应条件的数据,不知terse兄的%%~na是何意?

2008-11-25 21:07
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bobofu
新手上路





积分 13
发帖 8
注册 2007-5-11
状态 离线
『第 6 楼』:  huahua0919兄的代码完全正确,谢谢!

huahua0919兄的代码完全正确,谢谢!

我的代码的问题:
1、没有加延迟变量语句
2、我选取文件名的代码是:   for %%a in ("*.txt") do (
而不是huahua0919兄的代码:for /f "delims=" %%a in ('dir/b *.txt') do (
二者似乎有很大不同,前一个将后续生成的.txt文件也包含在内,而huahua0919兄的代码则只选取了原有的.txt文件。

第2个问题没有想明白为何。

2008-11-25 22:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lovelymorning
初级用户





积分 131
发帖 72
注册 2008-2-24
状态 离线
『第 7 楼』:  

setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
>>m.txt echo %%i
set flag=!%%i:~2,1!
set data1=!%%i:~3,10!
set data2=!%%i:~11,10!
if "!flag!"=="0" (>>a.txt echo !data1!) else (>>a.txt echo !data2!)
)

不知这样行不?

2008-11-26 11:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: