Как переместить файлы в папку на основе их имени?

Как переместить файлы в папку на основе их имени?

У меня есть несколько файлов .pdf и .tex в определенной папке «ABC».

Все они названы по схеме

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

Св этой схеме обозначает главу,Сдля раздела иSSдля подраздела. Так что в папке ABC у меня также есть папка для каждой главы, просто названнаяС01,С02и т. д. В каждой папке главы у меня есть одна папка с именемКартинки.

Может ли кто-нибудь написать пакетный скрипт, чтобы я мог переместить все файлы .tex и .pdf в соответствующие папки?Картинки-папка, C04S01SS02_More_words.pdfбудет перемещена в C04/Picturesи C01S02_Word.pdfв C01/Picturesи так далее?

Примечание:конечно, я уже это гуглилно пока мне не удалось преобразовать все эти многочисленные биты в рабочий скрипт. Я больше не хочу делать прогоны T&E. :/

решение1

Создайте этот пакетный файл:

@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

Примечания:

  • for %%F in (*.pdf *.tex) do …выполняет следующую инструкцию один раз для каждого имени файла, которое соответствует *.pdfили *.tex, при этом %%Fустановлено значение имени файла.
  • call :subr "%%F"вызывает три нижние строки скрипта, при этом первый аргумент ( %1) устанавливается равным "%%F"(имя файла, заключенное в кавычки).
  • exit /bзавершает работу скрипта, не закрывая окно командной строки.
  • set filename=%1копирует аргумент имени файла в filenameпеременную.
  • moveперемещает файл.
  • %variable:~start,len% берет указанную подстроку (первый символ — #0), то есть первые три символа . (Отсчет начинается с 0; я использую 1, чтобы пропустить .)%variable%%filename:~1,3%%filename%"
  • exit /bвозвращается из подпрограммы.

Связанный контент