Это может быть немного не элегантно, но поместите это в свой пакетный файл:
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
.