Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#7351
Scripting / Re: Ayuda con VBS
30 Enero 2014, 01:35 AM
Cita de: PokiPoki en 30 Enero 2014, 00:26 AMerror tonto y muy simple pues seguia usando comillas dobles objcdo.subject = "TextRandom(n)"

Como información adicional quiero explicarte que la comilla doble es un símbolo reservado por el lenguaje para encerrar un String  (lo que resulta obvio :P), entonces cuando quieras insertar comillas dobles en un string debes escapar el caracter, la forma de escaparlo es duplicar el símbolo (2 comillas dobles para encerrar el string y 2 comillas dobles para insertar una comilla doble dentro del string) y concatenar el texto con el operador "&", todo esto se haría así:

Código (vb) [Seleccionar]
objcdo.subject = """" & TextRandom(n) & """"

o bien:

Código (vb) [Seleccionar]
objcdo.subject = """" & "Texto Normal" & """"

O también puedes utilizar la función Chr que devuelve el caracter de un byte (0-255):

Código (vb) [Seleccionar]
objcdo.subject = chr(34) & TextRandom(n) & chr(34)

o bien:

Código (vb) [Seleccionar]
objcdo.subject = chr(34) & "Texto Normal" & chr(34)

Saludos.
#7352
Scripting / Re: Ayuda con VBS
29 Enero 2014, 23:14 PM
Bienvenido al foro.

1. Debes usar las etiquetas de código, porfavor lee las normas.

2. No existe ningún método que se denomine 'reemplace', en todo caso imagino que quieres decir 'replace', pero no entiendo el uso que le quieres dar en este escenario.

3. Para resolver la situación de poder usar una cadena de texto aleatoria como 'asunto', es tan simple como asignar los datos que devuelve el método 'TextRandom' a la propiedad 'Subject' del objeto 'objcdo'.
Código (vb) [Seleccionar]
objcdo.subject = TextRandom(n)

Te sugiero que leas un tutorial básico, no de VBS, sinó de programación orientada a objetos en general, ya que esto es lo más básico de todo ...y supongo que no querrás pasarte la vida necesitando ayuda para resolver cosas básicas :P.

Saludos!
#7353
¿Tanto cuesta buscar los términos de uso de "X" software?:

~> http://www.clamwin.com/content/view/226/52/
~> http://www.gnu.org/licenses/licenses.html#GPL

...Podría responderte con información más util pero estoy cansado de la gente que no lee nada.

Saludos!
#7354
CitarImportError: No module named sip

La descripción del error es clara, no se encuentra el módulo SIP porque no lo has añadido al convertir el script a exe, la solución a ese error lo tienes al final de mi respuesta:
Cita de: elektroquizás símplemente no hayas añadido los módulos necesarios de pyqt4 a tu exe al usar py2exe ~> http://www.py2exe.org/index.cgi/Py2exeAndPyQt

Sobre lo de cx_feeze, bueno, si te molestases en abrir la url y leer las primeras lineas entenderías lo que es y porque te lo pasé:
Cita de: cx_Freeze cx_Freeze is a set of scripts and modules for freezing Python scripts into executables, in much the same way that py2exe and py2app do. Unlike these two tools, cx_Freeze is cross platform and should work on any platform that Python itself works on. It supports Python 2.3 or higher (including Python 3), since it makes use of the zip import facility which was introduced in 2.3.

Saludos!
#7355
Cita de: francoyo1998 en 29 Enero 2014, 04:06 AMMi pregunta es porque no anda despues de convertirlo a EXE

Rapuesta rápida: Porque todos los novatos hemos cometido el mismo error de utilizar (el obsoleto) py2exe, ya que la información en internet y los típicos tutoriales están muy desactualizados.
Solución: http://cx-freeze.sourceforge.net/

Cita de: francoyo1998 en 29 Enero 2014, 04:06 AMcuando lo compile a ".exe" tan solo aparecio el CMD un segundo y desaparecio..

