Каждую неделю одному из моих коллег приходилось go через папку с сотнями демультиплексированных видео- и аудиофайлов, переименовывать каждого из них отдельно для конкретной c городской телевизионной станции и затем рассортируйте их по папкам на основе названия города. Я создал файл .bat, чтобы переименовать их все для него, и теперь я хотел бы создать файл .bat, который создает новые каталоги на основе имен файлов и помещает соответствующие файлы в новые папки. Я скопировал несколько файлов для тестирования.
Таким образом, конечным результатом будет папка «Хьюстон» со всеми соответствующими файлами, Папка "Compton" с ее файлами, папка "Moline" и т. Д. c, и c ... для каждого города, примерно до 200 городов, , и мы только получаем больше.
В настоящее время он ищет «Хьюстон», вырезает все файлы, которые создают, вручную создает новую папку, называет ее «Хьюстон» и вставляет все файлы в свою новую папку. ДЛЯ КАЖДОГО ГОРОДА. 200 РАЗ. И это занимает несколько часов.
Файлы ВСЕГДА именуются с помощью этой системы: X ### Случайный город, ST
С моим маленьким крошечным знанием программирования, я предполагаю, что скрипт может обнаружить все символы после первого пробела, а перед запятой скопировать эти символы (случайный город), создать новую папку, присвоить ей имя скопированных символов (случайный город), а затем переместить любые файлы, содержащие «случайный город» в их имени файла, в вновь созданная папка. Конечный результат будет таким, просто с гораздо большим количеством папок.
Есть ли кто-нибудь более продвинутый, чем я, который мог бы объяснить лучший способ к этому?
Я заранее прошу прощения, если я не в том месте или недостаточно подкован. Ура!
ОБНОВЛЕНИЕ: Я возился, узнал о токенах и разделителях, переменных и т. Д. c. Вот то, что у меня работает, что работает удивительно, за исключением того, что я не уверен, как убрать запятую в конце названия города. Я использую пробел в качестве разделителя, который делает текст разбитым на токены, если я правильно понимаю, включая мою запятую, используя tokens = 2. Еще одна проблема, которая возникает; Скажем, есть город с двумя текстовыми кусками (жетонами), например. Сан-Франциско, Батон-Руж. Как я могу схватить их обоих, используя запятую как точку остановки? Мой код приведен ниже.
@echo off
setlocal enabledelayedexpansion
for %%A in (*.m2v *.mpa) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "tokens=2* delims= " %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! doesn't exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
pause
ОБНОВЛЕНИЕ 2: Я нашел обходной путь meh, чтобы избавиться от запятой, добавив его в качестве разделителя, но я все еще пытаюсь обернуть моя голова вокруг 2 городов слова. Мои папки «Батон-Руж» и «Сан-Франциско» называются соответственно «Батон» и «Сан». Вот мой код, я обновлю его, если найду лучший способ.
setlocal enabledelayedexpansion
for %%A in (*.m2v *.mpa) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "delims=," %%B in ("%%A") do set fname=%%~nB
for /f "tokens=2* delims= " %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! doesn't exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
pause
ОБНОВЛЕНИЕ 3
Вот мой код, который работал. Однако, если количество символов в префиксах / суффиксах вашего имени файла изменится, это все испортит, и вам придется редактировать код.
@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR %%A in (*.m2v *.mpa) do (
ECHO file found %%A
FOR /F "delims=" %%B in ("%%A") do set fname=%%~nB
SET folname=!fname:~5,-4!
ECHO folder name !folname!
if not exist "!folname!" (
ECHO Folder !folname! doesn't exist, creating
MD "!folname!"
) else (
ECHO Folder !folname! exists
)
ECHO Moving file %%A to folder !folname!
MOVE "%%A" "!folname!"
)
ECHO Finished
PAUSE
Использование SET folname=!fname:~5,-4!
позволяет мне обрезать префикс M373 , 5 символов, и, суффикс TX, 4 символа, удаляя запятую и спасая название города, независимо от его длины или количества слов (например, West Palm Beach, FL). Антарес упомянул об этом решении в своем ответе, который работал как шарм.
Но это также заставило меня задуматься
Если количество символов в префиксе изменится, что вполне вероятно, мне придется каждый раз редактировать пакетный файл каждый раз или создайте указанный c пакетный файл для каждого обстоятельства. Не страшно, но и не здорово. Поэтому я согласился с ответом Майкла Хита, который работает безупречно. Я еще не достаточно умен, чтобы точно знать, почему, но я расскажу об этом и выясню. Я многому учусь. Спасибо всем!