Posso usar um comando cmd para mover revisões anteriores de documentos para uma pasta diferente?

0

Eu trabalho no controle de documentos e tenho um grande número de documentos salvos em uma pasta, que também contém uma pasta chamada "old".

O que preciso fazer é filtrar os milhares de documentos na pasta principal e colocar as revisões antigas na pasta antiga (recortar, não copiar!). É possível fazer isso usando um CMD Command ?

Todos os meus documentos têm a mesma estrutura de nomes:

xxx_01.pdf para revisão 01

xxx_02.pdf para revisão 02 etc (o formato não é exclusivamente pdf).

    
por Kevin Anthony Oppegaard Rose 11.06.2013 / 14:49

1 resposta

2

O script em lote a seguir faz o que você deseja. Copie o código em um arquivo e chame-o de moveOld.bat e coloque-o na sua pasta.

@echo off
setlocal enableDelayedExpansion

pushd "%~dp0"
set "prev="
for /f "eol=: delims=" %%F in (
  'dir /b /a-d /oe-n *^|findstr /r "_[0-9][0-9]\.[^.]*$"'
) do (
  set "next=%%~nF"
  set "next=!next:~0,-2!%%~xF"
  if !next! neq !prev! (
    set "prev=!next!"
  ) else (
    move /y "%%F" old >nul
  )
)
popd

Você pode executar o script em um prompt de comando ou simplesmente clicar duas vezes no script no Windows Explorer.

O script funciona desde que nenhum dos nomes contenha o caractere ! - essa limitação pode ser removida com código extra.

Se o script encontrar um arquivo desatualizado na sua pasta que já existe na pasta antiga, ele simplesmente sobregravará o arquivo existente em antigo.

Explicação de como funciona

O script lista todos os arquivos no diretório, classificados por extensão e, em seguida, por nome decrescente. A lista é então filtrada por FINDSTR para preservar apenas os nomes de base que terminam com "_nn", em que nn é um número de 2 dígitos.

A lista de arquivos resultante é processada por FOR / F, uma por vez. Para cada arquivo, o sufixo de nome de 2 dígitos é removido e o resultado comparado ao arquivo anterior. Se for um novo valor, o valor anterior será atualizado e o arquivo será preservado. Se o valor corresponder ao valor anterior, o arquivo será movido.

    
por 11.06.2013 / 16:03