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
.