【问题标题】:Batch renaming files in folder by adding date通过添加日期批量重命名文件夹中的文件
【发布时间】:2015-07-28 20:30:12
【问题描述】:

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

    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 将有它们被放入其中的日期。 提前谢谢!这个社区总是很棒!

【问题讨论】:

    标签: batch-file rename


    【解决方案1】:
    @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,因为它默认启用
    • 简化了一些事情以提高可读性

    【讨论】:

    • 为什么要在命令提示符下打开 PDF?并且它不会使用当前日期和时间创建新的黑色文本文档。我对批处理文件不太了解,所以也许我没有看到它!
    • 我刚刚重新格式化了您的代码并添加了重命名部分,就是这样。
    • 我的代码有那部分。不知道为什么你的不适合我,但我非常感谢你的帮助!
    【解决方案2】:

    我自己想出来的!我加了

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

    在乞讨和使用

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2018-08-22
      相关资源
      最近更新 更多