Entendendo um loop for em um arquivo em lote para renomear arquivos substituindo strings

0
@echo off
Setlocal enabledelayedexpansion

Set "Pattern=rename"
Set "Replace=reuse"

For %%a in (*.jpg) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)

Isso renomeia .jpgs tendo substring 'rename'. Ref: link . Alguém pode me fazer entender como o loop for faz esse trabalho? Além disso, é possível usar uma opção /f aqui para se livrar do 'Acesso negado'? E onde posso colocar o nul ?

    
por Deb 06.02.2014 / 16:38

1 resposta

2

For %%a in (*.jpg) Do ( - diz para obter uma listagem de diretórios de cada arquivo com extensão jpg e me fornecer o nome atual na variável %%a e fazer algo (que segue entre os colchetes). Não tenho certeza de onde Access Denied seria proveniente, presumivelmente você não tem direitos de sistema de arquivos para renomear um ou mais arquivos.

O esforço real deste comando é proveniente de enabledelayedexpansion que permite sintaxe de substituição variável .

Ren "%%a" "!File:%Pattern%=%Replace%!" - A parte renomeada pode ser simplificada em ren this that ... o truque é que o segundo bloco com pontos de exclamação ... que inicia a substituição da variável.

"!File:%Pattern%=%Replace%!" - para a variável File (configurado na linha acima para ser caminho completo e nome do arquivo atual no loop for - que não é necessário com essa listagem de diretório) substitua todas as ocorrências de Pattern com Replace . Pattern é definido na linha 5 para renomear enquanto Replace é definido na linha 6 para reutilizar , portanto, este comando diz: no nome do arquivo fornecido, substitua todas as ocorrências da cadeia renomear com reutilizar .

Para compilar tudo:

  1. Para todos os arquivos com extensão jpg no diretório atual

  2. Renomeie o arquivo para que todas as ocorrências da string rename agora sejam reuse

for /f é para ler o conteúdo de texto de um ou mais arquivos linha por linha - então não, não vai te ajudar aqui.

De onde vem este nul ?

    
por 06.02.2014 / 17:19