La razón es muy simple, el proceso de WMIC escribe el output en Unicode y esto deja un caracter de retorno al final del output que recibe tu FOR (es decir, estás procesando más de una linea/valor en el FOR), simplemente es un problema de codificación, siempre se debe tener esto en cuenta al usar WMIC desde Batch por que es el "fallo" más común y que da mucho por culo.
Habia una forma muy elegante para que WMIC escribiese la salida en ANSI y poder parsearla perfectamente sin realizar apenas modificaciones, creo que había que especificar algún parámetro en el comando WMIC, pero no lo recuerdo y no lo encuentro por ningún lado, así que las otras opciones que te quedan son las siguientes:
1. Iniciar la CMD (y correr tu script) en modo Unicode.
2. Especificar un formato de salida distinto de WMIC (por ejemplo el formato de salida CSV) y adaptar los delimitadores/tokens de tu FOR.
For /f "tokens=... delims=," In ('WMIC.exe ... /Format:CSV') Do (...)
3. Redireccionar la salida de WMIC al comando Find/FindSTR para evitar procesar las lineas en blanco.
for /f
%%f in ('wmic Datafile where "name='
%data_path%'" get CreationDate
^| FIND "."'
) do ( if "
%%f"
NEQ "CreationDate"
( call :
OUTPUT "
%%f" "
%target_dir%"
)
)
4. No usar WMIC al fin y al cabo, pues si el propósito es obtener la fecha de creación entonces puedes hacerlo con los modificadores de variable de FOR...
@Echo Off & SetLocal EnableDelayedExpansion
FOR /F "usebackq tokens=*" %%# in (
"folders.txt"
) Do (
Set "creationDate=%%~t#"
set "day=!creationDate:~0,2!"
set "month=!creationDate:~3,2!"
set "year=!creationDate:~6,4!"
Echo Date: "!year!!month!!day!"
)
...Y por el amor de Dios, intenta seguir el ejemplo de sintaxis que he mostrado en el punto nº2, me refiero, usa los símbolos () para crear (abrir y cerrar) las correspondientes agrupaciones de comandos, sobre todo en búcles y condicionales ...o de lo contrario te auguro que en el futuro encontrarás errores de sintaxis que no sabrás de donde procederán.
EDITO: Ah, se me olvidaba comentarte...
Aquí:
if "%%f" NEQ "CreationDate" no estoy muy seguro de si lo has dejado así por algún motivo o no eres consciente de que "CreationDate" es un string, no una variable. Dicho de otra forma, siempre te va a dar positivo esa evaluación por qué estás comparando una fecha con el string "CreationDate"... quiero decir, la fecha siempre va a ser distinta:
if "{formato_de_fecha_de_wmic}" no es igual a "CreationDate"Saludos!