我有多个目录和子目录,需要删除所有文件名的日期部分,并保留文件名的其余部分。
实施例
输入:Dummy-Filename-V0001-01202018.txt
输出:Dummy-Filename-V0001.txt
基本上,我需要删除“-01202018”部分。
注意:
我目前有以下代码,我已经能够遍历所有子目录并显示带日期的文件,但我尝试过的重命名命令不起作用。 (见评论)
FOR /R "C:\Users\Dummy\Desktop\UAT\Sample\" %%G in (.) DO (
Pushd %%G
Echo now in %%G
echo before
dir
dir "*-01202018*"
REM ren *-01202018.txt *.txt
REM ren ???-01202018.txt ???.txt
REM rename 's/-01202018//' *
REM rename "*-01202018*" "*/////////*"
echo after
dir
Popd )
Echo "back home"
PAUSE
答案 0 :(得分:1)
从我们上面的讨论中,我试图尽可能地使这个解决方案更为合理:
@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@set prompt=$G
@if "%1" equ "" goto :UsageError PrefixPattern
@if "%2" equ "" goto :UsageError Literal
@if "%3" equ "" goto :UsageError PostfixPattern
@for %%A in (%1%2%3) do @call :TruncateFileName "%%A" "%2"
@exit /b 0
:TruncateFileName
@set _name=%~1
@set _name=!_name:%~2=!
@echo Renaming %~1 =^> %_name%
@ren %1 "%_name%"
@exit /b 0
:UsageError
@echo Missing parameter: %1
@exit /b 160
请务必在一个或多个实际目标目录的副本中对此进行测试。你可以一次测试一个独立的目录,但是我会写一个脚本迭代你的目录,然后在那里调用这个脚本(lots of examples can be found here at SO)。
用法:RenameThem.cmd <prefixPattern> <literal> <postfixPattern>
示例:RenameThem.cmd * -20180109 * .pdf