fichier journal du lot de scripts

Oct 15 2020
@echo off
    call :checkFTP1 %* > all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :checkFTP2 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :checkFTP3 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :doCommands1 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :doCommands2 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :doCommands3 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    call :doCommands4 %* >> all_log_all_log_%date:~10,4%%date:~4,2%%date:~7,2%.log 2>&1
    exit /b
    
    
:checkFTP1

    @echo off
Setlocal

:: Is folder empty
set _TMP=
for /f "delims=" %%a in ('dir /b "C:\test\folder1"') do set _TMP="%%a"
IF {%_TMP%}=={} (
    goto :Exit1
) ELSE (
    goto :checkFTP2
)
Endlocal


:checkFTP2
    @echo off
Setlocal

:: Is folder empty
set _TMP=
for /f "delims=" %%a in ('dir /b "C:\test\folder2"') do set _TMP="%%a"
IF {%_TMP%}=={} (
    goto :Exit2
) ELSE (
    goto :checkFTP3
)
Endlocal


:checkFTP3
    @echo off
Setlocal

:: Is folder empty
set _TMP=
for /f "delims=" %%a in ('dir /b "C:\test\folder3"') do set _TMP="%%a"
IF {%_TMP%}=={} (
    goto :Exit3
) ELSE (
    goto :doCommands1
)
Endlocal


:doCommands1
    call script1.bat
    if %errorlevel% EQU 0 (goto :doCommands2 ) Else ( ECHO error on script 1 ,2,3,4)
    exit
:doCommands2
    call script2.bat
    if %errorlevel% EQU 0 (goto :doCommands3 ) Else ( ECHO Script 1 Completed  Successfully , ERRORS on  2,3,4)
    exit
:doCommands3
    call script3.bat
    if %errorlevel% EQU 0 (goto :doCommands4) Else ( ECHO Script 2 Completed  Successfully , ERRORS on 3,4)
    exit
:doCommands4
    call script4.bat
    if %errorlevel% EQU 0 (goto :completed1) Else ( ECHO Script 3 Completed  Successfully , ERRORS on  4)
    exit
:Exit1 

Echo Today Date  %DATE%  at %Time%
Echo ###################FTP-1 FILES  MISSING  #########################

Exit

:Exit2

Echo Today Date  %DATE%  at %Time%
Echo ###################FTP-2 FILES  MISSING (#########################

Exit

:Exit3

Echo Today Date  %DATE%  at %Time%
Echo ###################FTP-3 FILES  MISSING   #########################

Exit
    
    
:completed1


Echo Today Date  %DATE%  at %Time%
Echo ###################all scripts  Completed  Successfully#########################

Exit

J'ai ci-dessus le fichier de commandes qui appelle plusieurs fichiers de chauve-souris. J'ai testé le script et cela a bien fonctionné.
Mon seul problème est que le fichier journal généré contient toutes les informations et qu'il s'agit d'un fichier volumineux.
Est-il possible de simplement enregistrer les commentaires et les échos, et d'exclure ce qui est exécuté à l'écran?
Par exemple, je ne veux pas qu'un fichier déplacé s'affiche dans le fichier journal.

Réponses

BenPersonick Oct 17 2020 at 16:03

J'ai pris votre code et l'ai réécrit pour utiliser des fonctions génériques qui dédupliquent le code dans un formulaire plus facile à gérer et vous permettent d'ajouter ou de supprimer toutes les étapes des sections FTP et Script selon les besoins en éditant la liste des variables.

Je ne renvoie également que la sortie qui n'inclut pas le (s) fichier (s) déplacé (s).

Alternativement, si vous voulez vraiment que les lignes d'état s'impriment, vous pouvez changer cela pour que celles-ci s'impriment uniquement dans le journal et que toutes les informations ne s'impriment pas dans le journal (cela est fait car vous mettez la redirection vers le journal sur les appels à autres étapes.

De plus, la façon dont cela a été écrit avant de passer par toutes les commandes goto et de ne pas avoir besoin d'appels à chacune en haut.

Voici le code refactorisé, je ne l'ai pas testé mais ça devrait aller, je dois sortir pendant quelques heures et vous pouvez poser des questions et je serai heureux de répondre quand j'aurai le temps.

@( Setlocal EnableDelayedExpansion 
  echo off
  SET "_FolderList="C:\test\folder1" "C:\test\folder1" "C:\test\folder1" "
  SET "_ScriptList="c:\test\script1.bat" "E:\script2.bat" "C:\Path\To\script3.bat" "C:\Path\To\script4.bat" "
  SET "_Scripts_Failed=1,2,3,4"
  SET "_Scripts_Completed="
  SET "_Continue=0"
  CALL :GetDateTime
  SET "MasterLog=all_log_all_log_!IsoDate!_!IsoTime!.log"
)

CALL :Main

( Endlocal
  EXIT /B
)

:Main
  SET /A "_Counter=0"
  FOR %%_ IN (%_FolderList%) DO (
    IF DEFINED _Continue (
      SET /A "_Counter+=1"
      CALL :CheckFTP_List %%~_
    )
  )>> "%MasterLog%"
  SET /A "_Counter=0"
  FOR %%_ IN (%_FolderList%) DO (
    IF DEFINED _Continue (
      SET /A "_Counter+=1"
      CALL :DoCommands_List %%~_
    )
  )>> "%MasterLog%"
  IF DEFINED _Continue (
    Echo Today Date  %DATE%  at %Time%
    Echo ###################all scripts  Completed Successfully#########################
  )
GOTO :EOF
  
  
:CheckFTP_List
  REM Is folder empty
  for /f "delims=" %%a in ('dir /b /A-D "%*') do (
    set "_Continue=%%a" )
  IF NOT Defined _Continue (
    Echo.Today Date on %DATE%  at %Time%
    Echo.###################FTP-%_Counter% FILES  MISSING  #########################
  )
GOTO :EOF

:DoCommands_List
  call "*%" | FIND /I /V "file(s) moved" &REM only outputs lines that don't contain files moved.
  if %errorlevel% NEQ 0 (
    SET "_Continue="
    SET "_Scripts_Completed=%_Scripts_Completed:,1=1%"
    SET "_Scripts_Failed=!_Scripts_Failed:%_Scripts_Completed%=!"
    Echo Today Date  %DATE%  at %Time%
    ECHO. Error encountered on Script %Counter%! -- Completed Scripts: !_Scripts_Completed! -- Failed Scripts: !_Scripts_Failed!
  ) ELSE (
    SET "_Scripts_Completed=%_Scripts_Completed:,1=1%,%Counter%"
  )
GOTO :EOF



:GetDateTime
  FOR /F "Tokens=1-7 delims=MTWFSmtwfsouehrandit:-\/. " %%A IN ("%DATE% %TIME: =0%") DO (
    FOR /F "Tokens=2-4 Delims=(-)" %%a IN ('ECHO.^| DATE') DO (
      SET "%%~a=%%~A"
      SET "%%~b=%%~B"
      SET "%%~c=%%~C"
      SET "HH=%%~D"
      SET "Mn=%%~E"
      SET "SS=%%~F"
      SET "Ms=%%~G"
    )
  )
  SET "IsoTime=%HH%.%Mn%.%SS%.%Ms%"
  SET "IsoDate=%yy%-%mm%-%dd%"
GOTO :EOF