I'll paste my pipeline here. Of course also not the best and there's always space to improve. I do some things differently than you do, so check it out. (comments are in Spanish but I guess you'll figure)
@echo off
cls
echo #################################################
echo "batch para procesar NDP generado en base de imagenes"
echo " by Dr. Tobias K. Kohoutek "
echo " 20.06.2017 "
echo #################################################
REM incluir LAStools en Path
set PATH=%PATH%;..;C:\lastools\bin;
REM ===================================================
REM = DESDE AQUI UNO TIENE QUE CAMBIAR LOS PARAMETROS =
REM ===================================================
REM la ruta de la NDP
set NDP_IMG=D:\...\NDP
REM el formato de los archivos originales
set NDP_IMG_FORMAT=laz
REM especificar la projeccion UTM
set PROJECTION=utm ...south
REM la ruta de los archivos temporarios
set TEMP_FILES=D:\...\temp
REM especificar la ruta de los resultados
set OUTPUT_FILES=D:\...\NDP_clasificada
REM especificar altura (m) por clasificacion ruido alto (clasa 18)
set ABOVE=100
REM especificar altura (m) por clasificacion ruido bajo (clasa 7)
set BELOW=-3
REM especificar los nucleos de computador para usar
set NUM_CORES
set /A NUM_CORES=%NUMBER_OF_PROCESSORS% - 1
REM especificar el tamaño de los tiles
set TILE_SIZE=1000
REM especificar el buffer de los tiles
set TILE_BUFFER=50
REM especificar la version LAS
set LAS_V=1.2
REM especificar hasta cual altura relativa de suele objectos se clasifican como suelo
set GROUND=0.3
REM especificar hasta cual altura relativa de suele objectos se clasifican como vegetacion baja
set VEG_L=1.3
REM especificar hasta cual altura relativa de suele objectos se clasifican como vegetacion media
set VEG_M=4
REM ===============================================
REM = DESDE AQUI TODO ESTA LISTO PARA EL PROCESSO =
REM ===============================================
REM eliminar carpeta temporales
rmdir %TEMP_FILES% /s /q
REM crear carpeta temporaria y resultada
mkdir %TEMP_FILES%
mkdir %OUTPUT_FILES%
echo START Automatic Pointcloud Classification %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
REM copiar archivos de lineas de vuelo con las2las desde odin a ruta local para procesar
REM Todos los puntos se clasifican en clasa 1 '-set_classification 1'. La version LAS se
REM cambia con '-set_version %LAS_V%'. La proyeccion '-%PROJECTION%'. Los coordinadas
REM se escaladan a una precision de centimetro '-rescale 0.01 0.01 0.01' (see: las2las_README.txt)
mkdir %TEMP_FILES%\reprojection
las2las -i %NDP_IMG%\*.%NDP_IMG_FORMAT% ^
-set_classification 1 -set_version %LAS_V% ^
-%PROJECTION% -rescale 0.01 0.01 0.01 ^
-odir %TEMP_FILES%\reprojection -olaz
echo las2las END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo las2las END %TIME% %DATE%
REM crear tiles con un buffer con '-tile_size %TILE_SIZE%' para especificar el tamaño de los tiles con
REM '-buffer %TILE_BUFFER%' en metros. El Buffer es necesario para reducir artefactos en los bordes de
REM los tiles. Los resultados se guardan en el formato LAZ con '-olaz' (see: lastile_README.txt)
mkdir %TEMP_FILES%\tiles_raw
lasindex -i %TEMP_FILES%\reprojection\*.laz
echo lasindex END %TIME% %DATE% \n >>%OUTPUT_FILES%\NDP_log.txt
echo lasindex END %TIME% %DATE%
lastile -i %TEMP_FILES%\reprojection\*.laz ^
-tile_size %TILE_SIZE% -buffer %TILE_BUFFER% ^
-odir %TEMP_FILES%\tiles_raw -olaz
echo lastile END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lastile END %TIME% %DATE%
REM busca puntos de traslape (overage) entré lineas de vuelo y eliminarlos
REM y usar todos los nucleos definidos con '-cores %NUM_CORES%'. (see: lasoverage_README.txt)
mkdir %TEMP_FILES%\sort
lassort -i %TEMP_FILES%\tiles_raw\*.laz ^
-odir %TEMP_FILES%\sort -olaz ^
-cores %NUM_CORES%
echo lassort END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lassort END %TIME% %DATE%
REM usar lasground_new para detectar puntos del suelo en todos los tiles con opcion '-city' (incremento 25m)
REM y '-ultra_fine' (see: lasground_README.txt). '-odir tiles_ground -olaz' parametros definen a guardar los
REM resultados compresados en la ruta 'tiles_ground'. el proceso corre en paralelo en caso de varios tiles
mkdir %TEMP_FILES%\tiles_ground
lasground_new -i %TEMP_FILES%\sort\*.laz ^
-step 3 -sub 8 -ultra_fine -compute_height ^
-odir %TEMP_FILES%\tiles_ground -olaz ^
-cores %NUM_CORES%
echo lasground END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lasground END %TIME% %DATE%
REM detectar construcciones en base de altura arriba suelo
mkdir %TEMP_FILES%\tiles_classify
lasclassify -i %TEMP_FILES%\tiles_ground\*.laz ^
-odir %TEMP_FILES%\tiles_classify -olaz ^
-cores %NUM_CORES%
echo lasclassify END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lasclassify END %TIME% %DATE%
REM clasificar suelo de nuevo con opcion de ignorar pre-detectados construcciones
mkdir %TEMP_FILES%\tiles_ground2
lasground_new -i %TEMP_FILES%\tiles_classify\*.laz ^
-wilderness -ignore_class 6 -compute_height00 ^
-odir %TEMP_FILES%\tiles_ground2 -olaz ^
-cores %NUM_CORES%
echo lasground2 END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lasground2 END %TIME% %DATE%
REM clasificar todos no-suelo/no-construccion ecos como vegetacion
mkdir %TEMP_FILES%\tiles_vegetation
lasheight -i %TEMP_FILES%\tiles_ground2\*.laz ^
-ignore_class 6 ^
-drop_below -3 -drop_above 100 ^
-classify_between 0.3 1.3 3 -classify_between 1.3 3.5 4 ^
-classify_between 3.5 100 5 ^
-odir %TEMP_FILES%\tiles_vegetation -olaz ^
-cores %NUM_CORES%
echo lasheight END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lasheight END %TIME% %DATE%
REM detectar construcciones de pequeño tamaño
mkdir %OUTPUT_FILES%\NDP
lasclassify -i %TEMP_FILES%\tiles_vegetation\*.laz ^
-odir %OUTPUT_FILES%\NDP -olaz ^
-cores %NUM_CORES%
echo lasclassify2 END %TIME% %DATE% >>%OUTPUT_FILES%\NDP_log.txt
echo lasclassify2 END %TIME% %DATE%
REM generar DTM y curvas de nivel desde los ecos de clasificacion suelo
mkdir %OUTPUT_FILES%
blast2dem -i %OUTPUT_FILES%\NDP\*.laz ^
-keep_class 2 ^
-step 1 -use_tile_bb ^
-odir %OUTPUT_FILES% -oasc ^
-cores %NUM_CORES%
lasgrid -i %OUTPUT_FILES%\NDP\*.laz - merged ^
-step 1 -average ^
-o %OUTPUT_FILES%\DTM.tif
blast2iso %OUTPUT_FILES%\NDP\*.laz - merged ^
-iso_every 5.0 ^
-smooth 2 -simplify_length 0.5 -simplify_area 0.5 -clean ^
-o %OUTPUT_FILES%\CN.shp
REM eliminar carpetas temporales
rmdir %TEMP_FILES% /s /q
echo End Automatic Pointcloud Classification %TIME% %DATE% \n >>%OUTPUT_FILES%\NDP_log.txt