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.pdf
seria movido para C04/Pictures
e C01S02_Word.pdf
para C01/Pictures
e 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*.pdf
a ou*.tex
, com%%F
definido 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 /b
sai do script sem abrir a janela do prompt de comando.set filename=%1
copia o argumento do nome do arquivo nafilename
variável.move
move 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 /b
retorna da sub-rotina.