![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 23:20 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » FINDSTR如何从文本中循环查找并拷贝文件 |
| 可打印版本 973 / 14 |
| 第1楼 feiying001 | 发表于 2010-01-09 15:39 |
| 初级用户 发帖 18 积分 25 | |
|
FINDSTR如何从文本中循环查找并拷贝文件 文本内容1.txt格式如下
<File Filename="adi.pl" UpdateType="executable" ServerFolder="357" FixName="e" Path="%Folder%" /> <File Filename="aish.pl" UpdateType="cutable" ServerFolder="459" FixName="c" Path="%Prodr%"/> 。。。。。。。。。。后面很多这样的格式 要实现的目的:从%Folder%拷贝adi.pl到357下面 从%Prodr%拷贝aish.pl到459下面 。。。。。。。。。。。。。 不要临时文件实现方法: @echo off& setlocal enabledelayedexpansion set /a n=0 for /f "tokens=2 delims==^> " %%i in ('findstr "Filename ServerFolder Path" 1.txt')do (set ???? xcopy /y /f "!F!\!S!" "!P!\") 中间的F为Filename的变量值,S为ServerFolder的变量,P为Path的变量值,如何设置这个变量 ? |
|
| 第2楼 HAT | 发表于 2010-01-09 16:22 |
| 版主 发帖 5,017 积分 9,023 | |
|
for和findstr都是行缓冲的,你的代码里面for无法知道findstr找到的究竟是哪个关键字。
这个问题不是你那两三行代码所能够解决的。 |
|
| 第3楼 feiying001 | 发表于 2010-01-09 17:34 |
| 初级用户 发帖 18 积分 25 | |
Originally posted by HAT at 2010-1-9 04:22 PM: 这个应该能够实现,只是三个变量我写不好,两个变量已经有人写出过。 |
|
| 第4楼 feiying001 | 发表于 2010-01-09 19:03 |
| 初级用户 发帖 18 积分 25 | |
|
换个思路:
把查找到的字符写入到一个文本中,然后再做截取字符作为变量,大家看看怎么写入到一行中去,中间加个我们再次截取的符号。 for /f "tokens=1,2 delims==^> " %%i in ('findstr /i "Filename ServerFolder Path" 1.txt') do echo %%j>>2.txt 这样2.txt的结果是: "%ProductFolder%" "fssync.dll" "357" "%ProductFolder%" "hips.ppl" "457" 我想要这样的效果: "%ProductFolder%"-"fssync.dll"-"357" "%ProductFolder%"-"hips.ppl"-"457" 如何写代码? |
|
| 第5楼 HAT | 发表于 2010-01-09 19:24 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 3楼 能否把“有人写出过”的就像你那两三行似的代码贴出来让大家看看?
|
|
| 第6楼 feiying001 | 发表于 2010-01-09 20:02 |
| 初级用户 发帖 18 积分 25 | |
|
qinchun36写的,我修改了下:
@echo off setlocal enabledelayedexpansion :: 设置你那个文件(应该是XML的吧)的路径 set ching="1.txt" set /a n=0 echo ============ 分析开始 ============= for /f "tokens=2 delims==^> " %%i in ('findstr /i "ServerFolder Filename" !ching!') do ( set /a n+=1 set /a r=!n!%%2 if !r!==1 ( set d=%%~i ) else ( set f=%%~i echo 正在复制!f! 到 %temp%\!d!\ ...&pause xcopy /y /f "!f!" "%temp%\!d!\" ) ) |
|
| 第7楼 feiying001 | 发表于 2010-01-09 20:11 |
| 初级用户 发帖 18 积分 25 | |
|
这个代码只考虑要拷贝的文件在当前目录下,可以实现,但有的文件并不全是在当前目录下面,可能是当前目录的一个文件夹的子目录下面,所以我想直接取绝对路径(做拷贝时加个根目录即可),从代码中就可以提取。
|
|
| 第8楼 q8249014 | 发表于 2010-01-09 21:01 |
| 初级用户 发帖 45 积分 175 | |
|
楼主能否在说清楚点儿? [ Last edited by q8249014 on 2010-1-9 at 21:10 ] |
|
| 第9楼 feiying001 | 发表于 2010-01-09 21:19 |
| 初级用户 发帖 18 积分 25 | |
Originally posted by q8249014 at 2010-1-9 09:01 PM: |
|
| 第10楼 feiying001 | 发表于 2010-01-09 21:26 |
| 初级用户 发帖 18 积分 25 | |
|
代码没写完整呀!不用真实做拷贝,提出三个内容做变量就可以了,如:!X!!Y!!Z!
这三个变量分别代表Filename ServerFolder Path这三个内容。 改写下代码格式吧,好理解些,1.txt内容如下 <File Filename="adi.txt" UpdateType="executable" ServerFolder="c:\357" FixName="e" Path="d:\111" /> <File Filename="aish.txt" UpdateType="cutable" ServerFolder="c:\459\" FixName="c" Path="d:\111\222"/> 实现的效果为拷贝c:\357下面的adi.txt到d:\111下 拷贝c:\459下面的aish.txt到d:\111\222下 请注意:Path="d:\111" />后面的 />前有空格,第二个没有空格,所以我的代码加了这一句"tokens=1,2 delims==^> "以便在提取时精确些。 [ Last edited by feiying001 on 2010-1-9 at 21:42 ] |
|
| 第11楼 q8249014 | 发表于 2010-01-09 21:29 |
| 初级用户 发帖 45 积分 175 | |
|
你给出一个具体的文本内容
顺便给出示例 8f的代码是依据你楼顶所述所写 你顶楼不就是要这几个值吗? 你仔细看了吗? 我是用echo显示的 没用复制命令哦 [ Last edited by q8249014 on 2010-1-9 at 21:30 ] |
|
| 第12楼 feiying001 | 发表于 2010-01-09 21:44 |
| 初级用户 发帖 18 积分 25 | |
|
看上面10#我修改过的内容应该能明白我的意思了。
|
|
| 第13楼 q8249014 | 发表于 2010-01-09 22:22 |
| 初级用户 发帖 45 积分 175 | |
|
更新一下,昨晚想了下,还是用这样写好点 和你楼下的一样了 不过我认为最好还是判断标签 [ Last edited by q8249014 on 2010-1-10 at 15:24 ] |
|
| 第14楼 feiying001 | 发表于 2010-01-09 22:53 |
| 初级用户 发帖 18 积分 25 | |
|
看了一天帖子找相关资料,谢谢q8249014和版主HAT!
自己写个代码大家看看能不能精简: @echo off&setlocal enabledelayedexpansion for /f "tokens=2 delims==/> " %%i in ('findstr /i "Filename ServerFolder Path" 1.txt') do ( set /a n+=1 set !n!line=%%i if !n! equ 3 ( echo !1line!---!2line!---!3line! set /a n=0 ) ) endlocal pause [ Last edited by feiying001 on 2010-1-9 at 22:54 ] |
|
| 第15楼 asnahu | 发表于 2010-01-10 15:15 |
| 初级用户 发帖 53 积分 99 | |
|
是把filenam的值对应的文件拷贝到serverfolder的值对应的目录下?
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |