通过添加日期批量重命名文件夹中的文件

Batch renaming files in folder by adding date

我有一个批处理文件,可以移动和组织一些东西。我想在该批处理的末尾添加一些代码,以将所有文件重命名为相同的名称,但除了结尾之外的日期仅以数字表示。也许我不擅长搜索,因为我发誓这已经被覆盖了,但我就是找不到。所以总而言之,我需要帮助编写代码来转换文件夹中末尾没有日期的每个文件,以将日期添加到末尾。所以它需要检查末尾是否有8位数字,如果没有则添加日期。我将 post 我的批处理文件以防万一你需要知道我在做什么

    rem @echo off
SETLOCAL enableextensions
Set dat=Date
for %%x in (*.pdf) do (
    set "_pdfname=%%x"
    call :doAllWork
)
goto :eof

:doAllWork
ECHO start
start %_pdfname%
TIMEOUT /T 2 /NOBREAK
start select.vbs
TIMEOUT /T 1 /NOBREAK
start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F %%g in ('
  wmic OS get LocalDateTime /value^|findstr "="
  ') do for /F %%G in ("%%g") do set "_%%G"
echo %_LocalDateTime:~0,14%
type NUL > TextFiles\%_LocalDateTime:~0,14%.txt
start TextFiles\%_LocalDateTime:~0,14%.txt
TIMEOUT /T 2 /NOBREAK
ECHO close PDF
start close.vbs
TIMEOUT /T 2 /NOBREAK
start window.vbs
TIMEOUT /T 1 /NOBREAK
start paste.vbs
TIMEOUT /T 1 /NOBREAK
start save.vbs
TIMEOUT /T 1 /NOBREAK
start close.vbs
start enter.vbs

move /-y "%_pdfname%" "OldTimesheets\"

TIMEOUT /T 1 /NOBREAK
ECHO exit loop
if exist *.pdf (
    goto :eof
) else (
    goto :end
)


:end


cscript MessageBox.vbs "This will be shown in a popup."

所以最后,OldTimesheets 中的所有新 PDF 都需要重命名,但旧的 PDF 将具有它们放入其中的日期。 提前致谢!这个社区永远很棒!

@echo off
SETLOCAL enableDelayedExpansion
for /f "delims=" %%x in ('dir /b *.pdf') do (
    call :doAllWork "%%x"
)
for /f "delims=" %%x in ('dir /b *.pdf') do (
    echo %%x | findstr /r "_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\." >nul
    if errorlevel 1 ren "%%x" "%%~fx_!_LocalDateTime:~0,8!%%~nx"
)
cscript MessageBox.vbs "This will be shown in a popup."
pause
exit

:doAllWork
ECHO start
start %1
TIMEOUT /T 2 /NOBREAK & start select.vbs
TIMEOUT /T 1 /NOBREAK & start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F "delims== tokens=2" %%g in ('
    wmic OS get LocalDateTime /value ^| find "="
') do set _LocalDateTime=%%g
echo !_LocalDateTime:~0,14!
type NUL > TextFiles\!_LocalDateTime:~0,14!.txt
start TextFiles\!_LocalDateTime:~0,14!.txt
TIMEOUT /T 2 /NOBREAK & ECHO close PDF & start close.vbs
TIMEOUT /T 2 /NOBREAK & start window.vbs
TIMEOUT /T 1 /NOBREAK & start paste.vbs
TIMEOUT /T 1 /NOBREAK & start save.vbs
TIMEOUT /T 1 /NOBREAK & start close.vbs & start enter.vbs
move /-y "%1" "OldTimesheets\"
TIMEOUT /T 1 /NOBREAK & ECHO exit loop
exit /b

备注:

  • 已将 *.pdf 的直接枚举替换为 dir /b *.pdf,以防止在重命名文件后重新处理文件。
  • 添加了 SETLOCAL enableDelayedExpansion 以使 _LocalDateTime 在每次赋值时更改其值,在这种情况下也应使用 ! 而不是 %
  • 已删除 SETLOCAL enableextensions,因为它默认启用
  • 简化了一些内容以提高可读性

我自己想出来的!我添加了

set str=%date%
echo.%str%
set str=%str:/=%
echo.%str%

在乞讨和使用

ren OldTimesheets\%_pdfname% %str%%_pdfname%

就在移动线之后。奇迹般有效!无论如何感谢您的帮助!