[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

50(元)求修改bat代码,实现如下功能!

求一个自动创建文件夹并智能命名文件夹,并归档的bat
有如下很多文件:
000002深万科A:2001年报告-1.PDF
000002G万科:2005年报告-1.PDF
000002万科A:2002年报告-1.PDF
000002万科A:2015年报告.PDF
……
000004ST国农:2006年报告-1.PDF
000004北大高科:2001年报告-1.PDF
000004北大高科:2004年报告-1.PDF
000004国农科技:2010年报告(更新后)-1.PDF
000004国农:2014年报告(更新后).PDF
……

1.以":"前面的“代码+股票名字”建立文件夹,若同一个代码后有多个名字,譬如:000002G万科,000002万科A,则以“:”后年份数据最大的为准,命名该文件夹。
如上面的:分别建立 文件夹“000002万科A”、“000004国农”。
(因为000002万科A 2015年是最新名称,000004国农是最新名称,对应2014年)
2.把前面6位数字相同的文件归入到文件名前6位相同的文件夹中。
【备注,如果有文件夹了,则不需创建,直接移动到对应的文件中】
3.更智能的能否实现:若有新的文件放入,运行后,也把这些文件自动按代码移入到上面的文件夹或子文件夹中。并据文件里面的最大年份前的名称自动更新文件夹名。 譬如:000004国农高科:2018年报告.PDF 运行后,放入到000004国农“后,并修改文件夹名为000004国农高科“。


原来百度高手“
乱世t逃犯”
给出了如下代码:
@echo off
setlocal enabledelayedexpansion
for /r %%a in (*.pdf) do (
    for /f "tokens=1* delims=年" %%b in ("%%~nxa") do (
         rem echo;%%b
         set leftn=%%b
         set leftn=!leftn: =!
         if not "!leftn:~-5,1!" ==":" set "leftn=!leftn:~,-4!:!leftn:~-4!"
         md !leftn:~,-5! 2>nul
         ren "%%~a" "!leftn!年%%~c"
    )
)
for /f "delims=" %%i in ('dir /ad /b') do (
     for /f "delims=" %%j in ('dir /a-d /b "%%~i:*.PDF"') do (
           move "%%~j" "%%~i"
     )
)
echo;处理完毕&pause>nul&exit /b

请高手修改一下,谢谢,讲述不清楚的可以qq66188026.

[img],乱世t逃犯的代码已经实现自动建立文件夹并归档,美中不足的是
1.同一股票代码因为不同年份名称不同,建立了不同文件,没有按最新年份命名文件夹并归并
2.如果后来再这些文件夹的根目录下,进入新的年报,运行后按代码归入到原来的文件中。

TOP

[attach]10576[/attach][attach]10576[/attach]

TOP

谢谢,因为中午qq2040486120大侠给出代码
如下:
@echo off

REM 开启变量延迟
setlocal enabledelayedexpansion

REM 搜索所有PDF文件
for /f "tokens=1* delims=年" %%a in ('dir /a-d /b *.PDF') do (
        set "str=%%~na"
        set "SN=!str:~0,6!"
        set "EN=!str:~-4!"

        if "!EN:~0,2!"=="20" (

                REM 获取股票代码
                if not defined ###_!SN!_ (
                        set "###_!SN!_=!EN!_!str:~0,-4!"

                ) else (
                        for %%I in (!SN!) do (set "tmp=!###_%%I_!")
                        set "tmp=!tmp:~0,4!"

                        if !EN! gtr !tmp! (
                                REM 获取最新年份股票名称
                                set "###_!SN!_=!EN!_!str:~0,-4!"
                        )
                )
        ) else (
                if not defined ###_!SN!_ (
                        for /f "tokens=1 delims=:" %%z in ("%%~na") do (
                                set "###_!SN!_=2000_%%z"
                        )
                )
        )
)

REM 根据股票代码创建文件夹
for /f "tokens=2,3* delims=_" %%a in ('set ###_') do (
        set "str=%%c"       

        REM 去掉文件名中的冒号
        if "!str:~-1!"==":" (
                set "str=!str:~0,-1!"
        ) else if "!str:~-1!"==":" (
                set "str=!str:~0,-1!"
        )

        REM 创建文件夹
        md "!str!"

        REM 按股票代码搜索PDF
        for /f "delims=" %%A in ('dir /a-d /b /s "%%a*.PDF"') do (

                REM 相同股票代码的PDF进行归类
                echo 正在移动... "%%~nA"
                move "%%A" "!str!"
        )
)

REM 清理空文件夹
for /f "delims=" %%a in ('dir /ad /b') do (
        if not exist "%%a\*.PDF" (
                rd "%%a" /q
        )
)
pause

谢谢taofan712 及WHY

TOP

本帖最后由 逐月飞鸿 于 2017-4-20 17:31 编辑

本帖已经完美解决,特别感谢,费用已结qq2040486120大侠。请勿再研究。
特别不好意思,因为qq联系测试,没有顾及本帖结帖。抱歉!

TOP

返回列表