Si ejecutas el exe diréctamente desde la consola evitarás que se abra en una ventana y por ende que se cierre, y así podrás ver el tipo de error del que se trate, ya que en realidad puede ser por varias razones pero básicamente es por estar utilizando un software obsoleto... quizás estés usando python 3.X y py2exe no soporta py 3.X (cosa que no es de extrañar, ya que la última release de py2exe es del 2008 y hay decenas de requests sin respuesta pidiendo soporte para py 3.X), o quizás símplemente no hayas añadido los módulos necesarios de pyqt4 a tu exe al usar py2exe ~> http://www.py2exe.org/index.cgi/Py2exeAndPyQt

Saludos!
#7356
Otra alternativa que se me acaba de ocurrir sin requerir el uso de programas de terceros:



Si le añadiste información de propiedades a tu ensamblado ...quítaselas, en cambio si no le añadiste ninguna ...añádele. Esto producirá un cambio en el tamaño del exe compilado, por lo tanto el hash calculado será distinto.

Saludos
#7357
Segúramente el error sea por las comillas dobles, la comilla doble está reservada y debes escapar el símbolo si lo quieres utilizar dentro de un argumento:
Código (dos) [Seleccionar]
Call :TEXTMAN RL 237 "zabbix_agentd.conf" "UserParameter=specHWShort,cscript.exe /nologo ^"C:\Program Files\Zabbix Agent\specHWShort.vbs^" "

Si te sigue sin funcionar prueba a escapar también el símbolo del "=" por si están afectando al FOR:
Código (DOS) [Seleccionar]
Call :TEXTMAN I 135 "zabbix_agentd.conf" "HostMetadataItem^=system.uname"
Call :TEXTMAN RL 237 "zabbix_agentd.conf" "UserParameter^=specHWShort,cscript.exe /nologo ^"C:\Program Files\Zabbix Agent\specHWShort.vbs^" "


Y si aún así te sigue sin funcionar, deberías utilizar alguna utilidad externa como SED ~> http://gnuwin32.sourceforge.net/packages/sed.htm

PD: Imagino que despues de llamar al método estarás haciendo una pausa en el código como esto:
Call :TEXTMAN ...
Call :TEXTMAN ...
Pause


...De lo contrario, es normal que te de un error.

Saludos!
#7358
Hola, he probado a llamar al método utilizando el parámetro "I" seguido del parámetro "RL" y en mi caso me funcionó, quizás sea un error muy específico :-/.

¿Te sale algún mensaje de error?
¿Puedes describir el mensaje de error?
¿Puedes mostrar el contenido exacto de la linea 237?
También sería buena idea que mostrases el script completo que estás usando para llamar al TextMan.

De todas formas aquí tienes la última versión que hice del script por si estuvieras usando una versión antigua...
Citar@Echo OFF


:: TEXT MANIPULATOR ROUTINE v0.5
:: by Elektro H@cker


REM SYNTAX:
::
:: TEXTMAN [ACTION] [LINE(S)] [FILE] [TEXT]
::
:: * [LINE(S)] parameter is Optional for some actions
:: * [TEXT] parameter is Optional for some actions


REM ACTIONS:
::
::  AB  = ADD_BEGINNING      * Add text to the beginning of a line.
::  AE  = ADD_ENDING         * Add text to the end of a line.
::  E   = ERASE              * Delete a line.
::  I   = INSERT             * Add a empty line (Or a line with text).
::  RL  = REPLACE_LINE       * Replace a entire line.
::  RS  = REPLACE_STRING     * Replace word from line.
::  RSA = REPLACE_STRING_ALL * Replace word from all lines.
::  C+  = CHARACTER_PLUS     * Delete the first "X" characters from all lines.
::  C-  = CHARACTER_LESS     * Delete the last  "X" characters from all lines.
::  L+  = LINE_PLUS          * Cut the first "X" amount of lines.
::  L-  = LINE_LESS          * Cut the last  "X" amount of lines.
::  GL  = GET_LINE           * Delete all except "X" line.
::  GR  = GET_RANGE          * Delete all except "X" range of lines.


