Удаление оставшейся части строки с места известного слова

Пакет: у меня есть строка в переменной %filename%. Мне нужно проверить его на наличие известной переменной %year% и использовать ее, чтобы упростить строку до заголовка.

Пример:

The Grand Strategy (1999) whatever.pdf

...станет...

The Grand Strategy

...так что смысл будет заключаться в том, чтобы использовать год в качестве точки отсечения, удаляя вместе с ним год и остальную часть имени файла. Сценарий должен работать для любого неизвестного имени файла.

мой код:

for /f "delims = " %%r in ('powershell -command "if ('!title!' -match '\b(19|20)\d{2}\b') { echo $matches[0] } else { echo No match }"') do set "year=%%r"
set title=!title: (%year%)=& rem !"

🤔 А знаете ли вы, что...
PowerShell может использоваться для анализа журналов событий и поиска проблем в системе.


1
54
1

Ответ:

Решено

Проще и надежнее позволить PowerShell извлечь префикс за вас, используя его оператор -replace:

@echo off

:: Sample title
set "title=The Grand Strategy (1999) whatever.pdf"

for /f "usebackq delims = " %%r in (`
  powershell -NoProfile -Command "$env:title -replace ' *\((19|20)\d{2}\).*'"
`) do set "title=%%r"

:: Diagnostic output to verify the result.
:: -> "The Grand Strategy"
echo "%title%"

Примечание:

  • Вышеупомянутое не требует setlocal enabledelayedexpansion.

  • Заставляя команду PowerShell ссылаться на переменную title как на переменную среды $env:title, можно избежать проблем, которые могли бы возникнуть, если бы значение переменной title было непосредственно встроено в команду.