Adicionando a pasta atual como um prefixo ao nome do arquivo sem duplicação

0

Estou tentando reunir um arquivo de lote que adicionará o nome da pasta atual como um prefixo a todos os arquivos dessa pasta. Além disso, isso precisa ser capaz de ser executado várias vezes sem duplicar o prefixo.

Eu encontrei este que é quase o que eu preciso! O único problema é que duplica o prefixo toda vez que é executado. Se alguém pudesse me apontar na direção certa, eu seria muito legal!

@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

Esta foi uma resposta postada pelo link para a pergunta Adicionar nome da pasta ao início do nome do arquivo

    
por blodge 23.08.2015 / 15:14

1 resposta

0

O próximo trecho de código mostra uma abordagem possível (uma de várias maneiras); Observe que o comando operacional ren é meramente ecoado ( echo ren ... ) para fins de depuração:

@ECHO OFF
SETLOCAL EnableExtensions
goto :skipProcedures

:testPrefix
call set "newN=%%oldN:*%prfx%=%%"
if /i not "%oldN%"=="%newN%" if /i "%oldN%"=="%prfx%%newN%" set "ToRename="
goto :eof

:skipProcedures
pushd "Folder"
for /d %%D in (*) do (
  pushd "%%D"
  for /r %%F in (*) do (
    for %%P in ("%%F\..") do (
      set "ToRename=Yes"
      set "prfx=%%~nxP_"
      set "oldN=%%~nxF"
      call :testPrefix
      if defined ToRename (
        echo ren "%%F" "%%~nxP_%%~nxF"
      ) else (
        echo prefixed already "%%F" "%%~nxF"
      )
    )
  )
  popd
)
popd

Recursos (leitura obrigatória, incompleta):

por 24.08.2015 / 00:03