@echo off REM variables definition (can be edited) set QI_MAX_THREAD=8 set QI_BASE_DIR=D:\Quick_Inventory REM variables definition set QI_CPT=0 set QI_CPT_OFF=0 set QI_CPT_ON=0 set QI_CPT_TIMEOUT=0 set QI_CPT_ONLINE=0 set QI_THREAD_NBR=1 set /a QI_THREAD_HIGHER=%QI_MAX_THREAD%-1 set QI_CACHE=%QI_BASE_DIR%\cache set QI_BIN=%QI_BASE_DIR%\bin REM delete cache folder if requested if "%1"=="--delete-cache" rmdir /s /q %QI_CACHE% REM create working directory if not exist %QI_CACHE%\. mkdir %QI_CACHE% if not exist %QI_BIN%\. mkdir %QI_BIN% REM clean cache del /q %QI_CACHE%\*.ping >nul 2>&1 del /q %QI_CACHE%\*.list >nul 2>&1 del /q %QI_CACHE%\*.tmp >nul 2>&1 del /q %QI_CACHE%\workstations.* >nul 2>&1 for /f "tokens=3,4" %%T IN ('dir /-c %QI_CACHE%\*.details') DO ( if "%%T"=="0" del /q %QI_CACHE%\%%U >nul 2>&1 ) SETLOCAL ENABLEDELAYEDEXPANSION REM find the number of workstations, split workstations into multiple lists for /f "skip=1" %%L IN (list.csv) DO ( set /a QI_CPT+=1 set /a QI_THREAD_NBR=!QI_CPT! %% %QI_MAX_THREAD% echo %%L>> %QI_CACHE%\ping.thread!QI_THREAD_NBR!.list ) echo %QI_CPT% workstations found echo --- REM ping all workstations echo ping all workstations for /l %%D IN (0,1,%QI_THREAD_HIGHER%) DO start %QI_BIN%\ping.thread.cmd %%D REM wait for ping end echo wait for %QI_MAX_THREAD% term signals ('waitfor /si thread' to trigger manually) for /l %%E IN (0,1,%QI_THREAD_HIGHER%) DO waitfor thread echo all signals received echo --- REM list offline workstations for /f %%C IN ('findstr /c:"(100%% loss)" /c:"Destination host unreachable" /c:"could not find host" /M %QI_CACHE%\*.ping') DO echo %%~nC>> %QI_CACHE%\workstations.offline REM find the number of online/offline workstations for /f %%L IN (%QI_CACHE%\workstations.offline) DO set /a QI_CPT_OFF+=1 set /a QI_CPT_ON=%QI_CPT%-%QI_CPT_OFF% REM list online workstations for /f "skip=1" %%G IN (list.csv) DO ( for /f "tokens=1 delims=" %%H IN ('findstr /x %%G %QI_CACHE%\workstations.offline') DO set var=%%H if not "!var!"=="%%G" echo %%G>> %QI_CACHE%\workstations.online ) REM split online workstations into multiple lists for /f %%L IN (%QI_CACHE%\workstations.online) DO ( if not exist %QI_CACHE%\%%L.details ( set /a QI_CPT_ONLINE+=1 set /a QI_THREAD_NBR=!QI_CPT_ONLINE! %% %QI_MAX_THREAD% set workstation=%%L set machine_type=!workstation:~5,3! for %%R IN (wdx WDX wlx WLX) DO ( if "!machine_type!"=="%%R" echo %%L>> %QI_CACHE%\details.thread!QI_THREAD_NBR!.list ) ) ) echo %QI_CPT_ON% online / %QI_CPT_OFF% offline echo %QI_CPT_ON%> %QI_CACHE%\online_count.tmp echo %QI_CPT_OFF%> %QI_CACHE%\offline_count.tmp echo --- REM get details from online workstations echo get details from online workstations for /l %%D IN (0,1,%QI_THREAD_HIGHER%) DO start %QI_BIN%\details.thread.cmd %%D REM wait for details end echo wait for %QI_MAX_THREAD% term signals ('waitfor /si thread' to trigger manually) for /l %%E IN (0,1,%QI_THREAD_HIGHER%) DO waitfor thread echo all signals received echo --- REM clean cache from empty details for /f "tokens=3,4" %%T IN ('dir /-c %QI_CACHE%\*.details') DO ( if "%%T"=="0" del /q %QI_CACHE%\%%U >nul 2>&1 ) REM building html result echo building html result call %QI_BIN%\html_generator.bat start firefox "%QI_BASE_DIR%\qi.html" ENDLOCAL :eof