REM EXAMPLES:
::
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
::                                                                         ::
:: Delete the line 3                                                       ::
:: Call :TEXTMAN E 3 "Test.txt"                                            ::
::                                                                         ::                                                                        
:: Add a string to the beginning of line 3                                 ::
:: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::                                                                      
:: Add a string to the end of line 3.                                      ::
:: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::                                                                      
:: Add a empty line at line 3.                                             ::
:: Call :TEXTMAN I 3 "Test.txt"                                            ::
::                                                                         ::                                                                      
:: Add a line with a word at line 3.                                       ::
:: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"                           ::
::                                                                         ::    
:: Replace the line 3 with "Elektro H@cker".                               ::
:: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::
:: Replace the words "Elektro" to "H@cker" in line 3.                      ::
:: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"                        ::
::                                                                         ::
:: Replace the words "Elektro" to "H@cker" in all lines.                   ::
:: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"                         ::
::                                                                         ::
:: Delete the first 3 characters in all lines.                             ::
:: Call :TEXTMAN C+ 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the last 3 characters in all lines.                              ::
:: Call :TEXTMAN C- 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the first 3 lines.                                               ::
:: Call :TEXTMAN L+ 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the last 3 lines.                                                ::
:: Call :TEXTMAN L- 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete all except the line number 3.                                    ::
:: Call :TEXTMAN SL 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete all except the 3 to 9 range of lines.                            ::
:: Call :TEXTMAN SR 3 9 "Test.txt"                                         ::
::                                                                         ::
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::


