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

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
JoanPedroMoultoBueno
 
gracias, también funciona en seven y es exactamente lo que estaba buscando
rápido y eficaz
JP
0
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
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
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
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
zeep
 
Gracias por tu solución eficaz y elegante.
0
doudou
 
genial tu solución mellah2, me has salvado la vida
0
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
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
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
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
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
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
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
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
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
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
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
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
plaiserman
 
toda simple:

SET dia=%date%
SET hora=%time:~0,5%
echo %dia%
echo %hora%
0
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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