batch
PROPÓSITO
- Notas sobre el uso de scripts
batch
que se guardan con la extensiónbat
- tener una colección de ellos
PROBANDO PARA DESPLIEGUE EN AST
despliegueAST-javier.bat epopo_adm 3.0.17 3.0.18
findstr 3.0.17 losTags.md
find /i “string” filename if errorlevel 0 do echo string unfound
MOVER BITACORA
- para crear el directorio del mes y mover los archivos de bitacora a ese directorio
C:\proyectos\hugo\notas-programacion>mkdir content\bitacora\2018\11
C:\proyectos\hugo\notas-programacion>move content\bitacora\2018-11-* content\bitacora\2018\11
TOMCAT Y PROYECTO
REM "PARA AUTOMATIZAR TAREAS"
REM "Lanzar desde el directorio donde esta el build.xml"
echo "PARANDO EL SERVIDOR"
call "c:\Servidores\Apache Tomcat 7.0.27\bin\shutdown.bat"
echo "PREPARANDO PROYECTO PARA DESPLEGAR"
call ant
echo "LANZANDO EL SERVIDOR"
echo "PROYECTO LISTO PARA DESPLEGAR"
call "c:\Servidores\Apache Tomcat 7.0.27\bin\startup.bat"
EXPORTACIÓN PERSONAL
REM TODOexportacionPersonal.bat
REM UN INTENTO DE AUTOMATIZAR TODA LA CARGA DE INTERINOS DESDE SIGI A EPLST
call set_java_path
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_1.properties
REM pause
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_2.properties
REM pause
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_3.properties
REM pause
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_4.properties
REM pause
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_5.properties
REM pause
"%JAVA_BIN%/java.exe" Exportacion ./conf/appPRI_6.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_1.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_2.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_3.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_4.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_5.properties
REM pause
REM "%JAVA_BIN%/java.exe" Exportacion ./conf/appSEC_6.properties
- para configurar las variables de entorno en java
REM seth_java_path.bat
REM set JAVA_HOME=C://Program Files (x86)//Java//jdk1.7.0_55
set JAVA_HOME=C://Program Files//Java//jdk1.7.0_25
set JAVA_BIN=%JAVA_HOME%/bin
set CLASSPATH=./classes/.;%JAVA_HOME%/jre/lib/ext;%JAVA_HOME%/jre/lib
SET CLASSPATH=%CLASSPATH%;./lib/log4j-1.2.14.jar
SET CLASSPATH=%CLASSPATH%;./lib/ojdbc6-11.2.0.3.jar
SET CLASSPATH=%CLASSPATH%;./lib/mail.jar
SET CLASSPATH=%CLASSPATH%;./lib/activation.jar
construir y desplegar sitios con Jekyll
REM lanza_pull_buidl_deploy.bat
@echo off
set horainicio=%TIME%
set mydate=%date:~6,4%%date:~3,2%%date:~0,2%
set log=log/log_%mydate%.log
echo Hora de inicio : %horainicio% >> %log%
call git status >> %log%
call git pull >> %log%
echo Hora despues de git pull : %TIME% >> %log%
call bundle exec jekyll build >> %log%
echo Hora despues de construir el sitio : %TIME% >> %log%
call aero deploy | find "Version" >> _data/versiones.yaml
rem /f para files el segundo token delimitado por espacio en blanco
rem del fichero data\versiones.yaml se escribe en data\version.yaml
rem en versiones estan las versiones generadas y en versio la actual
rem que es la que se lee desde el programa
for /F "tokens=2 delims= " %%a in (_data\versiones.yaml) do @echo version: %%a > "_data\sitio.yaml"
REM para quitar la simple barra de progreso
echo Hora de inicio : %horainicio% >> %log%
echo Hora de fin : %TIME% >> %log%
echo fechaCreacion: %date% - %time% >> "_data/sitio.yaml"
type _data/sitio.yaml >> %log%
echo fin >> %log%
REM pero quede subir el propio log generado
call git add -A
call git commit -m "el log de %date%"
call git push origin gh-pages
fecha y hora
call echo "lanzando el test inicio %DATE% - %TIME%"
construir y desplegar sitio con Hugo
REM lanzaGitHugoAero.bat
@echo off
set horainicio=%TIME%
set mydate=%date:~6,4%%date:~3,2%%date:~0,2%
set log=log/log_%mydate%.log
call git status >> %log%
call git add -A >> %log%
call git commit -m "automático javier-programacion %DATE%" >> %log%
call git push -u origin master >> %log%
echo Hora despues de git : %TIME% >> %log%
rd /S /Q public
echo Borrado el directorio public : %TIME% >> %log%
call hugo >> %log%
echo Hora despues de construir el sitio : %TIME% >> %log%
call aero deploy | find "Version" >> data/versiones.yaml
rem /f para files el segundo token delimitado por espacio en blanco
rem del fichero data\versiones.yaml se escrie en data\version.yaml
rem en versiones estan las versiones generadas y en versio la actual
rem que es la que se lee desde el programa
for /F "tokens=2 delims= " %%a in (data\versiones.yaml) do @echo version: %%a > "data\sitio.yaml"
echo Hora de inicio : %horainicio% >> %log%
echo Hora de fin : %TIME% >> %log%
echo fechaCreacion: %date% - %time% >> data/sitio.yaml
type _data/sitio.yaml >> %log%
echo fin >> %log%
REM pero queda subir el propio log generado
call git add -A
call git commit -m "el log de %date%"
call git push -u origin master
- el que usaba ante de migrar a firebase
@echo off
REM PARA AUTOMATIZAR LA SUBIDA A GIT Y EL DESPLIEGUE EN AEROBATIC
REM data\sitioFechaCreacion.yaml se usa para pintar en el menu la fecha de creación
REM data\sitioVersion.yaml se usa para pintar en el menu la versión pero es la versión anterior pues
REM para generar el sitio se usa la versión que el bat dejo en la anterior ejecucción
REM data\versiones.yaml es donde se guardan las versiones y las fechas de creación de esas versiones
REM se graba un log con la fecha de la ejecucción del bat
REM Atención: conviene logearse en aerobatic antes de lanzar el bat
REM aero login con la cuenta de javieriranzo@hotmail
REM para montar el nombre del log
set horainicio=%TIME%
set CUR_YYYY=%date:~6,4%
set CUR_MM=%date:~3,2%
set CUR_DD=%date:~0,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%
set fechaLog=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
set log=log/log_%fechaLog%.log
echo Hora de INICIO : %horainicio% > %log%
echo 1.- GIT >> %log%
REM a git los ultimos cambios
call git status >> %log%
call git add -A >> %log%
call git commit -m "automatico javier-programacion %fechaLog%" >> %log%
call git push origin master >> %log%
echo Hora despues de git : %TIME% >> %log%
echo 2 .- HUGO >> %log%
REM borramos el directorio que se va a generar
rd /S /Q public
echo Borrado el directorio public : %TIME% >> %log%
REM la fecha de creación antes de generar el sitio para que salga en el menú lateral
echo fechaCreacion: %date% - %time% > data\sitioFechaCreacion.yaml
REM generamos el sitio
call hugo >> %log%
echo Hora despues de construir el sitio : %TIME% >> %log%
echo 3 .- AEROBATIC >> %log%
REM desplegamos el sitio
call aero deploy >> data\deploy.yaml
TYPE data\deploy.yaml | find "Version" > data\deployTmp.yaml
REM /F para files el segundo token delimitado por espacio en blanco
REM del fichero data\version-actual.txt se escribe en data\sitio.yaml
REM en versiones estan las versiones generadas y en sitio.yaml la actual
REM la informacion en sitio.yaml es la que se lee desde el programa
for /F "tokens=2 delims= " %%a in (data\deployTmp.yaml) do @echo Version: %%a > data\sitioVersion.yaml
TYPE data\deploy.yaml >> %log%
del data\deployTmp.yaml
del data\deploy.yaml
REM meto las fecha de inicio en el log
echo Hora de inicio : %horainicio% >> %log%
REM meto las fecha de fin en el log
echo Hora de fin : %TIME% >> %log%
REM al fichero de versiones para el histórico
type data\sitioFechaCreacion.yaml >> data\versiones.yaml
type data\sitioVersion.yaml >> data\versiones.yaml
echo FIN >> %log%
REM pero queda subir el propio log generado
call git add -A
call git commit -m "el log de %fechaLog%"
call git push origin master
mover los logs
- sacado de esta web
REM lanzarlo desde c:\logs\app\
REM crea el directorio viejos aunque no exista con los subdirectorios necesarios
@echo off
REM las variables son visibles dentro de LOCAL
SETLOCAL
For /f "tokens=1-3 delims=1234567890 " %%a in ("%time%") Do set "delims=%%a%%b%%c"
For /f "tokens=1-4 delims=%delims%" %%G in ("%time%") Do (
Set _hh=%%G
Set _min=%%H
Set _ss=%%I
Set _ms=%%J
)
:: Strip any leading spaces
Set _hh=%_hh: =%
:: Ensure the hours have a leading zero
if 1%_hh% LSS 20 Set _hh=0%_hh%
REM Echo The time is: %_hh%:%_min%:%_ss%
REM set miHora=%TIME%
REM set miFecha=%DATE%
REM echo %miHora%
REM echo %miFecha%
REM set hora=%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%
set hora=%_hh%%_min%%_ss%%_ms%
set fecha=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
set directorio=c:\logs\app\viejos\epacf\logs_%fecha%_%hora%
echo el directorio es : %directorio%
mkdir %directorio%
move c:\logs\app\epacf\*201*.log %directorio%
ENDLOCAL&Set _time=%_hh%:%_min%
ARCHIVO BAT PARA COMPRIMIR LOS RECIBOS DE NÓMINA DE 500
@echo off
REM PARA COMPRIMIR LOS PDF DE ESTE DIRECTORIO EN ZIP DE 500 Y LUEGO HACER UN UNICO ZIP CON LOS ANTERIORES
REM para usar la variable contadorRecibos en el bloque () entre !!
@Setlocal EnableDelayedExpansion
REM el contador de recibos de nómina
set /a contadorRecibos=0
REM recorremos todos los archivos PDF en el directorio
FOR %%x in (*.PDF) DO (
REM usamos el resultado como nombre del archivo zip intermedio
REM ATENCIÓN ESTA PUESTO SOLO A 5 PARA PRUEBAS
REM set /a division=contadorRecibos/500
set /a division=contadorRecibos/5
REM aumentamos el contador
set /a contadorRecibos=contadorRecibos+1
REM comprimimos los pdf en un zip que va cambiando de nombre
REM borra los pdf comprimidos y manda a nul la salida de consola
"C:\Program Files\7-Zip\7z.exe" a -sdel -tzip RECIBOS_!division!.zip %%x -y > nul
)
echo recibos tratados %contadorRecibos%
endlocal
REM ahora comprimimos todos los zip en un único zip
"C:\Program Files\7-Zip\7z.exe" a -sdel -tzip RECIBOS.zip *.zip -y > nul
REM tiene que quedar sólo un archivo llamado RECIBOS.zip
ARCHIVO PARA COMPRIMIR LOS RECIBOS DE NÓMINA EN 100 MINIZIPS
@echo off
REM PROGRAMA QUE COMPRIME TODOS LOS PDF DEL DIRECTORIO EN EL QUE SE LANZA
REM GENERANDO PRIMERO 100 ZIP CON LOS ARCHIVOS QUE CUMPLEN EL PATRÓN
REM *01.PDF, *01.PDF,, ... *01.PDF
REM PARA LUEGO COMPRIMIR TODOS ESTOS ZIPS EN UN ÚNICO ZIP LLAMADO RECIBOS.ZIP
REM PARA QUE LAS LAS VARIABLES SEAN VISIBLES DENTRO DEL BLOQUE ()
REM LUEGO LA VARIABLE SE REFERENCIA CON !<nombre_variable>!
@Setlocal EnableDelayedExpansion
REM PARA COMPRIMIR LOS PDF DE ESTE DIRECTORIO EN 100 LOTES FILTRANDO POR EL NOMBRE DEL ARCHIVO
REM BUCLE SOBRE UN RANGO DE NÚMERO DEL 0 AL 99 TOMADOS DE UNO EN UNO
FOR /L %%G IN (0,1,99) DO (
SET /a numero=%%G
REM TRATAMOS EL NÚMERO CON DOS DÍGITOS
IF !numero! LSS 10 SET numero=0!numero!
REM COMPRIMIMOS LOS PDF QUE COINDIDAN CON EL PATRON EN EL ZIP -tzip CORRESPONDIENTE
REM LUEGO BORRA LOS ARCHIVOS COMPRIMIDOS -sdel
REM PARA QUE NO SALGA NADA POR CONSOLA -y
"C:\Program Files\7-Zip\7z.exe" a -sdel -tzip RECIBOS_LOTE_!numero!.ZIP *!numero!.PDF -y > nul
)
REM AHORA COMPRIMIMOS TODOS LOS ZIP EN UN ÚNICO ZIP
REM LUEGO BORRA LOS ARCHIVOS COMPRIMIDOS
"C:\Program Files\7-Zip\7z.exe" a -sdel -tzip RECIBOS.ZIP *.ZIP -y > nul
REM TIENE QUE QUEDAR SÓLO UN ARCHIVO LLAMADO RECIBOS.ZIP
PROBLEMAS PARA SUSTITUIR EL VALOR DE UNA VARIABLE DENTRO DE UN BLOQUE
- buena explicación del caso
SET VAR=Hello
FOR /L %%a in (1,1,2) do (
ECHO %VAR%a
SET VAR=Goodbye
)
REM @echo off
REM REM setlocal enabledelayedexpansion
REM SET VAR=Hello
REM FOR /L %%a in (1,1,2) do (
REM echo !VAR!
REM SET VAR=Goodbye
REM )
REM REM endlocal
REM Y @REM
- rem añade comentarios a un archivo
- @ este símbolo oculta el eco de la línea de comando
- @rem significa que el comentario de esta línea no se muestra si el eco esta habilitado
- si el echo esta off no hay diferencia entre rem y @rem
- si el echo esta on rem muestra el comentario y @rem no lo muestra
VARIABLE EN EL FOR
- en el for
FOR %%x in (*.PDF) DO (
la variable que recorre el for tiene que ser solo un carácter no la puedes llamarfichero
por ejemplo
direcciones útiles
- un buen blog sobre scripts
- la información básica de la wikipedia
- otra buena referencia en castellano
- esta explica el problema con la sustitución de variables
- un buen tutorial
ejemplos
-
ejemplo de bat
https://cects.com/wp-content/uploads/2014/10/testizarc.bat_.txt
para usar izarc yhttps://cects.com/wp-content/uploads/2014/10/test7zip.bat_.txt
para usar 7zip -
mirar este bat con origen en este artículo
@echo off
rem Por cada archivo presente en el directorio…
for %%a in (".*") do (
rem Comprobamos que el fichero en cuestión tengo una extensión y que no sea el propio .bat que estamos ejecutando…
if "%%~xa" NEQ "" if "%%~dpxa" NEQ "%~dpx0" (
rem Comprobamos que la carpeta que corresponde a su extensión no exista ya y, en ese caso, la creamos…
if not exist "%%~xa" mkdir "%%~xa"
rem Y si no es así, procedemos a mover el fichero a la mencionada carpeta.
move "%%a" "%%~dpa%%~xa\" ))
- más ejemplos de archivos batch