我有这个批处理脚本,但它根本没有重命名文件。
我有一个以此格式命名的文档列表: yyyymmdd_docname1.pdf。我正在尝试将所有文档重命名为 docname1_yyyymmdd.pdf。
示例,重命名:
20230101_fullbloodcount.pdf 至 fullbloodcount_20230101.pdf。
20230202_esr.pdf 至 esr_20230202.pdf
所有这些文档不变的是附加在文档名称前面的日期格式。
脚本如下。如果您能查看该脚本并让我知道它有什么问题,我将不胜感激。预先感谢您。
@echo off
setlocal enabledelayedexpansion
set "directory=C:\Users\user1\Downloads\Rename"
cd /d "%directory%"
for %%f in (??????_*.pdf) do (
set "filename=%%~nf"
set "extension=%%~xf"
set "datepart=!filename:~0,8!"
set "docpart=!filename:~9!"
set "newname=!docpart!_!datepart!!extension!"
ren "%%f" "!newname!"
)
echo Files have been renamed.
pause
这是完成该任务的一种方法的基本示例:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('Dir /A:-D /B "????????_*.pdf" 2^>NUL') Do (
If /I "%%~xG" == ".pdf" (
Set "_=%%~nG"
Set "$="
Set /A "$=%%~nG" 2>NUL
If Defined $ (
SetLocal EnableDelayedExpansion
If !$! GEq 19700101 (
If !$! LEq 20251231 (
Ren "%%G" "!_:~9!!_:~8,1!!$!%%~xG"
)
)
EndLocal
)
)
)
EndLocal
Exit /B
我在这段代码中添加了一些简单的日期验证,(而不是依赖于最多任何八个字符,甚至八位数字的序列)。上面的设计适用于从 1970 年到今年年底的所有有效日期,(您需要调整超出该范围的
LEq
字符串)。但是,它并不排除这两个之间的无效日期,(例如20150229
或20240931
),因为这样做将远远超出您所述问题和简单批处理脚本的要求。