Isso pode ser um pouco deselegante, mas coloque isso no seu arquivo de lote:
setlocal enabledelayedexpansion
︙
for %%f in (*) do (
set tempname=%%f
set tempname=!tempname:xyz=!
if %%f == !tempname! (put your sed command here) %%f
)
O comando setlocal pode estar no início do arquivo de lote,
ou logo antes do loop for ou em qualquer lugar entre eles.
(Eu recomendo colocá-lo no início do arquivo de lote,
logo após o @echo off .)
Execute cmd /? e setlocal /? para obter mais informações sobre esse comando.
Basicamente, ele permite manipular variáveis em loops de uma maneira um pouco sã.
Eu presumo que você saiba o suficiente sobre arquivos em lote que você entende
que FOR variable IN (set) DO command
faz um loop sobre os nomes de arquivos em set (que pode incluir curingas, como * ),
definindo o variable para cada nome de arquivo, e executando o command .
Os parênteses (depois de do e no final)
vamos ter uma multi-linha command .
A sintaxe da variável normal não funciona em %%variable s,
então copiamos %%f para uma variável temporária.
Então usamos o %variable:str1=str2%
(encontrar e substituir) forma de expansão variável
para substituir todas as ocorrências de xyz em %tempname% com nulo.
… Exceto , já que estamos em um loop
temos que usar ! em vez de %
(é aqui que entra o setlocal enabledelayedexpansion ).
Em seguida, comparamos o nome do arquivo abreviado com o nome original (ainda em %%f ).
Se eles são iguais, não deve haver nenhuma instância de xyz
no nome do arquivo, então nós executamos o seu comando.
Se eles são diferentes, isso significa que a substituição
encontrou pelo menos um xyz , por isso, não executamos o seu comando.
P.S. Eu acredito que você não precisa do comando call .