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

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

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

Cneste esquema significa capítulo,Spara seção eSSpara subseção. Então na pasta ABC eu também tenho a pasta de cada capítulo, simplesmente chamadaC01,C02e assim por diante. Em cada pasta de capítulo eu tenho uma pasta chamadaFotos.

Alguém poderia escrever um script em lote para que eu pudesse mover todos os arquivos .tex e .pdf em seus respectivosFotos-folder, C04S01SS02_More_words.pdfseria movido para C04/Picturese C01S02_Word.pdfpara C01/Picturese assim por diante?

Observação:claro que já pesquisei isso no Googlemas até agora não consegui converter todos os bits em um script funcional. Não quero mais fazer corridas de T&E. :/

Responder1

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 instrução a seguir uma vez para cada nome de arquivo que corresponda *.pdfa ou *.tex, com %%Fdefinido como 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, entre aspas).
  • exit /bsai do script sem abrir a janela do prompt de comando.
  • set filename=%1copia o argumento do nome do arquivo na filenamevariável.
  • movemove um arquivo.
  • %variable:~start,len% pega a substring indicada de (o primeiro caractere é #0), assim como os três primeiros caracteres de . (A contagem começa em 0; estou usando 1 para pular o .)%variable%%filename:~1,3%%filename%"
  • exit /bretorna da sub-rotina.

informação relacionada