1 votos

¿Por qué no funciona esto para el bucle? Lote

Tengo un bucle for en esta secuencia de comandos: https://github.com/ITCMD/Explorer--/blob/master/Explorer--.bat Que se parece a esto: (:ModificationID línea 477, llamados de líneas 308 y 329 en :OtherVersions)

set _ForString=%~1
set _ForString=!_ForString:\=\\!
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=1,2* delims==" %%a in (out.temp) do (set %~2=%%b & echo hello)

donde %~1 es igual a una ruta de archivo. Que las salidas de multa a cabo.temp como:

(2 blank lines)
LastModified=20181019082634.596899-240
(3 blank lines)

Pero el bucle no se ejecuta nunca. Nunca siquiera se ejecuta el comando echo. Por qué?

1voto

PJ Mahoney Puntos 889

La forma en que fue capaz de llegar a trabajar por mi entendimiento fue el uso de la Type comando y, a continuación, dirigir el archivo a la Find comando y decirle que muestre solo las líneas con un = símbolo, por lo que, básicamente, se analiza la cola y líder de línea en blanco alrededor del valor de interés el contenido del archivo sabio.

No estoy seguro de si fue la forma en que el tokens y delims fueron establecidos por el script fragmento de método o si el FOR /F bucle que realmente tenía un problema con las líneas en blanco cuando iterada o si detrás de las líneas en blanco hizo pero esas son las cosas que parecen lógicas para mí. Estoy seguro de que hay un par de maneras de manejar esto.


Script (Solución)

setlocal enabledelayedexpansion
set "_ForString=%~1"
set "_ForString=!_ForString:\=\\!"
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=2 delims==" %%a in ('type out.temp ^| find "="') do (set %~2=%%a)

Nota: he probado con ('find "=" out.temp ^| find "="') y parece que para hacer el trabajo.


Más Recursos

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: