elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta  (Leído 5,638 veces)
ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
[Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« en: 5 Octubre 2012, 19:30 pm »

Hola otra vez  :rolleyes:, en esta ocasion estoy intentado añadir a un archivo un prefijo en su nombre, que coincide con el nombre de la subcarpeta contenedora, y me explico con un ejemplo.

Los archivos en cuestion son del tipo: 7. Español.ass y 7. Japones.ass. Estan contenidos en subdirectorios con esta ruta: D:\DBZ\DBZ1_14\079. Como imaginareis los tres digitos ultimos son los que varian siempre, de manera que intento que quede los archivos renombrados asi: 079 - Español.ass. El renombrado deseo hacerlos sobre una copia de ese archivo.

He iniciado un codigo para comprobar si puedo almacenar en una variable cada prefijo pero no funciona:

Código:
for /R %%i in (*.ass) do (
set nom=%%i
echo %%nom:~15,3%%
)

Si unicamente hago echo de la variable i, sale la ruta de cada archivo de forma correcta. Imagino que tenga que ver con la recursividad pero no se como solucionarlo con este mismo codigo. Imagino que habra otra manera mas correcta pero no me enteraré de lo que estoy haciendo.

De forma teorica el codigo general seria algo asi:

Código:
for /R %%i in (*.ass) do (
set nom="%%i"

set prefix=%nom:~15,3%

set lex=%nom:~22,14%

set nombre=Capitulo %prefix% - %lex%

set ruta=%nom:~0,15%

copy "%%i" "%ruta%%nombre%"

)

No funciona ni a tiros pero estructuralmente esto es lo que deseo hacer.



« Última modificación: 5 Octubre 2012, 19:34 pm por ovichan » En línea

RevangelyonX

Desconectado Desconectado

Mensajes: 245


Ver Perfil WWW
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #1 en: 5 Octubre 2012, 21:12 pm »

Ahora no lo puedo probar aunque diria que el substring no te funciona porque no tienes el set enabled expansion local puesto.
Elektro Hacker supongo que lo confirmará. ;)

Salu2


En línea

Just Linux
OSCP certified
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #2 en: 5 Octubre 2012, 23:20 pm »

Elektro Hacker supongo que lo confirmará. ;)

Exacto xD

Como bien te ha dicho el amigo RevangelionX, no te funciona porque no estás expandiendo la variable para poder usarla en el FOR.

Pero aparte de eso, el parámetro "/R" del for es muy mala idea usarlo en casos como este, el for procesa los archivos ASS de la carpeta (Uno por uno), pero en el momento que uno de esos archivos es "prefijado" el for puede procesar ese nuevo archivo si el nuevo nombre del archivo está entre los que el For todavía no a procesado por el orden alfabético...
si tenemos el archivo "A" y "B", y el archivo "A" es renombrado a "C" antes de procesar el archivo "B" , el For procesará también el archivo "C" porque el FOR aún no ha llegado a esa letra alfabéticamente hablando, no se si me entiendes, asi que se volverá a "re-prefixear" ese archivo.., me ha pasado muchisimas veces en ocasiones parecidas...


Código
  1. @Echo OFF
  2. Setlocal enabledelayedexpansion
  3.  
  4. for /F "Tokens=*" %%i in ('Dir /B /S "*.ass"') do (
  5.  
  6. set "nom=%%i"
  7.  
  8. set prefix=!nom:~15,3!
  9. set lex=!nom:~22,14!
  10. set nombre=Capitulo !prefix! - !lex!
  11. set ruta=!nom:~0,1!
  12.  
  13. copy "%%i" "!ruta!!nombre!"
  14. )
  15. pause&exit

Saludos
« Última modificación: 5 Octubre 2012, 23:23 pm por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #3 en: 6 Octubre 2012, 00:18 am »

Ok, no almacenan en um stack los archivos que debe procesar, lo hace de manera secuencial. Esto lo pillo,, pero no se pq utilizas tokens=*. Y el hecho de usar signos exclamativos tampoco lo entiendo. Lo del for con el dir combinado lo he visto usar para los instaladores independientes de updates de windows, precisamente para listar los archivos a procesar.

Gracias.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #4 en: 6 Octubre 2012, 00:34 am »

