Resultado de comando en variable

zdd43 -  
 plaiserman -
lu'

estoy buscando recuperar el resultado de un comando de DOS en una variable. Para usarlo más tarde.

17 respuestas

  1. SinDromX
     

    Es mucho más simple, funciona perfecto en Windows XP SP2

    set dia=%date:~0,2%
    set mes=%date:~3,2%
    set anio=%date:~6,4%

    Mi variable dia tomará los 2 caracteres a partir del primero
    Mi variable mes tomará los 2 caracteres a partir del tercero
    Mi variable anio tomará los 4 caracteres a partir del sexto

    Lo que corresponde bien a la visualización de mi fecha que me devuelve un resultado como sigue:
    18/07/2007

    Simple y práctico, tal como me gusta.

    PD: Sé que el mensaje inicial data un poco, pero para las personas que todavía buscan, puede ser útil.

    19
    1. JoanPedroMoultoBueno
       
      gracias, también funciona en seven y es exactamente lo que estaba buscando
      rápido y eficaz
      JP
      0
  2. Ch@oS Mensajes publicados 46 Fecha de registro   Estado Miembro 35
     
    @echo off
    if "%1"=="" goto passource
    if not defined date goto pasdate
    rem *****************************************************
    rem La fecha almacenada en %date% contiene el signo "/"
    rem que no podemos usar para renombrar los archivos porque
    rem es un carácter especial de Windows. Por lo tanto, lo reemplazamos
    rem por "_"
    rem *****************************************************
    for /f "tokens=1-3 delims=/" %%a in ("%date%") do set newdate=%%a_%%b_%%c_
    rem Renombramos el archivo...
    ren "%1" "%1_%newdate%.%2"

    Y ahí está...
    9
    1. Christophe
       
      Hola,
      Estoy teniendo un poco de dificultad para renombrar un archivo test.zip a test060303.zip en un archivo por lotes, así que compilando el nombre original y la fecha del día. Si puedes ayudarme con esta parte, te lo agradecería mucho.
      Chris de Mayotte.
      0
    2. jivef Mensajes publicados 1024 Estado Miembro 306
       
      Hola,
      Las soluciones propuestas son bastante chulas.
      Personalmente, utilizo un sistema GNU/Linux, pero lamentablemente, una buena parte de mis clientes está demasiado atrapada en Windows debido a sus aplicaciones.

      Dicho esto, en cuanto a la recuperación de la fecha, en mi opinión, lo mejor es usar un formato de tipo ISO 8601, ya que los archivos nombrados con la fecha en este formato siempre estarán clasificados en orden y serán más fáciles de encontrar.
      Estarán tanto en orden numérico como en orden cronológico, sin esfuerzo.

      A este efecto, he creado un pequeño script en batch que reutilizo cada vez que lo necesito y que me permite crear una variable fecha en el formato indicado.
      A partir de esta variable, que llamo GDH (Grupo Fecha-Hora), puedo escribir en un archivo, renombrar un archivo, crear un directorio, etc.


      Para mayor utilidad, para aquellos que todavía creen que la sintaxis UNIX es muy larga, aquí hay un ejemplo de lo contrario.
      Sintaxis Unix o GNU/Linux

      $ gdh='date +%Y%m%d_%I%M%S' 

      Para verificar el resultado:

      $ echo $gdh 20110518_083849 $ 

      Con UNIX me ha bastado una sola línea...

      Con dos, les dejo mirar el trabajo. Dicho esto, aprecio la solución de sindromix que me parece particularmente elegante y que podría mejorar un poco la mía.


      echo este batch da un grupo fecha hora (GDH) en la forma AAAAMMJJHHMMss (Norma ISO 8601 sin separadores.) echo Año mes día minutos segundos. echo pueden utilizar este batch como un elemento de otro. echo Este bloque puede servir para renombrar un archivo indicando la fecha de la operación. echo ejemplo "respaldo diario" rem bucle for de creación de variable para utilización de un grupo fecha-hora (GDH) for /F "delims=/ tokens=1,2,3" %%1 in ('echo %date%') do set VARDATE=%%3%%2%%1 rem Recuperación fecha en formato ISO 8601:2004 (YYYYMMDD) for /F "delims=: tokens=1,2,3" %%1 in ('echo %time%') do set VARTIME=%%1%%2%%3 for /f %%1 in ('echo %VARTIME%') do SET VARTIME=%%1 rem Recuperación hora en formato HHMMSS rem Creación GDH (Grupo Fecha Hora) SET GDH=%VARDATE%_%VARTIME% echo %GDH% rem creación de un archivo de registro fecha ISO8601 echo %GDH% > %GDH%.log rem fin timestamp echo utilizar la variable GDH para renombrar un archivo. Echo creación del archivo sauve.log echo . sauve.log > sauve.log ejemplo siguiente renombrar ren sauve.log %GDH%.log rem no duden en poner el archivo o la carpeta a renombrar en una variable, es más limpio. 
      Ejemplo de archivo renombrado con esta función:
      20110510_170514.log
      (archivo sauve.log renombrado).
      También podemos escribir en un archivo para tener la fecha en el momento preciso en el que ocurrió un evento en el sistema.



      Atentamente.
      Jonas V.F.
      0
  3. Mellah2 Mensajes publicados 2 Estado Miembro 3
     
    Hola,

    A continuación, encuentra otro ejemplo.

    archivo: test.bat

    for /F "tokens=1,2,3,4 delims=/ " %%d in ('date /T') do ( set Dia=%%d%%e%%f)
    rename test.zip test%Dia%.zip

    Herve
    3
    1. zeep
       
      Gracias por tu solución eficaz y elegante.
      0
    2. doudou
       
      genial tu solución mellah2, me has salvado la vida
      0
  4. jivef Mensajes publicados 1024 Estado Miembro 306
     
    Hola,
    Bajo Windows o MS-DOS, la sintaxis es bastante compleja:

    En mi ejemplo, coloco mi dirección IP pública en la variable y utilizo wget que he descargado.

    Dentro de un batch escribirás
    for /f %%1 in ('wget -qO- icanhazip.com') do set PUBLICIP=%%~n1
    echo %PUBLICIP%

    En la línea de comando directa, escribirás:
    for /f %1 in ('wget -qO- icanhazip.com') do set PUBLICIP=%~n1
    echo %PUBLICIP%

    Microsoft es torcido, ni siquiera son capaces de hacer la misma sintaxis en línea y en batch...

    Si quieres poner el contenido de un archivo, escribirás:
    for /f %1 in ('type monfichier.txt') do set MONFIC=%~n1
    echo %MONFIC%

    atención, el archivo solo debe contener una línea, de lo contrario, no funcionará.

    Atentamente.
    Jonas V. F.
    --

    Una idea recibida es a menudo una idea muerta.
    3
    1. neo_selen Mensajes publicados 237 Estado Miembro 15
       
      lamentablemente, quería escribir un script para cambiar los nombres de un montón de archivos con nombres realmente extraños (el caché de imágenes de los contactos de msn) sin extensión que a veces terminan en = o en ? y nunca con una .extensión.
      0
    2. jivef Mensajes publicados 1024 Estado Miembro 306
       
      Extraño, el "=" normalmente está prohibido en DOS.
      En mi opinión, deberías listar tus archivos a través de la ventana de comandos de DOS, y no a través de la interfaz gráfica.
      Haz la lista de tus archivos y redirige la salida a otro archivo.

      c:\> dir > %temp%\ficlist.txt
      Luego, para encontrar tu archivo, ve a:
      abre %temp%\ficlist.txt
      0
    3. neo_selen Mensajes publicados 237 Estado Miembro 15
       
      ah, sé que bajo DOS es imposible
      minecraft nombra bien su directorio en %appdata%:
      .minecraft
      y, sin embargo, el juego funciona perfectamente...
      DOS impide eso porque no hay ninguna sintaxis existente para desespecificar un carácter...
      0
    4. neo_selen Mensajes publicados 237 Estado Miembro 15
       
      en otros lenguajes, PHP, Javascript, existe.
      pero por ejemplo, en VBScript, ¡nada! que cero.
      gracias por el consejo :)
      0
    5. jivef Mensajes publicados 1024 Estado Miembro 306
       
      El . al principio del archivo no está prohibido por DOS.
      Lo que está prohibido es el signo =.

      Observa que, en mi opinión, el sistema más permisivo sigue siendo UNIX en todas sus variantes. Solo con UNIX se puede llamar a un archivo "*". De hecho, a veces esto ocurre accidentalmente.
      0
  5. sam3000 Mensajes publicados 1226 Estado Miembro 144
     
    Hola, aquí tienes una solución que funciona solo con "DATE", para otro comando, tendrías que encontrar el "truco" correspondiente.

    Necesitamos dos archivos, el nombre del primero "la.bat" es obligatorio, no debes cambiarlo, el segundo puedes nombrarlo como quieras:

    ---LA.BAT
     @echo off :repetir if "%1"=="" goto fin set vdt=%1 shift goto repetir :fin 


    ---VARAB.BAT
     @echo off echo. >f1.tmp echo @echo off >f1.bat echo @echo off >entrez.bat date <f1.tmp>>f1.bat call f1.bat del f1.tmp del f1.bat del entrez.bat echo %vdt% </f1.tmp>


    El resultado (fecha) está en la variable %vdt%
    Si no entiendes el truco utilizado, haz preguntas.
    Sobre esto, @*
    --
    El error es humano, pero un verdadero desastre
    solo puede ser informático.
    2
  6. SinDromX
     
    Hola,
    No se puede elegir el formato de la fecha que se devolverá en Windows.

    Pero siempre puedes hacer un pequeño archivo .bat que contenga las instrucciones que he indicado:

    set día=%date:~0,2%
    set mes=%date:~3,2%
    set año=%date:~6,4%
    echo %año%/%mes%/%día%

    Sin embargo, hice una prueba y me doy cuenta de que hay un espacio entre el año y la primera barra ( / )... :-(
    2
    1. yopyop
       
      slu
      Puedes recrear una nueva variable intermedia para el año y dividirla dentro y eso funciona
      set nannee=%annee:~0,4%
      echo %nannee%/%mes%/%día%
      0
    2. jivef Mensajes publicados 1024 Estado Miembro 306
       
      Hola,
      Bien visto, aún más simple y sin necesidad de un bucle for.



      (estoy más acostumbrado a la sintaxis de Unix que encuentro más rica...)
      En Linux incluso tenemos una opción para tener el formato 8601 de inmediato...

      tux:/home/jivef # date --iso-8601
      2012-01-16

      Y para crear la carpeta con este nombre:
      tux:/home/jivef # mkdir 'date --iso-8601'

      Verifiquemos:
      tux:/home/jivef # ls -ld 2012*
      drwxr-xr-x 2 root root 4096 2012-01-16 18:30 2012-01-16

      Ahí está el trabajo.
      Con bash en GNU/Linux: 1 sola línea, con DOS una multitud.

      Hasta luego.
      Jonas.
      0
  7. zdd43
     
    ¡Por favor!
    ¿Nadie conoce el DOS o qué?
    Puedo crear una variable,
    poner texto u otra cosa,
    pero el comando date que devuelve texto
    del tipo "mié. 01/06/05"
    no logro recuperarlo en mi variable
    ni siquiera con algo como:

    date /t > variable

    ¡pero no funciona!

    ¿Alguien tendría una idea?

    Gracias de antemano.
    1
    1. jivef Mensajes publicados 1024 Estado Miembro 306
       
      Hola,
      Gracias a una opción del comando set, puedes poner el contenido de un archivo en una variable:
      Para la fecha, aquí tienes el procedimiento.
      C:\temp>date /t > date.txt

      C:\temp>set /p date=< date.txt

      C:\temp>echo %date%
      22/06/2011

      Un poco rebuscado, pero es de M$.
      0
    2. plaiserman
       
      toda simple:

      SET dia=%date%
      SET hora=%time:~0,5%
      echo %dia%
      echo %hora%
      0
  8. sam3000 Mensajes publicados 1226 Estado Miembro 144
     
    Hola,
    No es tan simple usar DOS
    si fuera Linux (o otro *nix) sería muy factible!
    De hecho, la cuestión es buscar cómo crear un segundo Batch que contenga el valor y la variable en la misma línea y luego ejecutarlo
    estoy buscando una solución y te respondo.
    --
    El error es humano, pero un verdadero desastre
    sólo puede ser informático.
    1
    1. zdd43
       
      ¡Hola!

      ¡Te agradezco enormemente por la atención que me prestas!
      Voy a intentar tu idea de inmediato, que parece genial.
      Te mantendré informado.
      0
    2. zdd43
       
      He avanzado un poco, pero el problema ahora es el formato
      de la fecha... No lo había pensado, pero la fecha siendo en forma:
      dd/mm/aa, eso no me crea un directorio (como quiero)
      sino una estructura completa.

      Estoy atascado...
      0
  9. zdd43
     
    ^^ dsl pero no entiendo todo...
    y no sé qué he hecho pero al ejecutar uno u otro script
    no parece funcionar. Soy un poco torpe.
    En todo caso, gracias por el tiempo que pasas en mis problemas.
    Pero como he dicho más arriba, el formato de la fecha me plantea
    problemas para crear un directorio posteriormente que tome como nombre
    la fecha. Esto me crea una estructura.
    Parece ser un callejón sin salida!!
    1
  10. sam3000 Mensajes publicados 1226 Estado Miembro 144
     
    tu problema es el "/" separador en la fecha
    deberás cambiar tus parámetros de visualización de la fecha
    si estás en Windows XP, vas a:

    +panel de control
    ++opciones regionales y lingüísticas
    +++Botón [Personalizar] (en la pestaña "opciones regionales" en la zona "Estándares y formatos")
    ++++Pestaña "Fecha"
    en el "separador de fecha", eliges el "-" (signo menos)
    en el formato de fecha corta eliges "aaaa-mm-dd"

    validas los cambios y ¡listo! bajo DOS tienes las fechas en el formato "2005-06-02" es válido para crear una carpeta

    de lo contrario, en mis programas, hay que poner los dos archivos en una misma carpeta, y ejecutar el programa "VARAB.BAT" y poner todo el tratamiento sobre la fecha en lugar de "echo %vdt%"

    dicho esto, @*

    --
    El error es humano pero un verdadero desastre
    no puede ser más que informático.
    1
  11. zdd43
     
    ^^ ¡Ayer funcionó!!!!
    ¡Pude crear mi directorio, es genial!
    Te agradezco enormemente.
    Para información, estaba en Win NT4, pero no podías saberlo.
    Así que modifiqué la base de registro
    en el separador.
    HKEY_CURRENT_USER\Control Panel\International\sDate:
    y reemplacé "/" por "-"

    ^^ gracias de nuevo
    1
  12. sam3000 Mensajes publicados 1226 Estado Miembro 144
     
    De nada,
    si tienes más preguntas, no dudes en hacerlo.
    Con esto, @*
    --
    El error es humano, pero un verdadero desastre
    solo puede ser informático.
    1
  13. Med
     
    Hola,
    ¿hay un comando para gestionar el formato de la fecha? Por ejemplo, si la fecha mostrada por defecto es 15/10/2007, ¿qué línea de comando me permite cambiar el formato de la fecha de tal manera que el comando date /t me devuelva 2007/10/15?
    gracias por sus respuestas.

    Med
    1
    1. jivef Mensajes publicados 1024 Estado Miembro 306
       
      Hola,
      El inconveniente es que con MS-DOS, no tienes una opción en la visualización de la fecha que te permita elegir tu formato de presentación.
      Con sistemas como GNU/Linux tienes un montón y a veces demasiados.


      Para poner tu fecha en el formato ISO-8601 (Año-Mes-Día) necesitas usar un bucle "for".


      for /F "delims=/ tokens=1,2,3" %i in ('date /t') do set vardate=%3-%2-%1
      echo %vardate%

      ¡Atención! Microsoft es complicado... En un batch la sintaxis será ligeramente diferente:
      for /F "delims=/ tokens=1,2,3" %%i in ('date /t') do set vardate=%%3-%%2-%%1
      echo %vardate%
      0
  14. Ocean06
     
    Hola,
    he estado buscando desde esta mañana a las 8:00 una forma de renombrar un archivo con SU fecha, no con la fecha del sistema, del día u otra...

    El problema es poder recuperar la fecha de un archivo en una variable para luego renombrar el archivo en cuestión.

    ¿Alguien podría ayudarme?
    1
  15. Date/
     
    Hola,

    ¿y ahora cómo hacer para cambiar el formato de fecha en / bajo Vista?
    No hay la opción "separador de fecha" en Fecha, Personalizar opciones regionales.

    Gracias
    1
  16. Shatiyn
     
    Hola,
    Utilizo regularmente estas líneas para recuperar en variables individuales el día, mes, año, hora, minuto, segundo y centésima.
    Si esto puede ayudarles.

    for /f "tokens=6-8 delims=:/ " %%a in ('"echo. ^|date|find /i "es""') do set dia1=%%a&set mes1=%%b& set anio1=%%c
    for /f "tokens=4-7 delims=:, " %%a in ('"echo. ^|time|find /i "es""') do set hora1=%%a&set minuto1=%%b& set segundo1=%%c& set centesima1=%%d

    echo Inicio de procesamiento = %hora1%:%minuto1%:%segundo1%,%centesima1%


    Ustedes pueden poner los separadores deseados.
    1
  17. neo_selen Mensajes publicados 237 Estado Miembro 15
     
    et para la opción delims, tengo un gran problema: los archivos tienen nombres tan extraños que terminan con un = todos. ¿cómo renombrar completamente estos archivos a toto.jpg en lugar de: (c es un ejemplo de lo que tengo)

    CWKlKODMVbRMwdc1yYpgQN4+sAA=
    EB2FBs99ImnfjbZoGMpFVYJyvjIo=

    y he encontrado todo lo que necesito para renombrar archivos en .ext o algo así, pero no para este caso que es bastante difícil. ¿se puede reemplazar por un %ext%
    y declarar que :
    set ext = "=" ?
    o algún otro truco en ese sentido?
    1
    1. neo_selen Mensajes publicados 237 Estado Miembro 15
       
      estoy creando un batch que permite copiar la caché de un software que tiene imágenes cuyos nombres son bastante curiosos pero, que renombrados a .jpg ofrecen una perfecta visibilidad sobre la imagen. la única limitación de este batch: la mencionada. ¡la longitud de los nombres parece ser variable!
      0
    2. karirovax Mensajes publicados 3584 Estado Miembro 215
       
      hola

      primero hay que conocer la ubicación de los archivos, luego usa los siguientes comandos:

      attrib -s -h -r -a "ruta de los archivos" /s /d
      ren "ruta de los archivos\*.xxx" "ruta de los archivos\*.jpg"
      0
    3. neo_selen Mensajes publicados 237 Estado Miembro 15
       
      ¡Hola de nuevo! (mi primer resurgimiento de tema)
      Bueno, aún no he encontrado, mientras tanto he scriptado otras cosas :) pero lamentablemente, en los nombres de archivos que mencioné, tus métodos no pueden ser válidos, y por una razón:
      no hay extensión. Has puesto .xxx, pero no hay un punto donde pueda indicarle el "token delims", más que el igual...
      La única forma es combinar mis conocimientos rudimentarios de batch y vbscript:
      de hecho, el vbscript puede lanzar comandos como el batch, e incluso se pueden integrar comandos batch en el vbscript. (exclusivo de Windows, ambos.)
      Así que, ¿por qué no crear una variable de texto en la que leo el nombre del archivo, y luego reemplazo el nombre por otro, contado por un bucle for?
      Bueno, voy a probar y te regreso, hago muchos scripts para aprender pero no es solo eso (no voy a dejar que se enfríe el cigarrillo xD)
      0
    4. librequetucrois
       
      Hola

      La extensión de las imágenes se encuentra al principio del archivo; legible con el Bloc de notas.

      Si logras leer el inicio del archivo (comando 'type' redirigido), puede ser útil.

      Este tipo de nombre es el de los archivos de imágenes para Windows Live Messenger.

      La extensión es ".dt2" ... ; archivos vinculados a archivos ".id2" ; imágenes de perfil de usuario :

      C:\Users\%USERNAME%\AppData\Local\Microsoft\Messenger\x@x.x\ObjectStore\UserTile

      Verifica las imágenes con un hash de archivos; parecen idénticas pero en realidad no lo son.

      Las imágenes son ".jfif" o ".png" dependiendo de la versión de messenger, reciente o no (...).

      Verifica la profundidad de color ... 24 => 32 ; las imágenes están normalizadas.

      Modelo para el nombre de tus imágenes personales o no (las que quieras guardar) :

      AvatarNOMNOM32BitsCRC32=12345678date20120117-XXhXXmXX.png

      Máximo 6 letras para el nombre; el nombre visible al pasar el mouse en WLM 2011 será :

      "AvatarNOMNOM32BitsCRC32=12345678date2012" o simplemente "?"

      Buscaba información para saber cómo pasar una variable para reducir comandos y así poder incluir más cosas; lanzando los comandos directamente. (( Variable set con cmd k no funciona | CómoFunciona:
      http://www.commentcamarche.net/forum/affich-24169826-variable-set-avec-cmd-k-ne-fonctionne-pas )) ; gracias por anticipado en caso de que.
      0
    5. librequetucrois
       
      slt re

      fechaHoraTestBucleFor.bat

      1,19 Ko (1 226 bytes)

      CRC32: 8FED040E
      MD5: 8C3482BC997E14865989478CF3D8E1A3
      SHA-1: 21BABB0E153B7C4C948383C80673DA920FD731E7
      SHA-256: 75207654EF29F3DA93EBD64BDF20C7076FA48AD3798D7409FA80F0E4D9033A77

      @echo off setlocal :tettast cls echo prueba fecha hora bucle = añadir 0 para 'am' tiempo y formatear fecha y hora set mimi= echo. echo --------- echo %date% echo --------- echo %time% echo --------- echo. for /F "tokens=1,2,3,4,5,6 delims=/^:, " %%i in ("%date%%time%") do set mimi=%%k%%i%%j-%%lh%%mm%%n rem EQU - igual a rem NEQ - diferente de rem LSS - menor que rem LEQ - menor o igual que rem GTR - mayor que rem GEQ - mayor o igual que echo Mostrar = 2 horas o 12 horas ... set mimitest24hoursam=%mimi:~0,8%-2h%time:~3,2%m%time:~6,2% echo %mimitest24hoursam% set mimitest24hourspm=%mimi:~0,8%-12h%time:~3,2%m%time:~6,2% echo %mimitest24hourspm% echo. echo Horas dinámicas y formatear fecha y hora ... if not %%l geq 10 goto notime10to24hours echo varfilename%mimi:~0,9%%mimi:~9,17%-CRC32=varcrc32file.varextfile = time10to24hours (pm) echo. :notime10to24hours if not %%l leq 9 goto notime0to9hours echo varfilename%mimi:~0,9%0%mimi:~9,17%-CRC32=varcrc32file.varextfile = time0to9hours (am) echo. :notime0to9hours rem echo %mimi:~0,9% rem echo Z%mimi:~10,17% echo. echo Ctrl + c para salir del bucle echo. timeout /t 5 goto tettast :eof endlocal exit /B


      a ustedes leer
      0