Пакет: у меня есть строка в переменной %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 может использоваться для анализа журналов событий и поиска проблем в системе.
Проще и надежнее позволить 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
было непосредственно встроено в команду.