:TEXTMAN
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Invalid parameter & Exit /B 1)) & (GOTO:EOF)
:AB
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (if "%%B" EQU "" ((Echo %~4)>> "%~3.NEW") ELSE ((Echo %~4%%B)>> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:AE
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %%B%~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:E
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B) >> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:I
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF     "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" ((Echo %~4) >> "%~3.NEW") ELSE (Echo+>> "%~3.NEW"))" & (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW"))))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RL
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RS
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (CALL SET "STRING=%%B" &&     (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((CALL ECHO %%STRING:%~4=%~5%%)>> "%~3.NEW")))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RSA
(For /F "tokens=1* delims=]" %%A in ('type "%~2" ^| find /n /v ""') DO (CALL SET "STRING=%%B" && (if "%%B" EQU "" (Echo+>> "%~2.NEW") ELSE ((CALL ECHO %%STRING:%~3=%~4%%)>>"%~2.NEW")))) && (CALL :RENAMER "%~2") & (GOTO:EOF)
:C+
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>      "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:C-
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >>   "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:L+
(Call SET /A "A=%~2") && (Call TYPE "%~3" |@MORE +%%A%% > "%~3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF)
:L-
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%B >> "%~3.NEW"))
:GL
(Call SET /A "A=%~2" && Call SET /A "A-=1") && (Call TYPE "%~3" |@MORE +%%A%% > "%temp%\getline.tmp") && (For /F "tokens=1* delims=]" %%A in ('type "%temp%\getline.tmp" ^| find /n /v ""') DO ((if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)> "%~3.NEW"))) && ((CALL :RENAMER "%~3") & (GOTO:EOF)))
:GR
(For /F "tokens=1* delims=]" %%A in ('type "%~4" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "(IF "%%LINE%%" GEQ "%~2" IF "%%LINE%%" LEQ "%~3" (if "%%B" EQU "" (Echo+>> "%~4.NEW") ELSE ((Echo %%B)>> "%~4.NEW"))) && (IF "%%LINE%%" EQU "%~3" Exit /B 1)" || ((CALL :RENAMER "%~4") & (GOTO:EOF)))))

:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)

Saludos!
#7359
Una versión pulida de mi ayudante para convertir archivos Reg a Bat

Código (vbnet) [Seleccionar]

' ***********************************************************************
' Assembly : Reg2Bat
' Author   : Elektro
' Modified : 01-28-2014
' ***********************************************************************
' <copyright file="Reg2Bat.vb" company="Elektro Studios">
'     Copyright (c) Elektro Studios. All rights reserved.
' </copyright>
' ***********************************************************************

#Region " Usage Examples "

' Dim BatchScript As String = Reg2Bat.Convert("C:\RegistryFile.reg")

' IO.File.WriteAllText("Converted.bat", Reg2Bat.Convert("C:\RegistryFile.reg"), System.Text.Encoding.Default)

#End Region

#Region " Imports "

Imports System.ComponentModel
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions

#End Region

''' <summary>
''' Converts a Registry Script to a Batch Script.
''' </summary>
Public Class Reg2Bat

#Region " ReadOnly Strings "

    ''' <summary>
    ''' Indicates the resulting Batch-Script Header.
    ''' </summary>
    Private Shared ReadOnly BatchHeader As String =
    <a>:: Converted with Reg2Bat by Elektro

@Echo OFF
</a>.Value

    ''' <summary>
    ''' Indicates the resulting Batch-Script Footer.
    ''' </summary>
    Private Shared ReadOnly BatchFooter As String =
    <a>
Pause&amp;Exit</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a Comment-Line command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_Comment As String =
    <a>REM {0}</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Key-Add command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_KeyAdd As String =
    <a>REG ADD "{0}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Key-Delete command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_KeyDelete As String =
    <a>REG DELETE "{0}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG DefaultValue-Add command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_DefaultValueAdd As String =
    <a>REG ADD "{0}" /V "" /D {1} /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Add REG_SZ command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_REGSZ As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_SZ" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch command StringFormat of a REG Value-Add BINARY command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_BINARY As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_BINARY" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Add DWORD command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_DWORD As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_DWORD" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Add QWORD command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_QWORD As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_QWORD" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Add EXPAND_SZ command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_EXPANDSZ As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_EXPAND_SZ" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Add MULTI_SZ command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueAdd_MULTISZ As String =
    <a>REG ADD "{0}" /V "{1}" /T "REG_MULTI_SZ" /D "{2}" /F</a>.Value

    ''' <summary>
    ''' Indicates the Batch syntax StringFormat of a REG Value-Delete command.
    ''' </summary>
    Private Shared ReadOnly BatchStringFormat_ValueDelete As String =
    <a>REG DELETE "{0}" /V "{1}" /F</a>.Value

    ''' <summary>
    ''' Indicates the string to split a BINARY registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_BINARY As String =
    <a>=HEX</a>.Value

    ''' <summary>
    ''' Indicates the string to split a DWORD registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_DWORD As String =
    <a>=DWORD:</a>.Value

    ''' <summary>
    ''' Indicates the string to split a QWORD registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_QWORD As String =
    <a>=HEX\(b\):</a>.Value

    ''' <summary>
    ''' Indicates the string to split a EXPAND_SZ registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_EXPANDSZ As String =
    <a>=HEX\(2\):</a>.Value

    ''' <summary>
    ''' Indicates the string to split a MULTI_SZ registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_MULTISZ As String =
    <a>=HEX\(7\):</a>.Value

    ''' <summary>
    ''' Indicates the string to split a REG_SZ registry line.
    ''' </summary>
    Private Shared ReadOnly RegistryValueSplitter_REGSZ As String =
    <a>"="</a>.Value

#End Region

#Region " Enumerations "

    ''' <summary>
    ''' Indicates the data type of a registry value.
    ''' </summary>
    Public Enum RegistryValueType As Integer

        ''' <summary>
        ''' A null-terminated string.
        ''' This will be either a Unicode or an ANSI string.
        ''' </summary>
        REG_SZ = 0

        ''' <summary>
        ''' Binary data.
        ''' </summary>
        BINARY = 1

        ''' <summary>
        ''' A 32-bit number.
        ''' </summary>
        DWORD = 2

        ''' <summary>
        ''' A 64-bit number.
        ''' </summary>
        QWORD = 3

        ''' <summary>
        ''' A null-terminated string that contains unexpanded references to environment variables
        ''' (for example, "%WinDir%").
        ''' </summary>
        EXPAND_SZ = 4

        ''' <summary>
        ''' A sequence of null-terminated strings, terminated by an empty string (\0).
        '''
        ''' The following is an example:
        ''' String1\0String2\0String3\0LastString\0\0
        ''' The first \0 terminates the first string,
        ''' the second to the last \0 terminates the last string,
        ''' and the final \0 terminates the sequence.
        ''' Note that the final terminator must be factored into the length of the string.
        ''' </summary>
        MULTI_SZ = 5

    End Enum

#End Region

#Region " Public Methods "

    ''' <summary>
    ''' Converts a Registry Script to a Batch Script.
    ''' </summary>
    ''' <param name="RegistryFile">Indicates the registry file to convert.</param>
    ''' <returns>System.String.</returns>
    Public Shared Function Convert(ByVal RegistryFile As String) As String

        ' Split the Registry content.
        Dim RegistryContent As String() =
            String.Join("@@@Reg2Bat@@@", File.ReadAllLines(RegistryFile)).
                   Replace("\@@@Reg2Bat@@@  ", Nothing).
                   Replace("@@@Reg2Bat@@@", Environment.NewLine).
                   Split(Environment.NewLine)

        ' Where the registry line to convert will be stored.
        Dim RegLine As String = String.Empty

        ' Where the registry key to convert will be stored.
        Dim RegKey As String = String.Empty

        ' Where the registry value to convert will be stored.
        Dim RegVal As String = String.Empty

        ' Where the registry data to convert will be stored.
        Dim RegData As String = String.Empty

        ' Where the decoded registry strings will be stored.
        Dim BatchCommands As New StringBuilder

        ' Writes the specified Batch-Script Header.
        BatchCommands.AppendLine(BatchHeader)

        ' Start reading the Registry File.
        For X As Long = 0 To RegistryContent.LongLength - 1

            RegLine = RegistryContent(X).Trim

            Select Case True

                Case RegLine.StartsWith(";"), RegLine.StartsWith("#")  ' It's a comment line.

                    BatchCommands.AppendLine(
                        String.Format(BatchStringFormat_Comment, RegLine.Substring(1, RegLine.Length - 1).Trim))

                Case RegLine.StartsWith("[-") ' It's a key to delete.

                    RegKey = RegLine.Substring(2, RegLine.Length - 3).Trim
                    BatchCommands.AppendLine(String.Format(BatchStringFormat_KeyDelete, RegKey))

                Case RegLine.StartsWith("[") ' It's a key to add.

                    RegKey = RegLine.Substring(1, RegLine.Length - 2).Trim
                    BatchCommands.AppendLine(String.Format(BatchStringFormat_KeyAdd, RegKey))

                Case RegLine.StartsWith("@=") ' It's a default value to add.

                    RegData = RegLine.Split("@=").Last
                    BatchCommands.AppendLine(String.Format(BatchStringFormat_DefaultValueAdd, RegKey, RegData))

                Case RegLine.StartsWith("""") _
                AndAlso RegLine.Split("=").Last = "-" ' It's a value to delete.

                    RegVal = RegLine.Substring(1, RegLine.Length - 4)
                    BatchCommands.AppendLine(String.Format(BatchStringFormat_ValueDelete, RegKey, RegVal))

                Case RegLine.StartsWith("""") ' It's a value to add.

                    Select Case RegLine.Split("=")(1).Split(":").First.ToUpper

                        Case "HEX" ' It's a Binary value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.BINARY))
                            RegData = GetRegistryData(RegLine, RegistryValueType.BINARY)
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_BINARY, RegKey, RegVal, RegData))

                        Case "DWORD" ' It's a DWORD value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.DWORD))
                            RegData = GetRegistryData(RegLine, RegistryValueType.DWORD)
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_DWORD, RegKey, RegVal, RegData))

                        Case "HEX(B)" ' It's a QWORD value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.QWORD))
                            RegData = GetRegistryData(RegLine, RegistryValueType.QWORD)
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_QWORD, RegKey, RegVal, RegData))

                        Case "HEX(2)"  ' It's a EXPAND_SZ value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.EXPAND_SZ))
                            RegData = FormatRegistryString(GetRegistryData(RegLine, RegistryValueType.EXPAND_SZ))
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_EXPANDSZ, RegKey, RegVal, RegData))

                        Case "HEX(7)" ' It's a MULTI_SZ value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.MULTI_SZ))
                            RegData = FormatRegistryString(GetRegistryData(RegLine, RegistryValueType.MULTI_SZ))
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_MULTISZ, RegKey, RegVal, RegData))

                        Case Else ' It's a REG_SZ value.
                            RegVal = FormatRegistryString(GetRegistryValue(RegLine, RegistryValueType.REG_SZ))
                            RegData = FormatRegistryString(GetRegistryData(RegLine, RegistryValueType.REG_SZ))
                            BatchCommands.AppendLine(
                                String.Format(BatchStringFormat_ValueAdd_REGSZ, RegKey, RegVal, RegData))

                    End Select ' RegLine.Split("=")(1).Split(":").First.ToUpper

            End Select ' RegLine.StartsWith("""")

        Next X ' RegLine

        ' Writes the specified Batch-Script Footer.
        BatchCommands.AppendLine(BatchFooter)

        Return BatchCommands.ToString

    End Function

#End Region

#Region " Private Methods "

    ''' <summary>
    ''' Gets the registry value of a registry line.
    ''' </summary>
    ''' <param name="RegistryLine">Indicates the registry line.</param>
    ''' <param name="RegistryValueType">Indicates the type of the registry value.</param>
    ''' <returns>System.String.</returns>
    Private Shared Function GetRegistryValue(ByVal RegistryLine As String,
                                             ByVal RegistryValueType As RegistryValueType) As String

        Dim Value As String = String.Empty

        Select Case RegistryValueType

            Case RegistryValueType.BINARY
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_BINARY,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

            Case RegistryValueType.DWORD
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_DWORD,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

            Case RegistryValueType.QWORD
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_QWORD,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

            Case RegistryValueType.EXPAND_SZ
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_EXPANDSZ,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

            Case RegistryValueType.MULTI_SZ
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_MULTISZ,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

            Case RegistryValueType.REG_SZ
                Value = Regex.Split(RegistryLine,
                                    RegistryValueSplitter_REGSZ,
                                    RegexOptions.IgnoreCase Or RegexOptions.Singleline).First()

        End Select

        If Value.StartsWith("""") Then
            Value = Value.Substring(1, Value.Length - 1)
        End If

        If Value.EndsWith("""") Then
            Value = Value.Substring(0, Value.Length - 1)
        End If

        Return Value

    End Function

    ''' <summary>
    ''' Gets the registry data of a registry line.
    ''' </summary>
    ''' <param name="RegistryLine">Indicates the registry line.</param>
    ''' <param name="RegistryValueType">Indicates the type of the registry value.</param>
    ''' <returns>System.String.</returns>
    Private Shared Function GetRegistryData(ByVal RegistryLine As String,
                                            ByVal RegistryValueType As RegistryValueType) As String

        Dim Data As String = String.Empty

        Select Case RegistryValueType

            Case RegistryValueType.BINARY

                Data = Regex.Split(RegistryLine,
                                   Regex.Split(RegistryLine,
                                               RegistryValueSplitter_BINARY, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                               RegistryValueSplitter_BINARY,
                                   RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                   Last.
                                   Replace(",", Nothing)

            Case RegistryValueType.DWORD

                Data = Regex.Split(RegistryLine,
                                   Regex.Split(RegistryLine,
                                               RegistryValueSplitter_DWORD, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                               RegistryValueSplitter_DWORD,
                                   RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                   Last.
                                   Replace(",", Nothing)

                Data = "0x" & Data

            Case RegistryValueType.QWORD

                RegistryLine =
                    String.Join(Nothing,
                                Regex.Split(RegistryLine,
                                            Regex.Split(RegistryLine,
                                                        RegistryValueSplitter_QWORD, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                                        RegistryValueSplitter_QWORD,
                                            RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                            Last.
                                            Reverse)

                For Each [Byte] As String In RegistryLine.Split(",")
                    Data &= String.Join(Nothing, [Byte].Reverse)
                Next [Byte]

                Data = "0x" & Data

            Case RegistryValueType.EXPAND_SZ

                RegistryLine = Regex.Split(RegistryLine,
                                            Regex.Split(RegistryLine,
                                                        RegistryValueSplitter_EXPANDSZ, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                                        RegistryValueSplitter_EXPANDSZ,
                                            RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                            Last.
                                            Replace(",00", "").
                                            Replace("00,", "")

                For Each [Byte] As String In RegistryLine.Split(",")
                    Data &= Chr(Val("&H" & [Byte]))
                Next [Byte]

                Data = Data.Replace("""", "\""")

            Case RegistryValueType.MULTI_SZ

                RegistryLine = Regex.Split(RegistryLine,
                                            Regex.Split(RegistryLine,
                                                        RegistryValueSplitter_MULTISZ, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                                        RegistryValueSplitter_MULTISZ,
                                            RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                            Last.
                                            Replace(",00,00,00", ",\0").
                                            Replace(",00", "").
                                            Replace("00,", "")

                For Each [Byte] In RegistryLine.Split(",")

                    If [Byte] = "\0" Then
                        Data &= "\0" ' Multiline separator.
                    Else
                        Data &= Chr(Val("&H" & [Byte]))
                    End If

                Next

                Return Data.Replace("""", "\""")

            Case RegistryValueType.REG_SZ

                Data = Regex.Split(RegistryLine,
                                   Regex.Split(RegistryLine,
                                               RegistryValueSplitter_REGSZ, RegexOptions.IgnoreCase Or RegexOptions.Singleline).First &
                                               RegistryValueSplitter_REGSZ,
                                   RegexOptions.IgnoreCase Or RegexOptions.Singleline).
                                   Last

                Data = Data.Substring(0, Data.Length - 1).Replace("\\", "\")

        End Select

        Return Data

    End Function

    ''' <summary>
    ''' Properly formats a registry string to insert it in a Batch command string.
    ''' </summary>
    ''' <param name="RegistryString">Indicates the Reg Batch command string.</param>
    ''' <returns>System.String.</returns>
    Private Shared Function FormatRegistryString(ByVal RegistryString As String) As String

        RegistryString = RegistryString.Replace("%", "%%")
        If Not RegistryString.Contains("""") Then
            Return RegistryString
        End If

        RegistryString = RegistryString.Replace("\""", """")

        Dim strArray() As String = RegistryString.Split("""")

        For X As Long = 1 To strArray.Length - 1 Step 2

            strArray(X) = strArray(X).Replace("^", "^^") ' This replacement need to be THE FIRST.
            strArray(X) = strArray(X).Replace("<", "^<")
            strArray(X) = strArray(X).Replace(">", "^>")
            strArray(X) = strArray(X).Replace("|", "^|")
            strArray(X) = strArray(X).Replace("&", "^&")
            ' strArray(X) = strArray(X).Replace("\", "\\")

        Next X

        Return String.Join("\""", strArray)

    End Function

#End Region

#Region " Hidden methods "

    ' These methods are purposely hidden from Intellisense just to look better without unneeded methods.
    ' NOTE: The methods can be re-enabled at any-time if needed.

    <EditorBrowsable(EditorBrowsableState.Never)>
    Public Shadows Sub Equals()
    End Sub

    <EditorBrowsable(EditorBrowsableState.Never)>
    Public Shadows Sub ReferenceEquals()
    End Sub

#End Region

End Class
#7360
Programación General / Re: JAVA
27 Enero 2014, 23:07 PM
Hola

Debes saber que hay un buscador en el foro que se puede usar para encontrar tutoriales de iniciación, además dispones de una sección entera dedicada a Java, y otra sección de Programación general donde además, por si fuera poco, adentro de ambas secciones existen temas importantes colgados con chinchetas relacionados con lo que andas buscando ...pero es una pena que siempre haya alguien que no lea las normas del foro, ni los temas con chincheta, ni use el buscador del foro, ni busque en Google.       ...como es el caso.

Saludos!