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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Edición archivo SRT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Edición archivo SRT  (Leído 13,322 veces)
ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
[BATCH] Edición archivo SRT
« en: 3 Agosto 2012, 20:17 pm »

Hola de nuevo, el caso es que necesito editar 291 archivos del tipo srt, que en base es practicamente es lo mismo que un txt, con extension diferente.

Bueno he leido este hilo para poder hacer sustitucion de palabras http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html. Sin embargo este codigo me da error y no me funciona:

Intento cambiar en el texto los puntos suspensivo con espacios por puntos suspensivos sin espacios.
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=" %%x in ('type C:\Users\Isra\Desktop\Cap 01 B.srt') do (
  4. set linea=%%x
  5. set linea=!linea:. . .=...!
  6. call :show !linea!
  7. )
  8. goto:eof
  9. :show
  10. echo %* >> "C:\Users\Isra\Desktop\Cap 01 B mod.srt"
  11. goto:eof

Alguna idea de que está pasando??



Elektro H@cker: No tienes que usar el botón "insertar cita" sinó el de "insertar código".


« Última modificación: 3 Agosto 2012, 21:02 pm por EleKtro H@cker » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BATCH] Edición archivo SRT
« Respuesta #1 en: 3 Agosto 2012, 20:52 pm »

Cuando estés trabajando con archivos que tengan espacios en su nombre, es preferible agregar comillas dobles, así:
Código:
for /f "tokens=* delims=" %%x in ('type "C:\Users\Isra\Desktop\Cap 01 B.srt"') do (

Prueba si así te funciona.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #2 en: 3 Agosto 2012, 21:17 pm »

Hola,

Desde luego el fallo en el code salta a la vista y con la corrección del compañero Leo es suficiente.

Pero aparte, Los archivos de subtitulos suelen contener caracteres especiales como el signo de exclamación, El cual lo "destruyes" por completo al habilitar la expansión, Y otros archivos caracteres que debes escapar (>) y/o reemplazar (¡¿ áéíóú ÁÉÍÓÚ ñ).

Ejemplo:
Juego de tronos.srt
Código:
00:24:44,884 --> 00:24:46,927 
Los hombres cordero
son buenos esclavos!

Así que yo lo dejaría (como mínimo) así, Y ya tu haces los siguientes reemplazamientos necesarios de los caracteres:
Código
  1. @echo off
  2. for /f "tokens=*" %%X in ('type "%userprofile%\Desktop\Cap 01 B.srt"') do (
  3. set "linea=%%X"
  4. Call :Replace
  5. Call Echo %%Linea_final%% >> "%userprofile%\Desktop\Cap 01 B mod.srt"
  6. )
  7.  
  8. :Replace
  9. set "linea=%linea:. . .=...%"
  10. set "linea=%linea:>=^>%"
  11. set "linea=%linea:)=^)%"
  12. Set "Linea_final=%LINEA%"
  13. Goto:EOF

Saludos.
« Última modificación: 4 Agosto 2012, 08:41 am por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #3 en: 3 Agosto 2012, 23:20 pm »

Gracias, lo voy a probar y os cuento, desconocía que pudiera insertar doble comilla dentro de otras comillas, no tengo tanto nivel ^^'.

Con respecto a lo del codigo en vez de quote, me ha kedao claro  :silbar:. No volverá a pasar.

En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #4 en: 4 Agosto 2012, 15:42 pm »

@Leo Gutiérrez

Está probado y asi realiza su función aunque como dice EleKtro H@cker, se come ciertos caracteres

@EleKtro H@cker

El código que has puesto funciona pero se come el espacio antes de los numeros de la línea por lo que al editar el srt resultante en aegisub, me inserta todos los subtitulos en una sola linea.

Por cierto, mis srt están codificados en Unicode, podría automatizar el cambio a UTF-8??

Gracias de nuevo.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #5 en: 4 Agosto 2012, 17:15 pm »

El código que has puesto funciona pero se come el espacio antes de los numeros de la línea
El problema es que "For" no procesa las lineas en blanco de un archivo, Pero bueno por suerte, Como son solo números, Con esto queda arreglado:

Código
  1. @echo off
  2. for /f "tokens=*" %%X in ('type "%userprofile%\Desktop\1.srt"') do (
  3. set /A "linea=%%X" 2>NUL && Echo+ >>"%userprofile%\Desktop\Cap 01 B mod.srt"|| (set "linea=%%X")
  4. Call :Replace
  5. Call Echo %%Linea_final%% >> "%userprofile%\Desktop\Cap 01 B mod.srt"
  6. )
  7.  
  8.  
  9. :Replace
  10. set "linea=%linea:. . .=...%"
  11. set "linea=%linea:>=^>%"
  12. set "linea=%linea:)=^)%"
  13. Set "Linea_final=%LINEA%"
  14. Goto:EOF



mis srt están codificados en Unicode, podría automatizar el cambio a UTF-8??
No.
Aunque puedes usar el comando type:
Código
  1. Type archivo.srt > archivoNUEVO.srt
El cual automáticamente codifica en formato ANSI, Pero para convertirlo a UTF-8 no hay manera de hacerlo en Batch.
EDITO: Bueno en realidad, Batch por defecto guarda todo lo redireccionado en codificación ANSI...

¿Porque quieres que estén en formato utf-8? (UTF También es Unicode)

Bueno, Necesitas usar alguna herramienta de terceros por linea de comandos (Alguna hay, pero no recuerdo el nombre).
O adaptar este VBS para llamarlo desde Batch usando argumentos:

Cita de: GOOGLE
Código
  1. Option Explicit
  2.  
  3. Sub Save2File (sText, sFile)
  4.    Dim oStream
  5.    Set oStream = CreateObject("ADODB.Stream")
  6.    With oStream
  7.        .Open
  8.        .CharSet = "utf-8"
  9.        .WriteText sText
  10.        .SaveToFile sFile, 2
  11.    End With
  12.    Set oStream = Nothing
  13. End Sub
  14.  
  15. ' Example usage: '
  16. Save2File "The data I want in utf-8", "test.txt"

Salu2
« Última modificación: 4 Agosto 2012, 17:19 pm por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #6 en: 4 Agosto 2012, 17:38 pm »

Vamos a probar, aunque no entiendo muy bien la linea

Código:
set /A "linea=%%X" 2>NUL && Echo+ >>"%userprofile%\Desktop\Cap 01 B mod.srt"|| (set "linea=%%X")

Estableces como variable aritmetica LINEA, pero 2>NUL no se que es ( en C sería 2 mayor que vacio). Lo siguiente seria insertarle la linea con el echo, redireccionar al archivo srt, pero la parte "|| (set "linea=%%X")"; tampoco le pillo.

En cuanto a codificacion del archivo es por aegisub pues al abrirlo me arroja el error: "Parsing Srt: Incomplete file". Si lo paso a UTF8 con notepad no hay problema al abrirlo.

Gracias
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #7 en: 4 Agosto 2012, 18:27 pm »

no entiendo muy bien la linea
Código:
set /A "linea=%%X" 2>NUL && Echo+ >>"%userprofile%\Desktop\Cap 01 B mod.srt"|| (set "linea=%%X")
Estableces como variable aritmetica LINEA, pero 2>NUL no se que es ( en C sería 2 mayor que vacio). Lo siguiente seria insertarle la linea con el echo, redireccionar al archivo srt, pero la parte "|| (set "linea=%%X")"; tampoco le pillo.


Exacto, Establezco la variable, Si el string no es númerico entonces el comando SET manda un código de error, Con "2>NUL" redireccionamos la salida del mensaje de error simplemente para que no aparezca en la consola y no moleste.

El "||" es el operador lógico de excepción (Lo que en C equivaldria a throw o catch, creo, No se "C"), Es decir, Que si el comando SET manda un código de error pues se procesa lo que está a la derecha  de las pipes, Y si no manda código de error, Se procesa solamente lo que está a la derecha del operador "&&".

Salu2
 
En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #8 en: 4 Agosto 2012, 21:39 pm »

En C es try...catch. Mas o menos lo he pillado, es como los asserts. Bueno luego lo pruebo que estoy de bbk. Gracias
En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Edición archivo SRT
« Respuesta #9 en: 6 Agosto 2012, 02:20 am »

Todo bien excepto que el primer numero de linea, lo cambia de 1 a 0. Siendo el primer numero de linea el 0 y el siguiente que le sigue es el 2.

Edito: creo que debe interpretar el 1 como operando logico y lo transforma, o algo raro.
« Última modificación: 6 Agosto 2012, 14:03 pm por ovichan » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descargar y guardar archivo en BATCH
Scripting
Falso Positivo 4 6,093 Último mensaje 1 Febrero 2006, 20:58 pm
por Falso Positivo
[BATCH] Comprobar si el parámetro es un archivo
Scripting
Scratz 2 3,860 Último mensaje 7 Noviembre 2007, 16:56 pm
por nhaalclkiemr
[BATCH] Descargar archivo de ftp
Scripting
kraszic 2 8,663 Último mensaje 8 Abril 2008, 08:04 am
por morenochico
BLOQUEAR EDICIÓN DE ARCHIVO BAT
Scripting
DIBUR 3 9,618 Último mensaje 5 Noviembre 2010, 02:02 am
por flony
Edicion de Archivo HEX
Scripting
inklude 1 2,075 Último mensaje 27 Noviembre 2011, 01:06 am
por leogtz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines