Como substituir um único caractere em nomes de arquivos do Windows usando um arquivo em lotes?

6

Eu tenho um servidor Windows Server 2003 que tem um monte de nomes de arquivos que precisam ser renomeados. Basicamente, eu só preciso de todos os - (hífens) substituídos por _ (underscores), não importa onde eles estejam no nome do arquivo. Suponha que não haja duplicatas.

Eu posso fazer isso no meu Mac com um pequeno script, mas os arquivos são muito grandes e malucos para serem transferidos para o meu Mac, renomear e depois voltar para o servidor. É possível fazer isso em um prompt de comando do Windows sem ter que baixar um rename ou qualquer software adicional?

    
por Matt Rogish 05.11.2009 / 01:58

5 respostas

10

A partir do prompt de comando - supondo que todos os seus arquivos estejam no mesmo diretório:

ONE-LINER

for /f "tokens=* delims= " %i in ('dir /b "*.txt"') do Set LIST=%i& set LIST | ren "%~fi" "%LIST:-=_%"

Tenha em mente que essa é uma janela de prompt de comando por clique. Isso significa que, se você cancelar isso por qualquer motivo, precisará abrir outro prompt de comando e executá-lo novamente.

    
por 05.11.2009 / 03:55
2

Encontrado no stackoverflow:

link

Set fso = CreateObject("Scripting.FileSystemObject")
Set re  = New RegExp

re.Pattern = "[-]" ' put all characters that you want to strip inside the brackets'
re.IgnoreCase = True
re.Global = True

If WScript.Arguments.Unnamed.Count = 1 Then
  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then
    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0))
  Else
    WScript.Echo "Folder not found."
  End If
Else
  WScript.Echo "Please give folder name as argument 1."
End If


Sub Recurse(f)
  For Each sf In f.SubFolders
    Recurse sf
     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")
    sf.Name = re.Replace(sf.Name, "_")
  Next
  For Each sf In f.Files
     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")

     If sf.Name <> re.Replace(sf.Name, "_" ) Then
       sf.Name = re.Replace(sf.Name, "_")
     End If
  Next
End Sub
    
por 05.11.2009 / 02:24
2

Arquivo em lote para substituir um caractere em um nome de arquivo por outro caractere

Considere usar um aplicativo GUI grátis para segurar sua mão: link

Se você mesmo fizer isso com um arquivo em lote, seja super cuidadoso! Os scripts em lote não têm um botão "desfazer". Se você executar o seu script bat que se aplica a todos os arquivos recursivamente em algum lugar como C: , você acabou de renomear todos os arquivos no seu computador e ele irá imediatamente parar de funcionar e não inicializar. Você terá que fazer uma reinstalação completa do sistema operacional. Sempre tenha um backup!

Primeiro você terá que decidir se deseja que o arquivo de lote funcione em um único arquivo? Para trabalhar em todos os arquivos em um diretório? Ou feito de forma recursiva (todos os arquivos / pastas em um diretório). Aqui estão algumas dicas:

Arquivo em lote para substituir todos os sublinhados _ pela letra M para todos os arquivos no diretório atual

Coloque isso em um arquivo de lote chamado change_underscores_in_this_directory.bat

@echo off
setlocal enabledelayedexpansion
for %%a in (*_*) do (
  set file=%%a
  ren "!file!" "!file:_=M!"
)

Execute-o e todos os arquivos nesse diretório com um sublinhado serão alterados para um 'M'.

Use um arquivo de lote para substituir espaços com nada (removendo os espaços):

link

Use um arquivo em lote para substituir espaços por sublinhados, recursivamente:

link

    
por 17.01.2013 / 22:34
1

Outra solução seria usar dois arquivos em lote.

Arquivo 1: run_rn.bat:

forfiles /m "*.log" /c " cmd /c rn @file"

Arquivo 2: rn.bat:

set LIST1=%1
set LIST2=%LIST1:_=;%
ren %LIST1% %LIST2%

Os arquivos em lote precisam estar no mesmo diretório, como os arquivos que você deseja alterar.

    
por 10.07.2012 / 16:47
0

12noon tem um utilitário GRATUITO para renomear arquivos em massa com suporte a expressões regulares completas, o que é muito legal. "Name Twister" página de informações com links para download

Eu não usei este com raiva, mas usei outros aplicativos deles (especialmente o trocador de tela) e fiquei muito feliz.

    
por 05.11.2009 / 03:46