El archivo por lotes devuelve "divide por cero error" solo cuando se ejecuta con el Programador de tareas

0

Tuve un problema con un archivo por lotes que devolvió "Divide by zero error" si, y solo si, se ejecutó usando el Programador de tareas. Si se ejecuta manualmente, se comportó como se esperaba.

Me las arreglé para reducir el problema al siguiente fragmento de código, que devolvió 0 cuando se ejecutó desde el Programador de tareas, y luego causó la división por cero.

SET numfiles=0
FOR %%x in (*.jpg) DO SET /a numfiles+=1

SET /a rand=%RANDOM% %%numfiles%
SET /a selected=%rand%+1

Después de una hora de arrancarme el cabello, encontré una solución que, aunque lógica, ciertamente no fue lo primero en lo que pensé. Por lo tanto, estoy compartiendo mi solución:

Marcel
fuente
Ese fragmento no causará un error de división por cero. ¿Dónde está el resto de su archivo por lotes?
DavidPostill
El fragmento devolvió 0, ya que no había archivos .jpg en System32. La siguiente operación fue encontrar un número aleatorio entre 1 y numfiles (inclusive), lo que llevó a la división del módulo por cero.
Marcel
Sí, bueno, edite la pregunta e incluya el archivo por lotes completo para completar la pregunta.
DavidPostill

Respuestas:

1

El problema resultó ser que el Programador de tareas no ejecuta archivos por lotes desde sus propios directorios, sino desde System32. Por lo tanto, el problema se resuelve fácilmente agregando

cd [relevant path]

al comienzo del guión.

Con suerte, logré salvar a alguien más de tener que seguir los mismos pasos frustrantes.

Marcel
fuente
1
tenga en cuenta que la respuesta real es probar (y validar) sus variables antes de usarlas, especialmente al cambiar el nombre de los archivos, puede anular un directorio completo de esta manera.
Yorik