Cómo establecer en una variable el resultado de una expresión

Cómo establecer en una variable el resultado de una expresión

Necesito extraer la fecha de un archivo y luego usar esta cadena como parte del nombre de un archivo nuevo. Intenté resolver esto usando los siguientes comandos:

Primero obtengo los detalles del archivo y redirijo el resultado a un archivo temporal.

DIR c:/myfolder/thefile.txt >> tmp.txt

Luego uso FINDSTR para obtener la línea que contiene la fecha, si existe una manera de obtener solo la fecha que no encontré:

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

La salida es:

10/04/2012 07:55 66,029 thefile.txt

Ahora quiero establecer este resultado en una variable:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

Parece que funcionó, porque cuando pongo %vartmp% devuelve el resultado:

10/04/2012 07:55 66,029 thefile.txt

Pero cuando intento extraer una parte de vartmp, comienzan los problemas:

ECHO %vartmp:~0,2%

Me devuelve la cadena "FI" cuando esperaba "10", parece que vartmp está guardando la expresión y no el resultado de la expresión, estoy intentando asignar el resultado de la expresión a otro tempvar, luego extraigo una subcadena de tempvar pero nada ha cambiado.

Respuesta1

El comando FOR se puede usar para dividir una línea en tokens para que puedas tomar solo la parte que deseas. Con /f puedes ejecutarlo en la salida de otros comandos, en este caso la salida de DIR filtrada con FIND.

for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)

Respuesta2

No es ideal, pero podría cambiar SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txta

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt > tmp2.txt
SET /p vartmp =< tmp2.txt
DEL tmp2.txt

Respuesta3

Al seguir sus ejemplos encontré el mismo resultado, sin embargo, si reemplacé la línea:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

con

for /f %i in ('FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt') do set vartmp=%i

entonces vartmp contiene lo que buscas. Tenga en cuenta que necesita comillas simples, las comillas dobles no funcionarán. Además, si lo usa en un archivo por lotes, necesita %%i en lugar de %i

información relacionada