Como posso mover arquivos para uma pasta com base no nome deles?

2

Eu tenho vários arquivos .pdf e .tex em uma determinada pasta "ABC".

Todos eles são nomeados pelo esquema

C01S02_Word.pdf
C03S02SS01_Description_random_words.pdf
C04S01SS02_More_words.pdf
and so forth

C neste esquema significa capítulo, S para seção e SS para subseção. Então, na pasta ABC eu também tenho a pasta para cada capítulo, simplesmente chamada C01 , C02 e assim por diante. Em cada pasta de capítulo, tenho uma pasta chamada Imagens .

Alguém poderia escrever um script em lote para que eu pudesse mover todos os arquivos .tex e .pdf em suas respectivas pastas Imagens , C04S01SS02_More_words.pdf seria movido para C04/Pictures e C01S02_Word.pdf para C01/Pictures e assim por diante?

Observação: claro que eu Eu já pesquisei isso , mas até agora não consegui converter todos os bits em um script de trabalho. Eu não quero mais executar o T & E. : /

    
por henry 13.08.2014 / 21:44

1 resposta

2

Crie este arquivo em lote:

@echo off
for %%F in (*.pdf *.tex) do call :subr "%%F"
exit /b

:subr
set filename=%1
move %1 %filename:~1,3%\Pictures
exit /b

Notas:

  • for %%F in (*.pdf *.tex) do … executa a seguinte declaração uma vez para cada nome de arquivo que corresponda a *.pdf ou *.tex , com %%F definido para o nome do arquivo.
  • call :subr "%%F" invoca as três linhas inferiores do script, com o primeiro argumento ( %1 ) definido como "%%F" (o nome do arquivo, citado).
  • exit /b sai do script sem apagar a janela do prompt de comando.
  • set filename=%1 copia o argumento filename na variável filename .
  • move move um arquivo.
  • %código% pega a substring indicada de %variable:~start,len% (o primeiro caractere é # 0), então %variable% são os primeiros três caracteres de %filename:~1,3% . (A contagem começa em 0; estou usando 1 para pular o %filename% .)
  • " retorna da sub-rotina.
por 13.08.2014 / 22:24