![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 10:00 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何根据文 本 文 件的内容拷贝数据 |
| 可打印版本 2,268 / 28 |
| 第16楼 tireless | 发表于 2008-11-08 16:47 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
if not exist "%%a" (>>b.txt echo %%a) else copy /y "%%a" "F:%%~pa" >nul || pause & exit /b
这句的意思是: 如果文件不存在,则把文件路径输出到 b.txt。如果文件存在就执行 else 后面的语句了 —— 复制文件,而如果不成功的话就暂停接着退出。 14 楼的代码确实不会将“磁盘空间不足”时没有被复制的文件路径输出到 b.txt,只将不存在的文件路径输出到 b.txt。再试试以下代码: [ Last edited by tireless on 2008-11-8 at 16:49 ] |
|
| 第17楼 lsjiang | 发表于 2008-11-08 16:59 |
| 新手上路 发帖 16 积分 17 | |
|
16楼的代码只将最后一行没有拷贝成功的内容输出到了b.txt,a.txt后面的部分没有输出到b.txt中,批处理就退出了。仍然有缺憾。
请再次赐教! |
|
| 第18楼 tireless | 发表于 2008-11-08 18:09 |
| 银牌会员 发帖 1,122 积分 2,025 | |
| 第19楼 lsjiang | 发表于 2008-11-09 00:27 |
| 新手上路 发帖 16 积分 17 | |
|
tireless:老麻烦你实在不好意思。
18楼的代码测试与16楼的结果是一样的。也是只把最后一行没有拷贝成功的内容输出到了b.txt,显示了一行磁盘空间不足后,任意键就退出了。 麻烦再想想还没有有更好的方案? |
|
| 第20楼 tireless | 发表于 2008-11-09 00:52 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
是我不好意思...功力不够却老爱去回答别人的问题,总是会出现错误,很抱歉。先去 sleep 了,明天再想想...
|
|
| 第21楼 lsjiang | 发表于 2008-11-09 01:09 |
| 新手上路 发帖 16 积分 17 | |
|
共同探讨共同进步,我从你的回答里也学到了不少东西,给我很多启发,总之多谢你的热心相助!祝你晚安。
|
|
| 第22楼 HAT | 发表于 2008-11-09 01:45 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 20楼 任何人都是从不会到会走过来的,古人教育我们:闻道有先后,术业有专攻,如是而已。
tireless 兄不必过谦,你乐于助人的精神值得所有人学习。 |
|
| 第23楼 tireless | 发表于 2008-11-09 11:19 |
| 银牌会员 发帖 1,122 积分 2,025 | |
Originally posted by lsjiang at 2008-11-9 12:27 AM: 那就奇怪了... copy /y "%%a" "F:%%~pa" >nul || ( 括号里的第一行和第三行都执行成功,怎么第二行就没执行成功呢? |
|
| 第24楼 lsjiang | 发表于 2008-11-09 19:44 |
| 新手上路 发帖 16 积分 17 | |
|
我又来了,呵呵!
这样做是不是容易些。直接把拷贝完成的行从a.txt中删掉,不用把没拷贝的行输出到b.txt了,剩下的就是没有拷贝完成的。容易实现否? |
|
| 第25楼 tireless | 发表于 2008-11-09 21:17 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
找到原因了,因为:
findstr /n "e:\book\abc\sample1.pdf" a.txt 文件名与扩展名中间的点在 findstr 中有特殊意义。而换成使用 /c: 碰到中文也会有问题: 找得到: findstr /n /c:"e:\book\abc\i'm here.pdf" a.txt 找不到: findstr /n /c:"e:\book\abc\找不到 我.pdf" a.txt —————————————————————————————————————————————————— 使用 find.exe 来找就没问题了。代码: [ Last edited by tireless on 2008-11-9 at 22:52 ] |
|
| 第26楼 lsjiang | 发表于 2008-11-09 22:46 |
| 新手上路 发帖 16 积分 17 | |
|
OK,测试通过,完全达到要求。
对tireless的热心相助表示万分感谢! |
|
| 第27楼 lsjiang | 发表于 2008-11-10 10:48 |
| 新手上路 发帖 16 积分 17 | |
|
再请教一下:我用tireless的方法成功实现了所需功能,有个小问题,如果a.txt 中没有拷贝成功的行超过65535的话,用more输出就有问题了,如何突破呢?
如果用把拷贝成功的行删除话如何实现呢? 用下面的代码会把源文件中的文件删除了,如何只删除a.txt中已拷贝的行呢? @echo off for /f "delims=" %%a in (a.txt) do ( if not exist "F:%%~pa" md "F:%%~pa" if not exist "%%a" (>>b.txt echo %%a) else copy /y "%%a" "F:%%~pa" >nul && del %%a [ Last edited by lsjiang on 2008-11-10 at 17:47 ] |
|
| 第28楼 tireless | 发表于 2008-11-11 01:22 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
那不用 more,用 for 好了。 [ Last edited by tireless on 2008-11-12 at 15:25 ] |
|
| 第29楼 lsjiang | 发表于 2008-11-11 11:33 |
| 新手上路 发帖 16 积分 17 | |
|
这样就没有什么问题了。非常感谢!
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |