![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 23:29 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 一个文件名处理的小问题 |
| 可打印版本 802 / 11 |
| 第1楼 groofy | 发表于 2008-04-01 21:38 |
| 新手上路 发帖 1 积分 4 来自 CN | |
|
一个文件名处理的小问题 如何实现下面的功能?
例: d:\tmp\11_223_321_42.txt d:\tmp\12_456.txt 读成 11 223 321 42 11 456 |
|
| 第2楼 bat-zw | 发表于 2008-04-03 18:01 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
好不容易: 楼主的这个小问题好难啊,终于还是搞出来了:
[ Last edited by zw19750516 on 2008-4-3 at 06:04 PM ] |
|
| 第3楼 bat-zw | 发表于 2008-04-03 18:37 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
看似好简单的问题,对此问题的一点分析: ::::::开始我还真的以为是个简单的问题,就看了一眼再没去想了。今天在论坛闲逛又进了这个帖子,想了一下也许实现起来还真有点问题。于
=================================================================================== 是,开始写代码,谁知道越写越觉得有困难,抱着不放弃的念头终于还是写出了能实现的代码,下面就简单地分析一下这个难题: =================================================================================== 首先用dir /a-d /b 列出文件夹下所有的txt文件,接着对各个长文件名进行拆分(这个当然容易,用delims=_就搞定了),然后要逐行提 =================================================================================== 取输出拆分文件名的各部分字符串并去除最后一部分字符串中的.txt字符,这就要求在for循环中只能按列去循环提取文件名的各部分字符串 =================================================================================== (也就是在没提取完之前不能跳到下一行也就是下一个文件名)。在这里开启了变量延迟并使用了变量替换set b=!b:.txt=!,同时加入了: =================================================================================== begin内循环来完成对列的循环。 =================================================================================== 最难的问题还是在于完成了列的循环后如何再进入下一行(也就是跳到下一个文件名)来重复列的循环,于是我想到了在前面加入了for循 =================================================================================== 环并逐次提取下一行(也就是一个一个文件来)并使用了call反复调用列循环,最终实现了依次对每个名件名各部分字符串的提取。 =================================================================================== 最后希望有高手能完善我这段显得繁杂的代码,在此先谢过了。 =================================================================================== [ Last edited by zw19750516 on 2008-4-3 at 06:57 PM ] |
|
| 第4楼 plp626 | 发表于 2008-04-03 19:02 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
楼上,想得有点复杂了吧.
假设test.txt内为: d:\tmp\11_223_321_42.txt d:\tmp\12_456.txt |
|
| 第5楼 bat-zw | 发表于 2008-04-03 19:22 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by abcd at 2008-4-3 19:05: 自己测试吧。。。。。。。。。。。 |
|
| 第6楼 bat-zw | 发表于 2008-04-03 19:28 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by plp626 at 2008-4-3 19:02: shift变量移位确实妙!!!但这段代码对两个文件之间的分隔还是没实现,echo.%1中eho.是无效命令,改为: 即使这样通用性还是有问题,当文件名分分隔部分超过8个时,如1_1_1_1_1_1_1_1_1_1_1.txt时就会出现问题了。 [ Last edited by zw19750516 on 2008-4-3 at 07:49 PM ] |
|
| 第7楼 slore | 发表于 2008-04-03 20:00 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
vbs的话replace就搞定了。
|
|
| 第8楼 26933062 | 发表于 2008-04-03 20:05 |
| 银牌会员 发帖 879 积分 2,268 | |
|
楼上说超过8个就出问题,不知从何说起。。。
应该是文件名含空格就会出错。 : |
|
| 第9楼 plp626 | 发表于 2008-04-03 20:05 |
| 银牌会员 发帖 1,020 积分 2,278 | |
Originally posted by zw19750516 at 2008-4-3 07:28 PM: |
|
| 第10楼 abcd | 发表于 2008-04-03 20:08 |
| 银牌会员 发帖 739 积分 1,436 | |
Originally posted by zw19750516 at 2008-4-3 07:22 PM: 你的意思是不行?? |
|
| 第11楼 terse | 发表于 2008-04-03 22:16 |
| 银牌会员 发帖 946 积分 2,404 | |
|
也发一个
@echo off for /f "delims=" %%i in (test.txt)do set str=%%~ni&call :lp "%%str:_= %%" pause goto :eof :lp for %%i in (%~1) do ( echo %%i ) echo. |
|
| 第12楼 bat-zw | 发表于 2008-04-04 11:04 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
不再说别的了,顶起诸位了!!!!!!!!!
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |