Automação de renomeação de lote * _2. * TO *. *

1

Estou no processo de renomear vários arquivos de _2. para . Eu quero remover o sufixo "_2"

Minha primeira solução é tentar

   ren *_2.* *.*

mas isso não funciona. Ajuda é apperciated.

    
por Abdelhafid Madoui 23.02.2014 / 08:43

6 respostas

2

Solução

Você pode usar este script em lote:

@echo off
setlocal enabledelayedexpansion

for /r %%G in (*_2.*) do (
set new=%%~nG
set new=!new:~0,-2!
ren "%%~G" "!new!%%~xG"
)

Como funciona

  1. Listar todos os arquivos correspondentes a *_2.* .
  2. Remova o sufixo _2 de cada nome de arquivo ( %%~nG ) removendo os dois últimos caracteres.
  3. Anexe a extensão original ( %%~xG ) ao novo nome.
  4. Renomeie o arquivo.

Casos de teste

__2.bin --> _.bin
abc_def_2.txt --> abc_def.txt
2014_02_23_2.log --> 2014_02_23.log

Leitura adicional

por 23.02.2014 / 12:24
1

Você poderia tentar isso um pouco .cmd:

@echo off
setlocal enabledelayedexpansion

for %%a in (*_2.*) do (
set fnm=%%a
echo ren !fnm! !fnm:_2.=.!
)

que parece para fazer o que você espera (remova o eco se satisfeito pelo teste).

Acabei de ver um possível problema se você tiver vários _2. no nome do arquivo

EDITAR : substituiu a proposta incompleta de acordo com a sugestão

    
por 23.02.2014 / 12:32
0

Veja como você pode fazê-lo no PowerShell (é um verso, portanto, certifique-se de rolar para a direita):

gci PATH\TO\YOUR\FOLDER\ | ? {!$_.PSIsContainer -and $_.BaseName.EndsWith("_2")} | ren -NewName {("{0}{1}" -f $_.BaseName.Substring(0, $_.BaseName.Length-2), $_.Extension)}

gci é um alias de Get-ChildItem - digite o caminho para sua pasta aqui. Se você tiver subpastas, adicione -Recurse após o caminho

? é um alias de Where-Object - aqui fazemos um loop pelos itens e verificamos que NÃO é uma pasta e seu nome termina com "_2" (excluindo a extensão do arquivo).

ren - Renomear-Item - finalmente renomeamos os arquivos que passaram pelo filtro Where-Object. Usando Substring nós apenas cortamos os dois últimos caracteres do nome do arquivo.

    
por 23.02.2014 / 11:46
0

Isso deve ser feito sob a suposição de que os padrões são realmente _2.* e não _2*.* (nada após o dígito 2) e há apenas um sublinhado no nome como and31415 corretamente apontado out - como ele irá remover qualquer coisa de _ (sublinhado) até extensão

for %i in (*_2.*) do (@for /f "delims=_ tokens=1" %j in ("%~ni") do @echo ren "%i" "%j%~xi")

Por favor note:
- é uma linha, como executar diretamente da linha de comando
- agora apenas ecoa (imprime) ren comando para console. Depois de verificar se ele seria executado corretamente, remova @echo para que ele realmente renomeie os arquivos.

    
por 23.02.2014 / 12:30
0

Aqui está o one-liner para fazer isso com o Comando Take do JP Software , um interpretador de comandos cujo% O comandoREN suporta expressões regulares:

ren ::(.*)_2\.(.*) ::.

Leitura adicional

  • Software JP. REN . Take Command / TCC Help.
por 23.02.2014 / 14:47
-1

Eu não conheço uma maneira realmente rápida e suja de fazê-lo.

Mas, que tal colocar uma lista de diretórios nua em um arquivo TXT? Carregue o arquivo em uma planilha e crie fórmulas para criar os comandos renomear. Em seguida, você pode copiar os comandos de renomeação como valores e colá-los em um arquivo de lote que pode ser executado para fazer as renomeações.

    
por 23.02.2014 / 09:10