У меня есть текстовые файлы из экспортируемых списков воспроизведения iTunes, которые представляют собой массивы, разделенные табуляцией. У них 27 столбцов, но для простоты я включу в пример только четыре:
Name Artist My Rating Location
Pod1 Show1 0 E:\Podcasts\Show1\Episode99.m4a
Pod2 Show2 100 E:\Podcasts\Show2\Show2 Ep 101 - Subtitle.mp3
Pod3 Show2 60 E:\Podcasts\Show2\News 11-17-2014.aicc
И так далее. Мне нужно извлечь только местоположение (которое всегда является последним столбцом) и поместить его в новый текстовый файл, чтобы он выглядел так:
E:\Podcasts\Show1\Episode99.m4a
E:\Podcasts\Show2\Show2 Ep 101 - Subtitle.mp3
E:\Podcasts\Show2\News 11-17-2014.aicc
Вот код, который у меня есть до сих пор для этой цели:
@ECHO OFF
type Podcasts.txt | findstr /v Grouping > Podcasts1.txt
del Podcasts.txt
rename Podcasts1.txt Podcasts.txt
Хотя я нашел несколько отдельных руководств по изменению отдельных строк и построчному чтению текстовых файлов, у меня возникли трудности даже с изменением одной строки так, как мне хотелось бы, не говоря уже о слиянии двух принципов. Я полагаю, что это, вероятно, очень быстрый ответ, который я просто не ищу, чтобы найти.
Я обнаружил, что можно получить нужные мне результаты в Notepad++, используя следующий REGEX:
Find: .+(E\:)
Replace: \1
Поэтому способ сделать это построчно в пакетном сценарии был бы полезен.
Бонус: я использую полученный файл в качестве белого списка для удаления файлов, которых нет в списке воспроизведения. Если у вас есть ссылка или вы можете написать небольшой код, это поможет. В противном случае у меня есть идеи о том, как я планирую добиться этого, что потребует использования одной папки.
EDIT: я обнаружил, что, поскольку некоторые столбцы пусты, используя это:
for /f "usebackq tokens=1-26,* delims= " %%a in ("Podcasts.txt") do (
echo %%q >> PodcastsTest.txt
)
Иногда попадает не в ту колонку. Мне нужно что-то, что может либо искать два символа «E:» и действовать оттуда, либо чтобы поиск строки шел справа налево при поиске первой вкладки.
Быстрый и грязный метод, который я только что создал, который ищет обратную косую черту (которая в настоящее время появляется только в Location), выглядит следующим образом:
for /f "usebackq tokens=1,* delims=\" %%a in ("Podcasts.txt") do (
echo E:\%%b >> PodcastsTest.txt
)
Это небезопасный метод, поскольку ничто не мешает некоторым другим полям иметь обратную косую черту, но как временное решение оно работает.
Я обнаружил, что Linux SED доступен для Windows. Может быть, есть способ адаптировать для него следующий поиск Notepad ++ REGEX?
Find: .+(E\:)
Replace: \1