no se pq utilizas tokens=*
El for /F por defecto tiene habilitado el delimitador de la cadena, y como ya sabrás, los tokens se delimitan al encontrar un (espacio), como un argumento, pues eso, le indico que no delimite/corte agrupe los tokens en uno solo, porque los nombres de tus "ASS" contienen espacios.

Comprueba lo que obtienes sin definir los tokens...

el hecho de usar signos exclamativos tampoco lo entiendo.
Citar
EnableDelayedExpansion

Delayed Expansion will cause variables to be expanded at execution time rather than at parse time, this option is turned on with the SETLOCAL command.
When delayed expansion is in effect variables may be referenced using !variable_name!
http://ss64.com/nt/delayedexpansion.html
« Última modificación: 6 Octubre 2012, 00:36 am por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #5 en: 6 Octubre 2012, 14:41 pm »

Buenas, ya he comprobado todo pero he tenido que adaptarlo ya que en los 9 primeros dvds, la ruta cambia a D:\DBZ\DBZ1_1\001. Para eso he utilizado un if con este codigo de prueba y devuelve los valores correctos:

Código:
set "nom=H:\DBZ\DBZ1_11\061\7. Japones.ass"

if %nom:~12,2% lss 10 (

echo !nom:~14,3!

set prefix=!nom:~14,3!

echo !nom:~21,14!

set lex=!nom:~21,14!

echo Capitulo !prefix! - !lex!

set ruta=!nom:~0,14!

echo !ruta!

) else (

echo !nom:~15,3!

set prefix=!nom:~15,3!

echo !nom:~22,14!

set lex=!nom:~22,14!

echo Capitulo !prefix! - !lex!

set ruta=!nom:~0,15!

echo !ruta!
)

Al insertarlo en el for, me da un error al crear los archivos, los crea mal y separa los nombre, etc... no se si sera por usar la ñ.

Código:
@echo off
setlocal enabledelayedexpansion
Title Codificacion masiva


for /f "tokens=*" %%i in ('dir /b /s "*.ass"') do (

set "nom=%%i"
set "ruta=D:\DBZ\Subtitulos mod\"
set /a num=!nom:~12,2! 2>nul

if !num! lss 10 (

set prefix=!nom:~14,3!

set lex=!nom:~21,14!

set nombre=Capitulo !prefix! - !lex!
echo !prefix!
echo !lex!

rem copy "%%i" "!ruta!!nombre!"

) else (

set prefix=!nom:~15,3!

set lex=!nom:~22,14!

set nombre=Capitulo !prefix! - !lex!
echo !prefix!
echo !lex!
rem copy "%%i" "!ruta!!nombre!"
)
)
pause&exit

En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #6 en: 6 Octubre 2012, 15:03 pm »

Sinceramente, es imposible saber que variable "coje" mal el rango de caracteres sin que aportes los archivos necesarios con el nombre exacto de las rutas y archivo para poder recrear la situación en otro pc, porque la sintaxis en general está bien.

EDITO: Prueba poniendo:
Código
  1. Echo copy "%%i" "!ruta!!nombre!"
para ver si está todo correcto...

saludos
« Última modificación: 6 Octubre 2012, 15:11 pm por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta
« Respuesta #7 en: 6 Octubre 2012, 17:47 pm »

Fallo mio, se me fue la olla y probando no actualice la ruta devlos archivos. Gracias de nuevo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Advanced Renamer 3.02: El renombrado masivo de archivos nunca fue tan fácil
Noticias
wolfbcn 0 1,772 Último mensaje 5 Abril 2011, 02:17 am
por wolfbcn
tema(batch) de un txt,crear varios txt, renombrado
Scripting
neila 6 4,684 Último mensaje 1 Marzo 2015, 19:49 pm
por Eleкtro
ayuda con renombrado de archivo txt em batch
Scripting
eltioted 1 2,479 Último mensaje 30 Junio 2015, 00:19 am
por Eleкtro
[VBS] Detectar nombre en renombrado masivo
Scripting
ovichan 0 1,714 Último mensaje 28 Julio 2015, 00:04 am
por ovichan
copiado y renombrado de archivos según lista
Scripting
biobit 2 4,824 Último mensaje 9 Septiembre 2018, 13:53 pm
por biobit
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines