|
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 来自 上海
状态 离线
|
|
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\"
)
)
|
|
2007-11-14 23:24 |
|
|
fastslz
铂金会员
       DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
|
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就比较难理解了。
|

第一高手 第二高手
我的小站
 |
|
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 ]
|

第一高手 第二高手
我的小站
 |
|
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 |
|