Adicione o nome da pasta ao início do nome do arquivo

6

Eu tenho uma estrutura de diretórios como abaixo:

Folder
  > SubFolder1
    > FileName1.abc
    > Filename2.abc
    > .............

  > SubFolder2
    > FileName11.abc
    > Filename12.abc
    > ..............

  > ..........

Quero renomear os arquivos dentro das subpastas como:

SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc

i.e. adicione o nome da pasta no início do nome do arquivo com o delimitador " _ ". A estrutura de diretórios deve permanecer inalterada. Nota: O início do nome do arquivo é o mesmo. por exemplo. no arquivo acima do arquivo *.

Eu fiz abaixo do Script

for /r "PATH" %%G in (.) do (
  pushd %%G
  for %%* in (.) do  set MyDir=%%~n* 
  FOR %%v IN (File*.*) DO REN %%v  "%MyDir%_%%v" 
  popd
  ) 

O problema com o script acima é que ele está pegando apenas um nome de subpasta e colocando-o no início do nome do arquivo, independentemente da pasta.

    
por shekhar 07.12.2012 / 07:19

4 respostas

5

Você pode fazer isso de uma maneira mais amigável usando ReNamer , com uma única regra de renomeação :

  1. Inserir ": File_FolderName: _" como prefixo (ignorar extensão)

Você também pode salvá-lo como Preset e usá-lo para renomear a linha de comando .

    
por 04.03.2014 / 21:40
2

Para renomear somente arquivos nas pastas filho imediatas

@echo off
pushd "Folder"
for /d %%D in (*) do (
  for %%F in ("%%~D\*") do (
    for %%P in ("%%F\..") do (
      ren "%%F" "%%~nxP_%%~nxF"
    )
  )
)
popd

Para renomear recursivamente todos os arquivos em pastas filhas

@echo off
pushd "Folder"
for /d %%D in (*) do (
  pushd "%%D"
  for /r %%F in (*) do (
    for %%P in ("%%F\..") do (
      ren "%%F" "%%~nxP_%%~nxF"
    )
  )
  popd
)
popd

Certifique-se de executar apenas um script uma vez! Você não quer colocar vários prefixos na frente dos arquivos: -)

Um código adicional pode ser adicionado para que seja seguro executar várias vezes.

    
por 07.12.2012 / 14:22
1

Se você quiser renomear arquivos dentro da subpasta, somente esta é a solução.

for %%f in (.) do set "A=%%~dpnxf\"
for /r "%A%" %%f in (.) do call :func "%%~f"
goto :EOF
:func
set "B=%~1"
for %%g in ("%B%") do set "C=%%~dpnxg"
for %%g in ("%C%") do set "D=%%~nxg"
cd  %C%
set "k=%C%\"
if NOT %A%==%k% FOR %%v IN (*.*) DO REN "%%v" "%D%_%%v" 
goto :EOF
    
por 24.12.2012 / 10:45
1

Você pode fazer isso facilmente usando o Windows Powershell. É um script de duas linhas para renomear todos os arquivos em subpastas, da mesma forma que o nome do arquivo recebe um prefixo de nome de subpasta. Considere esta estrutura simples no Drive D:

D: \ folder1 \ Sub1

         Sub1 - AAAA.txt
          Sub1 - BBBB.txt
           Sub1 - CCC.txt

D: \ folder1 \ Sub2

          0 AAAAA.txt
          0 CCCC.txt

Aqui está o script:

PS C: \ Usuários \ Usuários > cd D: \ folder1

PS D: \ pasta1 > get-childitem -recurse | Renomear-Item -NewName {$ .Directory.Name + "-" + $ .Name}

Ao executar o script, todos os arquivos serão renomeados com o prefixo do nome do diretório.

    
por 14.07.2018 / 10:33