有以下问题求助
情况设定:
有一个文件夹下面有多个文件夹及文件,文件夹和文件名称开头大部是由15位时间的数字和短横组成开头,例如:20190319110810-行业基础-001.txt。部分文件夹或文件的名称前面没有时间开头,例如:行业基础-074.txt。
拟编写bat文件实现以下功能(功能需求):
1.如果文件夹或者文件名称以15位时间组成开头,删去前面15位时间组成的开头。如20190319112109-示例文件夹-001,变成示例文件夹-001;20190319112038-行业基础-003.txt,变成行业基础-003.txt。
2.如果文件夹或者文件名称没有以15位时间组成开头,则文件夹或者文件名称不变。但仅以年份开头的文件不变名称,如2019年工作计划.txt,不作修改。
3.作用范围为当前文件夹及当前文件夹的子文件夹中所有文件夹和文件(对我而言是难点)。
自己编写了bat代码,仅能实现当前文件夹内文件夹和文件名称的修改,但对当前文件夹的子文件夹无效,需要把bat文件逐个拷入到子文件夹中依次处理。代码如下:- @ECHO OFF&Setlocal EnableDelayedExpansion
- :5
- set answer=N
- echo.
- echo 批量删除文件前面日期选择1,批量删除文件夹前面日期选择2,是否继续?
- set /p answer=文件选1,文件夹选2,输入其它键放弃...
- if "%answer%"=="1" goto :1
- if "%answer%"=="2" goto :2
-
- ::删除文件前面日期
- :1
- set /p z=s输入去掉字符个数:
- set /a y=1%z%1||goto 1
- for %%i in (*) do (set a=%%i
- set c=!a:~0,3!
- If "!c!"=="201" (
- ::如果前面是以201开头的文件则删除,非201开头的文件不执行下面操作
- set b=!a:~%z%!
- ::删除前几位
- ::set b=!a:~0,%z%!
- ::保留前几位
- ren "%%i" "!b!"
- )
- )
- goto 5
-
- ::删除文件夹前面日期
- :2
- echo 删除文件夹前面日期
- set /p z=s输入去掉字符个数:
- set /a y=1%z%1||goto 2
- for /d %%i in (*) do (set a=%%i
- set c=!a:~0,3!
- If "!c!"=="201" (
- ::如果前面是以201开头的文件则删除,非201开头的文件不执行下面操作
- set b=!a:~%z%!
- ::删除前几位
- ::set b=!a:~0,%z%!
- ::保留前几位
- ren "%%i" "!b!"
- )
- )
-
- goto 5
- pause
复制代码
|