Você pode fazer isso de uma maneira mais amigável usando ReNamer , com uma única regra de renomeação :
- 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 .
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.
Você pode fazer isso de uma maneira mais amigável usando ReNamer , com uma única regra de renomeação :
Você também pode salvá-lo como Preset e usá-lo para renomear a linha de comando .
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.
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
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.