Это может быть немного не элегантно, но поместите это в свой пакетный файл:
setlocal enabledelayedexpansion
︙
for %%f in (*) do (
set tempname=%%f
set tempname=!tempname:xyz=!
if %%f == !tempname! (put your sed command here) %%f
)
Команда setlocal может быть в начале пакетного файла или прямо перед циклом for или где-то между ними.
(Я рекомендую поместить его в начало командного файла, сразу после @echo off .)
Запустите cmd /? и setlocal /? немного больше информации об этой команде.
По сути, это позволяет вам обрабатывать переменные в циклах несколько вменяемым образом.
Я предполагаю, что вы достаточно знаете о пакетных файлах, что вы понимаете, что FOR variable IN (set) DO command циклически перебирает имена файлов в set (который может включать в себя подстановочные знаки, такие как *), устанавливая variable для каждого имени файла и выполняя command.
Скобки (после do и в конце) позволяют нам иметь многострочную command.
Синтаксис обычной переменной не работает с %%variable s, поэтому мы копируем %%f во временную переменную.
Затем мы используем форму расширения %variable:str1=str2% (find and replace), чтобы заменить все вхождения xyz в %tempname% .
... За исключением того, что мы находимся в цикле, мы должны использовать ! вместо % (это то место, куда входит setlocal enabledelayedexpansion).
Затем мы сравниваем сокращенное имя файла с исходным именем (все еще в %%f).
Если они равны, то в имени файла не должно быть ни одного экземпляра xyz , поэтому мы запускаем вашу команду.
Если они разные, это означает, что подстановка нашла хотя бы один xyz , поэтому мы не запускаем вашу команду.
PS Я считаю, что вам не нужна команда call .