Script em lote do Windows para substituir uma palavra em um nome de arquivo

0

Eu tenho um usuário que cria vários conjuntos de texturas exportados a partir de um programa de edição visual que ele usa diariamente. Quando estes exportam, os nomes de arquivos são exibidos com um padrão de "textura *" (por exemplo, textura_43522, textura511235, textura-341231).

O que meu usuário precisa é de um script que ele possa executar em um desses diretórios exportados para adicionar a letra "b" ao final da palavra textura, para que ele possa importar essas texturas corretamente para a próxima etapa do fluxo de trabalho. (por exemplo, textura b _43522, textura b 511235, textura b -341231)

Encontrei uma pergunta semelhante aqui: pergunta semelhante, substituindo "-" por "_", mas não sou versado em scripts em lotes e não consigo descobrir como injetar o padrão "textura" no script em vez do traço.

Qualquer orientação, referência ou amostra de código é bem-vinda.

EDITAR:

Uma solução que acabei usando:

Get-ChildItem -Filter "*texture*" -Recurse | Rename-Item -NewName {$_.name -replace 'texture','textureB' } 

Veja a resposta da nixda abaixo e use a que melhor se adequa à sua situação

Miguet Schwab
fonte
A resposta do nixda abaixo é válida, mas acabei chegando a esta solução: Get-ChildItem -Filter "*texture*" -Recurse | Rename-Item -NewName {$_.name -replace 'texture','textureB' }
Miguet Schwab

Respostas:

0

Espero que o PowerShell como sucessor dos CMDs esteja ok

Dir D:\test | Where {$_ -notmatch '^textureb' } | ForEach {
    Ren $_.Fullname $_.Name.Replace('texture','textureb')
}
nixda
fonte
Obrigado pela sua resposta, não tive a chance de voltar e comentar até agora. Sua solução funcionou, mas eu mesmo acabei seguindo esse comando: Get-ChildItem -Filter "*texture*" -Recurse | Rename-Item -NewName {$_.name -replace 'texture','textureB' }
Miguet Schwab 3/15
@MiguetSchwab Eu escolhi intencionalmente o where-objectpara que você possa usar uma expressão regular. Minha versão também renomeia os arquivos chamados 123texture456.txtonde o seu não será. Chave aqui é o ^sinal que marca o início filename
nixda
obrigado pela explicação, o caractere asterisco antes e depois do meu padrão permitiria capturar "textura", apesar dos caracteres anteriores?
Miguet Schwab
@MiguetSchwab Narf, eu me confundi com sucesso. Então, aqui vamos nós outra vez. -notmatch '^textureb'significa pegar todos os arquivos que não estão começando com textureb ie. já foram renomeados de uma execução anterior. Enquanto o seu significa: Pegue todos os arquivos com textura em algum lugar do nome. Isso inclui também arquivos como textureb123, que já foram renomeados da execução anterior. Ou 123texture.txt também seria renomeado, mas não deve, pois não se enquadra na sua solicitação inicial. Você deve ficar com a minha versão
nixda