批处理脚本用于移动和重命名(如果存在)

批处理脚本用于移动和重命名(如果存在)

我有一个文件夹,里面有数千个 .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_MMMMddyyyy.pdf)

我对这些选项都满意,只是不知道如何将其放入脚本中。任何帮助都非常感谢。

答案1

您可以执行 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

相关内容