Autor
|
Tema: [BATCH] Edición archivo SRT (Leído 13,323 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
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. Eso que comentas no me pasa a mi, Los números no se me cambian de orden, ¿Lo que quieres decir es que se agrega una primera linea en blanco, En el nuevo archivo? (Eso sí) Bueno aparte de eso he encontrado un fallo que se me habia pasado, El problema aparece en las frases que llevan comas, Y es por como se interpretan las comas en el comando Set /A al intentar hacer la operación, Y el string final de las frases con comas no se llega a setear bien, Se setean como "0", Así que te lo hago de otro modo (Este lo he testeado mejor) Y mejoro generalmente el script un poco más: REM El código de páginas para no tener que manipular el string para reemplazar caracteres latinos. Echo Procesando archivo " %%~nx#" FOR /F "tokens=*" %%X in ('Type " %%#"' ) do ( Echo " %%X" | findstr /R ".[ ^0-9]." >NUL || (Echo+ >> " %TEMP%\ %%~nx#.srt" ) Call Echo %%Linea_final%% >> "%TEMP %\%%~nx#.srt" ) Type "%TEMP%\%%~nx#.srt" | MORE +1 > "%%~n#.MOD.%%~x#" Del /Q " %TEMP%\ %%~nx#.srt" ) :Replace set "linea= %linea:. . .=...%" Set "Linea_final= %LINEA%"
Salu2
|
|
« Última modificación: 6 Agosto 2012, 18:48 pm por EleKtro H@cker »
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
Gracias por tus esfuerzos ahora si que no me entero del codigo pero lo estudiare tranquilamente con una cervecita. Los subs me quedan asi: Como ves, elimina el primer numero de linea. Te pongo tu codigo, adaptado a mis necesidades por si la estoy pifiando, pero creo que no. @echo off setlocal enabledelayedexpansion
REM El código de páginas para no tener que manipular el string para reemplazar caracteres latinos. CHCP 1250 >NUL For /R %%# in (*.srt) Do ( Echo Procesando archivo "%%~nx#" FOR /F "tokens=*" %%X in ('Type "%%#"') do ( Echo "%%X"| findstr /R ".[^0-9]." >NUL || (Echo+ >> "%TEMP%\%%~nx#.srt") set "linea=%%X" Call :Replace Call Echo %%Linea_final%% >> "%TEMP%\%%~nx#.srt" ) Type "%TEMP%\%%~nx#.srt" | MORE +1 > "%%~n#.MOD.%%~x#" Del /Q "%TEMP%\%%~nx#.srt" ) Exit Exit :Replace set "linea=%linea:. . .=...%" set "linea=%linea:¿ =¿%" set "linea=%linea:¡ =¡%" set "linea=%linea:Klilyn=Krilin%" set "linea=%linea:Ginew=Ginyu%" set "linea=%linea:>=^>%" set "linea=%linea:)=^)%" Set "Linea_final=%LINEA%" Goto:EOF Gracias
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Los subs me quedan asi:
Como ves, elimina el primer numero de linea.
Eso lo hice a propósito, Porque el script, Cuando encuentra un número identificador, Primero escribe una linea en blanco en el archivo MOD, Y luego escribe ese número, Así que por pura lógica la primera linea del archivo MOD siempre será una linea en blanco, Pero no comprendo porqué en las capturas que has puesto de tu SRT no sucede como debería :S Pero bueno, Simplemente elimina lo que he marcado en rojo en la siguiente linea (Es el comando para comerse la primera linea del archivo MOD) y ya te debería funcionar como tú quieres: Type "%TEMP%\%%~nx#.srt" | MORE +1 > "%%~n#.MOD.%%~x#" Saludos
|
|
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
Sencillamente genial, me va a ser de gran ayuda. Ademas con esto tengo tarea para estudiar, no entiendo ni la mitad jeje. Gracias
|
|
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
Siento el repost pero he encontrado un fallo en la edicón de los subs, te pongo una captura: Al parecer los signos de interrogacion de izquierdas (¿) los cambia a los de derechas (?). Cuando se encuentra signos exclamativos, lo procesa o no. Qué locura!!!
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
he encontrado un fallo en la edicón de los subs los signos de interrogacion de izquierdas (¿) los cambia a los de derechas (?). Cuando se encuentra signos exclamativos, lo procesa o no. Qué locura!!! Hola, El último script que puse funciona perfectamente con todos los caracteres (Si, Procesa los signos que están al revés, Todo). Pero Batch no puede leer (correctamente) Unicode, Debes pasar primero los SRT a UTF-8 o ANSI con aquél VBS por ejemplo, O así: CHCP 1250 Type archivoUNICODE.srt>ArchivoANSI.srt
(Ojo, El código de páginas es necesario para que convierta bien los caracteres latinos...) NOTA: Y para que el script reconozca los caracteres ¡¿áéíóú, etc... de los SRT, Debes guardar tanto los SRT como el BAT en la misma codificación. Osea:
Si usas eso desde un BAT ANSI sobre un SRT UTF-8, O desde un BAT UTF-8 sobre SRT ANSI, va a hacer una catástrofe, Como lo hace con los SRT en unicode. EDITO: Después de testear un poco, Puedo decir que el extraño inconveniente que tenia el script, Que se te comia la primera linea del archivo, Era por probar el bat sobre un archivo SRT en distinta codificación que el Bat. Seguramente el resto de errores de conversión que has sufrido antes con el SRT haya sido por el mismo motivo. Saludos
|
|
« Última modificación: 7 Agosto 2012, 04:03 am por EleKtro H@cker »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Sigo en este comentario, Creo que te toca hacer alguna conversion... 1º - De Unicode a ANSI (Porque de Unicode a UTF-8 no se hacerlo directamente sin aplicaciones, Y sin perder los caracteres especiales) para usar el bat. 2º - De ANSI a lo que quieras: wscript.exe convert.vbs "archivo"
PD: objStream.Charset = AQUÍ EL CHARSET
NOTA: No intentes pasar de ANSI a utf-8 con este vbs porque se corrompen todos los caracteres de nuestro idioma : . Pero puedes pasarlo a Unicode,iso-8859-2, o ascii sin perder nada. Convert.vbsOption Explicit Dim objFSO, strFileIn, strFileOut strFileIn = WScript.Arguments.Item(0) Set objFSO = CreateObject( "Scripting.FileSystemObject" ) strFileOut = objFSO.GetBaseName( strFileIn ) & "_utf8.txt" Set objFSO = Nothing UTF8 strFileIn, strFileOut Function UTF8( myFileIn, myFileOut ) ' UTF8() Version 1.00 ' Written by Rob van der Woude ' http://www.robvanderwoude.com Dim objStream ' Valid Charset values for ADODB.Stream Const CdoBIG5 = "big5" Const CdoEUC_JP = "euc-jp" Const CdoEUC_KR = "euc-kr" Const CdoGB2312 = "gb2312" Const CdoISO_2022_JP = "iso-2022-jp" Const CdoISO_2022_KR = "iso-2022-kr" Const CdoISO_8859_1 = "iso-8859-1" Const CdoISO_8859_2 = "iso-8859-2" Const CdoISO_8859_3 = "iso-8859-3" Const CdoISO_8859_4 = "iso-8859-4" Const CdoISO_8859_5 = "iso-8859-5" Const CdoISO_8859_6 = "iso-8859-6" Const CdoISO_8859_7 = "iso-8859-7" Const CdoISO_8859_8 = "iso-8859-8" Const CdoISO_8859_9 = "iso-8859-9" Const cdoKOI8_R = "koi8-r" Const cdoShift_JIS = "shift-jis" Const CdoUS_ASCII = "us-ascii" Const CdoUTF_7 = "utf-7" Const CdoUTF_8 = "utf-8" ' ADODB.Stream file I/O constants Const adTypeBinary = 1 Const adTypeText = 2 Const adSaveCreateNotExist = 1 Const adSaveCreateOverWrite = 2 On Error Resume Next Set objStream = CreateObject( "ADODB.Stream" ) objStream.Open objStream.Type = adTypeText objStream.Position = 0 objStream.Charset = CdoUTF_8 objStream.LoadFromFile myFileIn objStream.SaveToFile myFileOut, adSaveCreateOverWrite objStream.Close Set objStream = Nothing If Err Then UTF8 = False Else UTF8 = True End If On Error Goto 0 End Function
Saludos.
|
|
« Última modificación: 7 Agosto 2012, 04:22 am por EleKtro H@cker »
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
Lo probare porque esto me va a llevar un rato, pero seguro que funciona. Muxas gracias por tomarte las molestias de ayudarme. Saludos
|
|
|
En línea
|
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Ayer probé de pasar con CHCP + Type un SRT en Unicode a ANSI y no perdiío el charset, Pero con el SRT que has subido no he tenido éxito, Así que mejor descarga esta APP: http://www.gbordier.com/gbtools/stringconverter.htm For /R %%# in (*.srt ) Do (stringconverter.exe " %%#" " %%~n#.ANSI %%~x#" /ANSI ) Echo Procesando archivo " %%~nx#" FOR /F "tokens=*" %%X in ('Type " %%#"' ) do ( Echo " %%X" | findstr /R ".[ ^0-9]." >NUL || (Echo+ >> " %TEMP%\ %%~nx#.srt" ) Call Echo %%Linea_final%% >> "%TEMP %\%%~nx#.srt" ) Type "%TEMP%\%%~nx#.srt" | more +1 > "%%~n#.MOD.%%~x#" Del /Q " %TEMP%\ %%~nx#.srt", " %%~nx#" ) :Replace set "linea= %linea:. . .=...%" set "linea= %linea:Klilyn=Krilin%" set "linea= %linea:Ginew=Ginyu%" Set "Linea_final= %LINEA%"
PD: No uses setlocal enabledelayedexpansion Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Descargar y guardar archivo en BATCH
Scripting
|
Falso Positivo
|
4
|
6,093
|
1 Febrero 2006, 20:58 pm
por Falso Positivo
|
|
|
[BATCH] Comprobar si el parámetro es un archivo
Scripting
|
Scratz
|
2
|
3,860
|
7 Noviembre 2007, 16:56 pm
por nhaalclkiemr
|
|
|
[BATCH] Descargar archivo de ftp
Scripting
|
kraszic
|
2
|
8,663
|
8 Abril 2008, 08:04 am
por morenochico
|
|
|
BLOQUEAR EDICIÓN DE ARCHIVO BAT
Scripting
|
DIBUR
|
3
|
9,618
|
5 Noviembre 2010, 02:02 am
por flony
|
|
|
Edicion de Archivo HEX
Scripting
|
inklude
|
1
|
2,075
|
27 Noviembre 2011, 01:06 am
por leogtz
|
|