
Tento renomear todos os arquivos em pastas e subpastas removendo a parte "-min" de cada nome de arquivo com a ajuda de scripts em lote no win7
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
FOR /R %%A in (.*)-min.png DO REN "%%A-min.png" "%%A.png"
Parece que algo está errado aqui com o parâmetro SET, eu acho, então tento fazer assim:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
SET "oldname=%%G"
SET "newname=!oldname:~0,-8!.png"
REN "!oldname!" "!newname!"
)
mas tudo que recebo são erros. Quando eu ecoo a última instrução do loop, isso me fornece caminhos adequados. o que estou perdendo?
Responder1
Ao renomear um arquivo, você não pode incluir o caminho da pasta no nome de destino. Você pode usar %%~nxG
para obter o nome e a extensão do arquivo sem o caminho. Você não precisa da variável oldname - você pode simplesmente usar %%G
. Você pode eliminar uma linha e fazer a manipulação da string diretamente na instrução REN.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
SET "newname=%%~nxG"
REN "%%G" "!newname:~0,-8!.png"
)
Observe que o procedimento acima falhará se qualquer parte do caminho do arquivo incluir o !
caractere porque a expansão da variável FOR ocorre antes da expansão atrasada, portanto, corromperá o valor. Qualquer um !
pode ser preservado certificando-se de que a expansão atrasada esteja desabilitada quando a variável FOR for expandida. Isso requer ativar e desativar a expansão atrasada dentro do loop.
@echo off
setlocal disableDelayedExpansion
cd F:\Mega.Pack-128x128\textures\
for /r %%G in (*-min.png) do (
set "oldpath=%%G"
set "newname=%%~nxG"
setlocal enableDelayedExpansion
ren "!oldpath!" "!newname:~0,-8!.png"
endlocal
)