Script em lote para mover e renomear se existir

2

Eu tenho uma pasta que contém milhares de .pdfs cada arquivo nomeado por um número de conta de 5 ou 6 dígitos. Eu tenho um script que irá criar uma pasta com o mesmo número de conta e mover o arquivo para ele.

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

No entanto, eu preciso executar este script diariamente quando novos arquivos são adicionados ao diretório de origem e se o script mover um arquivo para um diretório que já tenha um arquivo com o mesmo nome, ele será substituído em vez de renomeá-lo. Como posso ajustar meu script para resolver esse problema? Minhas opções parecem ser

  1. anexar ao arquivo existente (isso parece exigir software adicional)
  2. Renomear (por exemplo, 123456.pdf para 123456_001.pdf)
  3. Adicionar data ao nome do arquivo (por exemplo, 123456.pdf para 123456_MMMMddyyyy.pdf)

Eu estou bem com qualquer uma dessas opções, eu não sei como colocar isso no script. Qualquer ajuda é muito apreciada.

    
por callasabra 13.03.2018 / 20:32

1 resposta

0

Você pode fazer 3), mas sugiro adicionar a hora atual também:

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

Isso produzirá, por exemplo,

Timestamp = 2018-03-13-17-18-38

Assim, seu arquivo em lote ficaria assim:

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
    
por 13.03.2018 / 21:22