批处理脚本以移动并重命名(如果存在)

我有一个文件夹,其中包含成千上万个.pdf文件,每个文件均由5位或6位数字的帐号命名。我有一个脚本,它将创建一个具有相同帐号的文件夹并将文件移入其中。

echo ON
Title  Move files Routine

setlocal enabledelayedexpansion
    pushd D:\test1\source\

    for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
    set filename=%%1&set dirname=!filename:~0,6!

    if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
    move %%1 D:\test1\source\!dirname!\
    )

PAUSE

但是,由于新文件已添加到源目录中,因此我需要每天运行此脚本,如果脚本将文件移动到已经具有相同名称文件的目录中,它将覆盖该文件而不是重命名。如何调整脚本以解决此问题。我的选择似乎是

  1. 附加到现有文件(这似乎需要其他软件)
  2. 重命名(例如123456.pdf至123456_001.pdf)
  3. 将日期添加到文件名中(例如123456.pdf到123456_MMMMddyyyyy.pdf)

我可以使用这些选项中的任何一个,但我只是不知道如何将其放入脚本中。任何帮助深表感谢。

最佳答案

您可以执行3),但我建议您也添加当前时间:

echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%

例如,这将输出

时间戳= 2018-03-13-17-18-38

因此您的批处理文件将如下所示:

echo ON
Title  Move files Routine

setlocal enabledelayedexpansion
    pushd D:\test1\source\

    for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
    set filename=%%1&set dirname=!filename:~0,6!

    if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
    move %%1 D:\test1\source\!dirname!\%%1--%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%.pdf
    )

PAUSE