中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 13:22
48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » for命令截取指定字符
可打印版本  1,143 / 11
第1楼 maker0321 发表于 2007-11-14 23:03
初级用户 发帖 37 积分 78
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命令。如果真能实现,请帮忙在程序中注明解释。小弟也能提高自己的水平,向高手靠近。给与帮忙小弟一定会加分!!
第2楼 lxmxn 发表于 2007-11-14 23:11
版主 发帖 4,938 积分 11,386
最终目的是copy这些文件到对应的文件夹中去,一定要设置这些字符串为变量么?
第3楼 fastslz 发表于 2007-11-14 23:21
铂金会员 发帖 2,315 积分 5,493 来自 上海
第4楼 fastslz 发表于 2007-11-14 23:23
铂金会员 发帖 2,315 积分 5,493 来自 上海
第5楼 lxmxn 发表于 2007-11-14 23:24
版主 发帖 4,938 积分 11,386
呵呵,fastslz 误解了楼主的意思了吧?
第6楼 fastslz 发表于 2007-11-14 23:39
铂金会员 发帖 2,315 积分 5,493 来自 上海
哦是的忽略了他要拷贝原文件

楼主自己选择吧一个启用变量延迟,一用call,2种都理解了“一石二鸟”

和lxmxn版主有一共同点比较强盗md "D:\%1" 2>nul省去if not exist
第7楼 maker0321 发表于 2007-11-15 10:03
初级用户 发帖 37 积分 78
版主的命令还有些问题。例如lar.txt文件内容如下:
"F:\win2003sp1\vmware.log"
"F:\win2003sp1\xxx\vmware.log"

命令不仅会建立xxx文件夹,还会建立vmware.log文件夹(这是不需要的),请帮忙再测试。还有就是我有些看不懂版主的命令。可否在for命令处做些解释,不胜感激。
fastslz的命令实在是看不懂,没有测试。不好意思,但是我会给你加分。再次感谢。
第8楼 fastslz 发表于 2007-11-15 12:12
铂金会员 发帖 2,315 积分 5,493 来自 上海
还看不懂?
Originally posted by maker0321 at 2007-11-14 23:03:
现在想要1、提取这个lar.txt文件中第二个“\”和第三个“\”中的字符串。


"tokens=2,3 delims=\"按你的思路第二个“\”和第三个“\”写的,否则我不必这样写,这样写会出来一个%%j就比较难理解了。
第9楼 maker0321 发表于 2007-11-15 12:53
初级用户 发帖 37 积分 78
@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大哥程序不明白的地方,对不起我是新手,刚刚来这里学习的。很多地方都是很明白,真心希望能得到大家的帮助。请不要嫌弃我白痴。谢谢各位。
第10楼 fastslz 发表于 2007-11-15 13:51
铂金会员 发帖 2,315 积分 5,493 来自 上海
@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 ]
第11楼 maker0321 发表于 2007-11-15 14:45
初级用户 发帖 37 积分 78
YES!!终于明白了fastslz你的意思了。衷心谢谢!金牌果真不是浪得虚名!佩服佩服!
第12楼 jianxiao 发表于 2007-11-18 16:17
初级用户 发帖 9 积分 33
请问在纯dos下有没有具有这样的功能的命令呢?
for /f 在纯dos下是不行的
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023