Agregue parte del nombre de la carpeta al comienzo del nombre del archivo

Agregue parte del nombre de la carpeta al comienzo del nombre del archivo

Esto es básicamente una continuación de la pregunta respondida pero con una condición adicional.

Agregar el nombre de la carpeta al comienzo del nombre del archivo

Tengo una estructura de directorio como la siguiente:

Folder
  > SubFolder1xxxx
    > FileName1.abc
    > Filename2.abc
    > .............

  > SubFolder2xxxx
    > FileName11.abc
    > Filename12.abc
    > ..............

  > ..........

etc. Quiero cambiar el nombre de los archivos dentro de las subcarpetas como:

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

es decir, agregue parte del nombre de la carpeta al principio del nombre del archivo con el delimitador " _". La estructura del directorio debe permanecer sin cambios.

Tengo el siguiente script


for /d %D in (*) do (
  for %F in ("%~D\*") do (
    for %P in ("%F\..") do (
      ren "%F" "%~nxP_%~nxF"
    )
  )
)

El problema con el script anterior es que toma el nombre completo de la carpeta.

por lo tanto, intenté extraer solo una parte del nombre del archivo usando la subcadena de sintaxis

 %variable:~num_chars_to_skip,num_chars_to_keep%

Entonces modifiqué el código anterior con él, pero me dio un error :(

for /d %D in (*) do (
      for %F in ("%~D\*") do (
        for %P in ("%F\..") do (
          ren "%F" "%~nxP:~0,10%_%~nxF"
        )
      )
    )

el error es básicamente que la subcadena de sintaxis no funciona, simplemente la imprime como una cadena. algo como esto

SubFolder1xxxx:~0,10%

Respuesta1

Lote de ejemplo que obtiene el nombre de la carpeta del archivo por lotes.

@echo off
set a=%~p0%
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=\" %%a in ("%a%") do call :getlast %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :eof
:getlast
if "%1"=="" goto :eof
if "%2"=="" echo Current folder name is %1.
shift
goto :getlast

Restricciones actuales: no más de 9 niveles de subcarpetas (editar, analizar la holgura si es necesario), sin espacios en los nombres (editar, agregar comillas si es necesario).

información relacionada