中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: for命令截取指定字符 上一主题 | 下一主题
maker0321
初级用户




积分 78
发帖 37
注册 2007-11-5
状态 离线
『楼 主』:  for命令截取指定字符

现在遇到一个难题,希望大家能帮忙解决!先谢过各位高手!做成bat文件

现有一个文件lar.txt里面记录了一些文件名。
例如:
e:\web\abc.com\asdfasdf.mdb
e:\web\bdccv.com\asdfas.mdb
……
……
现在想要1、提取这个lar.txt文件中第二个“\”和第三个“\”中的字符串。将提取出来的这些字符串作为一个变量。2、并在d盘下创建这些变量的文件夹。例如d:\abc.com、d:\bdccv.com这些文件夹;3、将lar.txt中的这些文件拷贝到这些相对应的文件夹中。
请高手帮帮忙,一方面因为工作总要做这种工作,不想再手工弄了。另一方面也在学习dos的for命令。如果真能实现,请帮忙在程序中注明解释。小弟也能提高自己的水平,向高手靠近。给与帮忙小弟一定会加分!!

2007-11-14 23:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

最终目的是copy这些文件到对应的文件夹中去,一定要设置这些字符串为变量么?

2007-11-14 23:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:  


@echo off
for /f "tokens=2,3 delims=\" %%i in (lar.txt) do call :slz %%j
pause
:slz
set xxx=%1
if not defined xxx goto:eof
md "D:\%1" 2>nul
copy /y lar.txt "D:\%1\"
goto:eof




第一高手    第二高手

2007-11-14 23:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  





第一高手    第二高手

2007-11-14 23:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

呵呵,fastslz 误解了楼主的意思了吧?
@echo off&Setlocal EnableDelayedExpansion

for /f "delims=" %%a in (lar.txt) do (
    for /f "delims=\ tokens=3" %%b in ("%%a") do (
        echo md "D:\%%b" 2>nul
        echo copy "%%a" "D:\%%b\"
    )
)


   此帖被 +1 点积分    点击查看详情   
评分人:【 maker0321 分数: +1  时间:2007-11-15 10:00


2007-11-14 23:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

哦是的忽略了他要拷贝原文件
@echo off
for /f "delims=" %%a in (lar.txt) do (
        for /f "tokens=2,3 delims=\" %%i in ("%%a") do call :slz %%j %%a
)
pause
:slz
set xxx=%1
if not defined xxx goto:eof
md "D:\%1" 2>nul
copy /y "%2" "D:\%1\"
goto:eof
楼主自己选择吧一个启用变量延迟,一用call,2种都理解了“一石二鸟”

和lxmxn版主有一共同点比较强盗md "D:\%1" 2>nul省去if not exist

   此帖被 +1 点积分    点击查看详情   
评分人:【 maker0321 分数: +1  时间:2007-11-15 10:03




第一高手    第二高手

2007-11-14 23:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
maker0321
初级用户




积分 78
发帖 37
注册 2007-11-5
状态 离线
『第 7 楼』:  

版主的命令还有些问题。例如lar.txt文件内容如下:
"F:\win2003sp1\vmware.log"  
"F:\win2003sp1\xxx\vmware.log"  

命令不仅会建立xxx文件夹,还会建立vmware.log文件夹(这是不需要的),请帮忙再测试。还有就是我有些看不懂版主的命令。可否在for命令处做些解释,不胜感激。
fastslz的命令实在是看不懂,没有测试。不好意思,但是我会给你加分。再次感谢。

2007-11-15 10:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

还看不懂?

  Quote:
Originally posted by maker0321 at 2007-11-14 23:03:
现在想要1、提取这个lar.txt文件中第二个“\”和第三个“\”中的字符串。

"tokens=2,3 delims=\"按你的思路第二个“\”和第三个“\”写的,否则我不必这样写,这样写会出来一个%%j就比较难理解了。

   此帖被 +1 点积分    点击查看详情   
评分人:【 maker0321 分数: +1  时间:2007-11-15 12:54




第一高手    第二高手

2007-11-15 12:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
maker0321
初级用户




积分 78
发帖 37
注册 2007-11-5
状态 离线
『第 9 楼』:  

@echo off
for /f "delims=" %%a in (lar.txt)【把lar.txt文件中的每一行的内容作为%%a的内容】 do (
        for /f "tokens=2,3 delims=\" %%i in ("%%a")【把%%a中的第二个/和第三个/中的内容作为值传递给谁了??】 do call :slz  %%j【%%j的值是什么?】 %%a
)
pause
:slz
set xxx=%1【%1的值什么??】
if not defined【no defined是什么意思??】 xxx goto:eof【程序中没有:eof】
md "D:\%1" 2>nul
copy /y "%2"【%2又是什么??】 "D:\%1\"
goto:eof

这是对fastslz大哥程序不明白的地方,对不起我是新手,刚刚来这里学习的。很多地方都是很明白,真心希望能得到大家的帮助。请不要嫌弃我白痴。谢谢各位。

2007-11-15 12:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 10 楼』:  

@echo off
for /f "delims=" %%a in (lar.txt)【把lar.txt文件中的每一行的内容作为%%a的内容】 do (
        for /f "tokens=2,3 delims=\" %%i in ("%%a")【把%%a中的第二个/和第三个/中的内容作为值传递给了%%j】 do call :slz  %%j这里换成%%i就是第1个/和第2个/中的内容 %%a
)
pause

:slz
'【到这里上面的%%j变成了%1,%%a变成了%2,为什么要用call呢是为了处理完每个%%a】
set xxx=%1设置一个xxx变量
if not defined xxx goto:eof【如果没有定义xxx跳回for本身】也就是处理完最后1个%%a跳回for本身,如果没有xxx变量和这一句,P也能运行只是最后会显示1个未定义操作,起到修饰作用
md "D:\%1" 2>nul
copy /y "%2" "D:\%1\"
goto:eof【处理完1个%%a后跳回for本身】

[ Last edited by fastslz on 2007-11-15 at 01:54 PM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 maker0321 分数: +2  时间:2007-11-15 14:46




第一高手    第二高手

2007-11-15 13:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
maker0321
初级用户




积分 78
发帖 37
注册 2007-11-5
状态 离线
『第 11 楼』:  

YES!!终于明白了fastslz你的意思了。衷心谢谢!金牌果真不是浪得虚名!佩服佩服!

2007-11-15 14:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jianxiao
初级用户





积分 33
发帖 9
注册 2005-11-12
状态 离线
『第 12 楼』:  

请问在纯dos下有没有具有这样的功能的命令呢?
for /f 在纯dos下是不行的

2007-11-18 16:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: