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.txt
a
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