¿Cómo puedo mover archivos a una carpeta según su nombre?

¿Cómo puedo mover archivos a una carpeta según su nombre?

Tengo varios archivos .pdf y .tex en una determinada carpeta "ABC".

Todos ellos están nombrados por el esquema.

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

Cen este esquema significa capítulo,Spara la sección ySSpara la subsección. Entonces en la carpeta ABC también tengo la carpeta para cada capítulo, simplemente llamadaC01,C02Etcétera. En cada carpeta de capítulo tengo una carpeta llamadaFotos.

¿Podría alguien escribir un script por lotes para poder mover todos los archivos .tex y .pdf en sus respectivosFotos-carpeta, C04S01SS02_More_words.pdf¿se movería hacia C04/Picturesy C01S02_Word.pdfhacia C01/Picturesy así sucesivamente?

Nota:Por supuesto que ya busqué esto en Google.pero hasta ahora no pude convertir todos los bits en un script que funcione. Ya no quiero realizar viajes de T&E. :/

Respuesta1

Cree este archivo por lotes:

@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 …realiza la siguiente declaración una vez para cada nombre de archivo que coincida con *.pdfo *.tex, %%Festablecido en el nombre de archivo.
  • call :subr "%%F"invoca las tres líneas inferiores del script, con el primer argumento ( %1) establecido en "%%F"(el nombre del archivo, entre comillas).
  • exit /bsale del script sin borrar la ventana del símbolo del sistema.
  • set filename=%1copia el argumento del nombre del archivo en la filenamevariable.
  • movemueve un archivo.
  • %variable:~start,len% toma la subcadena indicada de (el primer carácter es #0), al igual que los primeros tres caracteres de . (El conteo comienza en 0; estoy usando 1 para omitir el archivo ).%variable%%filename:~1,3%%filename%"
  • exit /bregresa de la subrutina.

información relacionada