Script em lote para mover arquivos .txt recursivamente e renomeá-los substituindo um caractere específico

2

Eu tenho 3 pastas, como a estrutura abaixo. . .

  • /location1
    • /subdirLocation1
      • foo-bar1.txt, foo-bar2.txt, foo-bar3.txt
  • /location2

A pasta subdirLocation1 é um subdiretório de location1 . A pasta location1 também contém os arquivos foo-bar1.txt , foo-bar2.txt , foo-bar3.txt . No entanto, a pasta location2 está vazia.

Recapitulação da estrutura de pastas

  • location1 > subdirLocation1, foo-bar1.txt, foo-bar2.txt, foo-bar3.txt
  • subdirLocation1 > foo-bar-subdir.txt
  • location2 > (Empty)

Eu quero mover todos os arquivos .txt de location1 e seus subdiretórios para location2 e também renomeie esses arquivos .txt substituindo todos os "-" por "_" para que cada caractere de hífen nos nomes de arquivos se torne um sublinhado em vez disso.

Eu preciso realizar essa tarefa usando um script de lote do Windows?

Veja o que eu criei originalmente antes de adicionar uma lógica adicional que usei FOR abaixo disso, bem perto da parte inferior da minha resposta.

Isso, entretanto, apenas move arquivos .txt do diretório location1 e não de seu subdiretório. A renomeação também funciona apenas para foo-bar1.txt , foo-bar2.txt , foo-bar3.txt . Não funcionaria para foo-bar-subdir.txt .

MOVE "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location1\*.txt" "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2"  
RENAME "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2\*-*" ???_????.txt 

Abaixo está o que eu tenho que está funcionando um pouco melhor do que o acima, mas os caracteres do hífen não estão sendo substituídos pelos sublinhados nos nomes dos arquivos

CD "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1\" 
for /R %%f in (*-*.txt) do call :copyFile %%f 
goto: eof 

:copyFile 
xcopy %1 "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2" 
set file=%~nx1 
rename file %str:-=_%
    
por Dennis Bash 17.01.2017 / 17:38

1 resposta

0

I want to move all .txt files from location1 and its subdirectories to location2, and also rename these .txt files by replacing every "-" with "_".

Desde que você comentou um monte de trabalhos em lote que você colocou nisso, eu queria compartilhar um roteiro com você que ajudasse a explicar como você precisa que isso funcione.

Certifique-se de testar e confirmar todos os trabalhos como esperado do seu lado com os dados de teste antes de executar qualquer coisa crítica ou relacionada à produção.

Exemplo de script

Você não precisa usar a lógica de comentários, mas está lá, caso precise

@ECHO ON

SET Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1
SET Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2

CD /D "%Loc1Dir%" 
FOR /R %%F IN ("*-*.txt") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF 

:copyFile
SET copyfname=%~1
SET fname=%~2 
SET fname=%fname:-=_% 
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF

Esclarecimento de captura de tela

Maisrecursos

por 18.01.2017 / 00:19