locked
longitud de variables RRS feed

  • Pregunta

  • En Vista, ¿se puede saber la longitud de una variable de entorno? Llamando a un vb se puede, pero directamente en un bat ¿es posible?

     

    Estoy migrando unos script de unix y necesitaria esa funcion.

     

    Gracias chicos.

     

     

    martes, 9 de octubre de 2007 16:07

Respuestas

  • No tiene la funcion directamente desde el lenguaje de comandos, pero puede hacerse lo que quieras, inclusive otro bat que te lo devuelva pero esto no suele ser optimo.

     

    Si cuentas exactamente el problema de traduccion de script que tienes, vemos que es lo mejor, si construirse ese bar o implementar algo "a pelo" allí.

     

    Un saludo,

    martes, 9 de octubre de 2007 16:15
  • Eso es facil (supongo que no puede contener la varialbe el simbolo ":" -dos puntos-, si lo pudiese contener, usa otro delimitador)

     

    Al comienzo del script, siempre pon esta linea (y al final, un endlocal)

     

    setlocal enabledelayedexpansion

     

    y la rutina sería:

     

    set var=:000000000000000%var%

    for /f "tokens=1,2 delims=:" %%s in ("%var:~,16%") do (set var=%%t%%s&set var=!var:~,15!)

     

    Y a correr...

     

    Un saludo,

    martes, 9 de octubre de 2007 16:43
  • Por cierto, si la linea "for" aparece cortada (depende de la resilucion que tengas en el IE) debe ponerse en una sola linea.

     

    Un saludo,

    martes, 9 de octubre de 2007 16:45
  • Esto te puede servir (el fichero convertido se llama salida.txt).

    De todas formas te recuerdo que en este server hay un grupo especifico de scripting donde esta pregunta sería mas adecuada.

     

    @echo off
    setlocal enabledelayedexpansion
    del salida.txt 2>&1
    set mask=:000000000000000
    for /f "tokens=* delims=" %%i in (fichero.txt) do (
       set dat=
       set a=%%i
       call :tr01 !a:,=.!
       echo !dat1! >>salida.txt
    )
    endlocal
    goto :EOF
     
    :tr01
    if {%1} == {} goto :EOF
    if "%dat%" NEQ "" set dat=%dat%*
    set tmp=%1%mask%
    for /f "tokens=1,2 delims=:" %%s in ("%tmp:~,16%") do (
       set tmp=%%t%%s
       set tmp=!tmp:~,15!
    )
    set dat=%dat%%tmp:.=,%
    shift
    goto :tr01

    martes, 9 de octubre de 2007 19:17
  •  el turco Escribió:

    Además, esto es especifico de Vista ¿no?. Ese script usa las funcionalidades de Vista.

     

    No. Eso es scripting normal y corriente de los sistemas NT. Te funciona perfectamente en NT, W2000, XP y W2003 tambien.

     

    Un saludo,

    martes, 9 de octubre de 2007 19:28

Todas las respuestas

  • No tiene la funcion directamente desde el lenguaje de comandos, pero puede hacerse lo que quieras, inclusive otro bat que te lo devuelva pero esto no suele ser optimo.

     

    Si cuentas exactamente el problema de traduccion de script que tienes, vemos que es lo mejor, si construirse ese bar o implementar algo "a pelo" allí.

     

    Un saludo,

    martes, 9 de octubre de 2007 16:15
  • Gracias por responder.

     

    Imaginate que tengo una variable llamada "var" con contenido menor de 15 caracteres y la quiero dejar con longitud 15 completada con "0" (ceros) a la izquierda. Habia pensado en ir añadiendo ceros a la izquierda hasta que su longitud sea 15.

     

     

     

    martes, 9 de octubre de 2007 16:36
  • Eso es facil (supongo que no puede contener la varialbe el simbolo ":" -dos puntos-, si lo pudiese contener, usa otro delimitador)

     

    Al comienzo del script, siempre pon esta linea (y al final, un endlocal)

     

    setlocal enabledelayedexpansion

     

    y la rutina sería:

     

    set var=:000000000000000%var%

    for /f "tokens=1,2 delims=:" %%s in ("%var:~,16%") do (set var=%%t%%s&set var=!var:~,15!)

     

    Y a correr...

     

    Un saludo,

    martes, 9 de octubre de 2007 16:43
  • Por cierto, si la linea "for" aparece cortada (depende de la resilucion que tengas en el IE) debe ponerse en una sola linea.

     

    Un saludo,

    martes, 9 de octubre de 2007 16:45
  • Muchas gracias. Me ha vuelto loco el entenderlo, pero al final creo que si, y desde luego, funcionar, funciona.

     

    Y ahora casi me da verguenza pedirtelo, pero esto atascado. Eso lo queria porque tengo un script de conevrsion de ficheros en unix que necesito pasar la misma funcionalidad a Vista y no lo consigo. La idea es, tento un fichero de texto plano, por ejemplo fichero.txt con el contenido por registro:

     

    10;123;1400;3,25,15

    21;111234;2,5;10.1,3

     

    Es decirm son numeros separados por punto y como y alguno puede tener decimales. Necesito un fichero de salida en el cual figuren los mismos campos, pero cada uno de ellos de longitud 15 y ajustado por ceros a la izquierda y con delimitador un "*" (asterisco) entre los campos. Es decir, ese fichero de entrada deberia quedarme:

     

    000000000000010*000000000000123*000000000001400*000000000003,25*000000000000015

    ... etc...

     

    ¿me puedes ehcar una mano?... que tengo al jefe subido encima de la chepa y necesito transmitir ese fichero formateado.

     

     

     

    martes, 9 de octubre de 2007 19:11
  • Esto te puede servir (el fichero convertido se llama salida.txt).

    De todas formas te recuerdo que en este server hay un grupo especifico de scripting donde esta pregunta sería mas adecuada.

     

    @echo off
    setlocal enabledelayedexpansion
    del salida.txt 2>&1
    set mask=:000000000000000
    for /f "tokens=* delims=" %%i in (fichero.txt) do (
       set dat=
       set a=%%i
       call :tr01 !a:,=.!
       echo !dat1! >>salida.txt
    )
    endlocal
    goto :EOF
     
    :tr01
    if {%1} == {} goto :EOF
    if "%dat%" NEQ "" set dat=%dat%*
    set tmp=%1%mask%
    for /f "tokens=1,2 delims=:" %%s in ("%tmp:~,16%") do (
       set tmp=%%t%%s
       set tmp=!tmp:~,15!
    )
    set dat=%dat%%tmp:.=,%
    shift
    goto :tr01

    martes, 9 de octubre de 2007 19:17
  •  Jose Manuel Tella Llop Escribió:

    De todas formas te recuerdo que en este server hay un grupo especifico de scripting donde esta pregunta sería mas adecuada.

     

    Si, si, pero no te he visto a tí, y en cambio en mensajes de este grupo he visto que sabes de que hablas. 

    (sin menosrpecias a nadie de los otros grupos)

     

    Además, esto es especifico de Vista ¿no?. Ese script usa las funcionalidades de Vista.

     

    Saludos y muchas gracias.

    martes, 9 de octubre de 2007 19:26
  •  el turco Escribió:

    Además, esto es especifico de Vista ¿no?. Ese script usa las funcionalidades de Vista.

     

    No. Eso es scripting normal y corriente de los sistemas NT. Te funciona perfectamente en NT, W2000, XP y W2003 tambien.

     

    Un saludo,

    martes, 9 de octubre de 2007 19:28
  •  

    martes, 9 de octubre de 2007 19:30