Autor
|
Tema: [Batch] Renombrado masivo de archivos ass con prefijo de la subcarpeta (Leído 5,550 veces)
|
ovichan
Desconectado
Mensajes: 81
|
Hola otra vez , 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: 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: 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
|
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
Mensajes: 9.866
|
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... for /F "Tokens=*" %%i in (' Dir /B /S "*.ass"' ) do ( set nombre=Capitulo !prefix! - !lex! copy " %%i" " !ruta!!nombre!" )
Saludos
|
|
« Última modificación: 5 Octubre 2012, 23:23 pm por EleKtro H@cker »
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
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
Mensajes: 9.866
|
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. 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
Mensajes: 81
|
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: 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 ñ. @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
Mensajes: 9.866
|
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:
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
Mensajes: 81
|
Fallo mio, se me fue la olla y probando no actualice la ruta devlos archivos. Gracias de nuevo.
|
|
|
En línea
|
|
|
|
|
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,745
|
5 Abril 2011, 02:17 am
por wolfbcn
|
|
|
tema(batch) de un txt,crear varios txt, renombrado
Scripting
|
neila
|
6
|
4,617
|
1 Marzo 2015, 19:49 pm
por Eleкtro
|
|
|
ayuda con renombrado de archivo txt em batch
Scripting
|
eltioted
|
1
|
2,448
|
30 Junio 2015, 00:19 am
por Eleкtro
|
|
|
[VBS] Detectar nombre en renombrado masivo
Scripting
|
ovichan
|
0
|
1,685
|
28 Julio 2015, 00:04 am
por ovichan
|
|
|
copiado y renombrado de archivos según lista
Scripting
|
biobit
|
2
|
4,637
|
9 Septiembre 2018, 13:53 pm
por biobit
|
|