2

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

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

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

C в этой схеме обозначает главу, S - раздел, а SS - подраздел. Поэтому в папке ABC у меня также есть папка для каждой главы, просто названная C01, C02 и так далее. В каждой папке главы у меня есть одна папка с именем Pictures.

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

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

1 ответ1

2

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

@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% принимает указанную подстроку %variable% (первый символ # 0), поэтому %filename:~1,3% - это первые три символа %filename% .  (Счет начинается с 0; я использую 1, чтобы пропустить " .)
  • exit /b возвращает из подпрограммы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .