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
RESTART LATER
dimecres, 20 de gener del 2016
dimecres, 13 de gener del 2016
Forfiles: ejecutar comandos de Windows sobre varios ficheros seleccionados
Una de las tareas
que nos puede tocar hacer como administradores de sistemas Windows es borrar de
manera automatizada archivos más antiguos de X tiempo. Por ejemplo, un programa
que cree diariamente archivos de registro o logs pesados, que tan solo necesitemos
guardarlos durante un tiempo concreto.
Para realizar esta tarea diariamente sin necesidad de programar un script, tenemos el comando forfiles:
forfiles [/p <Path>] [/m <SearchMask>] [/s] [/d [{+ |-}] [{<Date> | <Days>}]] [/ c "<Command>"]
Éste es el aspecto que tendria el comando si queremos borrar todos los archivos .log de la carpeta c:\logsprogram , cuya fecha de modificación sea mayor de 90 días:
forfiles /p "c:\logsprogram" /m *.log /s /d -90 /c "cmd /c echo El archivo @PATH modificado el @fdate ha sido borrado & del @PATH" >>del_logs.txt
- El parámetro /s indica que la tarea debe realizarse en todas las subcarpetas de la carpeta indicada
Más información en la página de Microsoft:
https://technet.microsoft.com/es-es/library/cc753551%28v=ws.10%29.aspx
dissabte, 9 de gener del 2016
Hello World!
Hola! mi nombre es Javier, soy administrador de sistemas, y en este blog iré apuntando todo aquello que considere interesante o de ayuda para sysadmins :)
Asi que sin mas preámbulos, comienzo!
Asi que sin mas preámbulos, comienzo!
Subscriure's a:
Missatges (Atom)