标题: [已结]遍历文件夹且将结果按顺序合并重命名输出文本
[打印本页]
作者: pkto
时间: 2009-1-15 17:04
标题: [已结]遍历文件夹且将结果按顺序合并重命名输出文本
如题:如何遍历文件夹,并且将遍历结果按顺序合并文件?
偶是个网文爱好者,经常将一些小说什么的下载,然后合并处理,最后放在电纸书或者手机上阅读,现就文本合并问题提以下要求,请达人帮助解决:
================================
1、下载的文件有各种格式,有php txt htm asp等,按各自小说名下载至小说名的文件夹下。如:《星际浪子》、《寻秦记》等,通通默认在“E:\黄易\”这个总文件夹内。要求:下载完后,遍历“黄易”这个文件夹,将所有不同扩展名的文件,全部更改为.txt为扩展名的文本文件;
这个可用如下批处理解决:
for /r %%i in (.) do (
ren *.* *.txt)
exit
================================
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大大的):
@echo off
setlocal enabledelayedexpansion
if "%2"=="" (
for /f "tokens=2 delims=#" %%i in ('"%~0" %1 OK^|sort') do echo %%i
) else (
for /f %%i in (%1) do (
call :CheckNum %%i Res
echo !Res!#%%i)
goto :eof)
pause>nul
:CheckNum num Res
set/a Res=0
for /l %%i in (0 1 1000) do (
set "var=%~1"
set tmp=!var:~%%i,1!
if "!tmp!"=="" goto :eof
set/a Res+=1
)
================================
3、将合并成的文件,自动命名为文件夹名称,如:《星际浪子》文件夹的的文本文件合并后,自动命名为:《星际浪子》.txt,并且自动move到“黄易”这个总文件夹根目录下。
提供一下自动命名(假设合并后的文本文件为a.txt)并转移代码:
for /r %%i in (.) do (
cd.>"%%i\%%~ni.txt"
copy a.txt "%%i\%%~ni.txt"
del a.txt
move "%%i\%%~ni.txt" E:\黄易\
)
exit
================================
以上需求要在一个批处理中(cmd环境下)解决,请各位版主、钻石、铂金、高人予以帮助!
[
Last edited by HAT on 2009-1-16 at 01:04 ]
作者: HAT
时间: 2009-1-15 22:00
除了这些人,不接受其他人的帮助?
作者: netbenton
时间: 2009-1-15 23:54
标题: 我可是新手
@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 ]
作者: pkto
时间: 2009-1-16 00:19
呵呵,hat老大,高人,就是指的其他人了啦
作者: pkto
时间: 2009-1-16 00:54
非常感谢netbenton兄,代码经验证,完全可行!而且很精练!兄台是高人哪!