中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 05:05
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]遍历文件夹且将结果按顺序合并重命名输出文本
可打印版本  1,583 / 4
第1楼 pkto 发表于 2009-01-15 17:04
初级用户 发帖 62 积分 62
[已结]遍历文件夹且将结果按顺序合并重命名输出文本
如题:如何遍历文件夹,并且将遍历结果按顺序合并文件?
偶是个网文爱好者,经常将一些小说什么的下载,然后合并处理,最后放在电纸书或者手机上阅读,现就文本合并问题提以下要求,请达人帮助解决:

================================
1、下载的文件有各种格式,有php txt htm asp等,按各自小说名下载至小说名的文件夹下。如:《星际浪子》、《寻秦记》等,通通默认在“E:\黄易\”这个总文件夹内。要求:下载完后,遍历“黄易”这个文件夹,将所有不同扩展名的文件,全部更改为.txt为扩展名的文本文件;
  这个可用如下批处理解决:


================================

2、遍历“黄易”总文件夹,将所有文本文件合并,合并要求:
  按1.txt,2.txt,3.txt,4.txt……10.txt,11.txt……20.txt……100.txt……如此顺序。(一般简单的bat合并顺序是1.txt,10.txt,2.txt,20.txt的顺序,这不符合要求);
  排序代码(是借鉴youxi01大大的):

================================

3、将合并成的文件,自动命名为文件夹名称,如:《星际浪子》文件夹的的文本文件合并后,自动命名为:《星际浪子》.txt,并且自动move到“黄易”这个总文件夹根目录下。
  提供一下自动命名(假设合并后的文本文件为a.txt)并转移代码:


================================

以上需求要在一个批处理中(cmd环境下)解决,请各位版主、钻石、铂金、高人予以帮助!

[ Last edited by HAT on 2009-1-16 at 01:04 ]
第2楼 HAT 发表于 2009-01-15 22:00
版主 发帖 5,017 积分 9,023
请各位版主、钻石、铂金、高人予以帮助!

除了这些人,不接受其他人的帮助?
第3楼 netbenton 发表于 2009-01-15 23:54
银牌会员 发帖 752 积分 1,916 来自 广西
我可是新手
@echo off&setlocal enabledelayedexpansion
::本批处理可指定目录A下的所有子目录的文件,以最小目录为单位,合并到以最小目录为文件名的.txt文件
::放到批定的目录A内
if '%1'=='' echo 请把要处理的总目录拖到本批处理上!&echo 或在命令行指明总目录!&pause&exit
set sourcd=%cd%
pushd %1
set cdname=%cd%
echo.
for /f "tokens=* delims=" %%a in ('dir /ad /s /b') do (
echo.
setlocal enabledelayedexpansion
set cucd=%%a
set cucd=!cucd:\= !
for %%d in (!cucd!) do set cucd=%%d
pushd "%%a"
echo 正在处理 %%a 目录。。。。。。
for /f "tokens=* delims=" %%i in ('dir /b') do (
set na=1111111111111111111111111111112%%i
set na=!na:~-30!
set _!na!=a
)
if exist %cdname%\!cucd!.txt (set /p in=!cucd!.txt已存在,按"0"回车跳过,其它忽略)
if not !in!=="0" (if not "!na!"=="" cd. >%cdname%\!cucd!.txt)

for /f "tokens=* delims=" %%l in ('set _') do (
set fn=%%l
set fn=!fn:*2=!
set fn=!fn:~0,-2!
if not "!in!"=="0" type "!fn!" >>%cdname%\!cucd!.txt
)
if exist %cdname%\!cucd!.txt (echo 文件已经合并到%cdname%\!cucd!.txt) else (echo %%a 目录为空)
echo.
popd

endlocal
)

pushd %sourcd%
cd
pause

[ Last edited by netbenton on 2009-1-16 at 22:34 ]
第4楼 pkto 发表于 2009-01-16 00:19
初级用户 发帖 62 积分 62
除了这些人,不接受其他人的帮助?

呵呵,hat老大,高人,就是指的其他人了啦
第5楼 pkto 发表于 2009-01-16 00:54
初级用户 发帖 62 积分 62
非常感谢netbenton兄,代码经验证,完全可行!而且很精练!兄台是高人哪!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023