dimecres, 20 de gener del 2016

Error 0x1 en el Programador de Tareas al ejecutar scripts .bat con accesos UNC

En Windows, en ocasiones algunos scripts batch pueden fallar en el Scheduler Task (error 0x1) al acceder por UNC a recursos compartidos (\\).

Una de las ocasiones en que este error se produce es al utilizar estos accesos en el comando forfiles (explicado en el anterior post).
Curiosamente, al ejecutar estos mismos scripts manualmente, sin el Programador de Tareas, funcionan perfectamente.

Una de las formas de solucionar rápidamente este problema es utilizando los comandos pushd y popd en el script.

Con pushd almacenamos una ruta en memoria. 
Si la ruta utiliza acceso UNC, pushd crea una unidad de red en el sistema empezando por la letra Z: (si está libre):

pushd \\servidor\unidad$\carpeta

En este ejemplo, pushd asigna a la unidad Z: la ruta \\servidor\unidad$\carpeta , con lo que en el script ya no será necesario usar forfiles con la ruta UNC y emplearemos Z: en su lugar:

forfiles /p "Z:" …

Una vez ya no se necesite más el acceso a este recurso en el script, lo liberaremos con el comando popd (se usa sin parámetros).

- si necesitamos asignar más rutas UNC dentro del mismo script, pushd irá asignando letras de unidad en orden alfabético inverso. 
- al terminar, tendremos que ejecutar tantos popd como pushd hayamos hecho en el script. 
- popd “desmonta” los pushd empezando por el último que se ha ejecutado.

Lo vemos en este .bat de ejemplo:

REM este pushd asigna la siguiente ruta a Z:
pushd \\servidor\unidad$\carpeta 

REM este pushd asigna la siguiente ruta a Y:

pushd \\servidor\unidad$\carpeta2

forfiles /p "Z:” …

forfiles /p "Y:” …

REM este popd libera la unidad Y:

popd
REM este popd libera la unidad Z:
popd

Cap comentari:

Publica un comentari a l'entrada