2

У меня есть папка, содержащая тысячи файлов .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 ответ1

0

Вы можете сделать 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .