No estoy seguro de cómo ha podido imprimir un solo número al azar. En su caso, %checker%
debe evaluar a una cadena vacía, a menos que ejecute su secuencia de comandos más de una vez desde la misma sesión cmd
.
Básicamente, la razón por la que su script no funciona como se esperaba es porque las variables en el cuerpo del bucle se analizan y se evalúan antes de que se ejecute el bucle. Cuando el cuerpo se ejecuta, los valores ya se han evaluado y se utilizan los mismos valores en todas las iteraciones.
Lo que necesita, por lo tanto, es una evaluación diferida, de lo contrario se llama dilatación retrasada. Primero debe habilitarlo, luego use una sintaxis especial para él.
Aquí está el script modificado con el fin de utilizar la expansión retardada:
@echo off
setlocal EnableDelayedExpansion
for %%i in (*.txt) do (
set checker=!Random!
echo !checker!
echo %%i% >> backupF
)
endlocal
echo Complete
Como se puede ver, setlocal EnableDelayedExpansion
permite un procesamiento especial para la sintaxis de expansión retardada, que es !
s alrededor de los nombres de las variables en lugar de %
s .
Aún puede usar la expansión inmediata (usando %
) donde puede funcionar correctamente (básicamente, fuera de los bloques de comando entre corchetes).
El script anterior sentido doesnt make. La variable "Aleatorio" no está configurada por nada, por lo que el comprobador siempre es nulo. Además, el %% i% tampoco tiene sentido ... debe ser %% i. Creo que esto podría funcionar sin usar la expansión retrasada si tu descripción del problema fue un poco mejor. – djangofan