Resultados 1 al 2 de 2

Tema: Sumar y no concatenar

  1. #1
    Miembro Avatar de LiMaX

    Fecha de Ingreso
    04 may, 07
    Ubicación
    En mi casa
    Mensajes
    489
    Gracias
    0
    0 Gracias en 0 mensajes

    Predeterminado Sumar y no concatenar

    Hola amig@s forer@s (no quiero discriminar a ning@ forer@ que luego me llaman machist@ )

    Tengo a guan problem con un código en vbs... que seguro que es una tontada y no lo veo... me explico.

    Tengo el siguiente script que me reporta un ficherito con el nombre de la máquina, el usuario, la marca, el modelo, el nº de serie, el procesador, la ram y "el disco duro".

    "El disco duro" está así entrecomillado porque es lo que me falla. Si solamente hay un disco duro o una partición no falla pero, si hay más de una, se agilipolla y en vez de sumarme los valores (si, quiero la capacidad total de almacenamiento) me concatena los valores (me los pone seguidos). Es decir, que en vez de sumarme 20 + 30 y darme 50 me da "2030" (solo que en bytes)

    Aquí va el código para que lo estudiéis y aclaro que la variable es strDISC

    Código:
    Dim objWMI : Set objWMI = GetObject("winmgmts:")
    Dim colSettingsComp : Set colSettings = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
    Dim colSettingsBios : Set colSettingsBios = objWMI.ExecQuery("Select * from Win32_BIOS")
    Dim colSettingsProc : Set colSettingsProc = objWMI.ExecQuery("Select * from Win32_Processor")
    Dim colSettingsDISC : Set colSettingsDISC = objWMI.ExecQuery("Select * from Win32_DiskDrive")
    Dim colSettingsRAM : Set colSettings = objWMI.ExecQuery("Select * from Win32_ComputerSystem")
    Dim objComputer, strModel, strSerial, strProcessor, strRAM, strDISC
    For Each objComputer in colSettings
      strModel = objComputer.Model
    Next
    For Each objComputer in colSettingsBios
      strSerial = objComputer.SerialNumber
    Next
    For Each objComputer in colSettings
      strManu = objComputer.Manufacturer
    Next
    For Each objComputer in colSettingsProc
      strProcessor = objComputer.Name
    Next
    For Each objComputer in colSettingsDISC
      strDISC = strDISC + objComputer.Size 
    Next
    For Each objComputer in colSettings
      strRAM = objComputer.TotalPhysicalMemory
    Next
    Dim objFSO, objFolder, objShell, objTextFile, objFile
    Dim strDirectory, strFile, strText
    Set ejecuta=wscript.createobject("wscript.shell")
    usuario=ejecuta.ExpandEnvironmentStrings("%Username%")
    machine=ejecuta.ExpandEnvironmentStrings("%Computername%")
    strDirectory = "C:\"
    strFile =  machine & "_" & usuario & ".txt"
    strText = ""
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    ' OpenTextFile Method needs a Const value
    ' ForAppending = 8 ForReading = 1, ForWriting = 2
    Const ForAppending = 2
    
    Set objTextFile = objFSO.OpenTextFile _
    (strDirectory & strFile, ForAppending, True)
    
    objTextFile.WriteLine(usuario & "*" & machine & "*" & strManu & "*" & strModel & "*" & strSerial & "*" & strProcessor  & "*" & strRAM  & "*" & strDISC)
    objTextFile.Close
    Gracias de antemano por la ayuda

  2. #2
    Miembro Avatar de LiMaX

    Fecha de Ingreso
    04 may, 07
    Ubicación
    En mi casa
    Mensajes
    489
    Gracias
    0
    0 Gracias en 0 mensajes

    Predeterminado

    Al informarme un poco más cobre la clase de valores que recibo del WMI vi que el valor está en unit16 y el vbs lo entiende como string, así que lo he solucionado con una variable auxiliar que pasa a numérico el valor y otra que los suma

    Código:
    For Each objComputer in colSettingsDISC
      strDISC = objComputer.Size
      aux = CDbl(strDISC)
      intDISC = intDISC + aux
    Next

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •