COUPLE RAPIDE POUR SAUTER LA LOGIQUE DES FICHIERS DE LOTS DEPUIS LE COURANT
COMMENCER: Je ne connais aucun moyen de sauter PAUSE
commandes dans un script batch (du moins dans votre cas, pour répondre à vos besoins), à moins que vous n'utilisiez l'une des deux solutions que je vais énumérer ci-dessous de manière plus détaillée. Je ne connais aucun commutateur tel que --skippauses
une solution aussi simple en appelant ou en exécutant un script de traitement par lots ne fonctionnerait que pour ignorer PAUSE
commandes sans modifier au préalable la logique réelle du script batch pour éventuellement l'accepter comme argument pour NE PAS faire PAUSE
commande, mais vous DEVEZ apporter des modifications à la logique de script batch afin que cela fonctionne de cette façon.
SOLUTION 1 (ne change pas le fichier de script batch que vous appelez)
Construire dynamiquement un nouveau script construit de manière dynamique, en respectant la logique du script appelé et en excluant toutes les lignes contenant le PAUSE
string (insensible à la casse), puis exécutez le script créé de manière dynamique à la place avec la même logique que le script CALLed moins toutes les LIGNES contenant PAUSE
et donc tout PAUSE
commandes.
Ajoutez simplement quelque chose de similaire à votre myBatch.bat
comme mon exemple ci-dessous et assurez-vous de pointer les répertoires, etc où ceux-ci doivent être. Essentiellement, cela exécutera le FINDSTR /i /v
commande contre le script vous CALL
, et ensuite le lire ligne par ligne, mais EXCLURE toutes les lignes contenant la chaîne PAUSE
qui n'est PAS sensible à la casse, et dirigez-le directement vers un nouveau script batch construit de manière dynamique avec un nom unique que vous exécutez ensuite. CALL
contre.
EXEMPLE DE SCRIPT
@ECHO OFF
:: Parse out space from hour part of time and replace with a zero (for hours of 00:00 - 09:59)
SET hh=%TIME:~0,2%
SET hh=%hh: =0%
SET DateString=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%_%hh%%TIME:~3,2%%TIME:~6,2%
SET DynScriptName=%Temp%\NOPAUSE_%~N0_%DateString%.cmd
:: If DynScriptName already exists, just delete it
IF EXIST "%DynScriptName%" DEL /F /Q "%DynScriptName%"
:: Use FINDSTR to ignore all lines containing "pause" but pipe all other lines to DynScriptName to later CALL/EXECUTE
:: /i switch denotes case insensitivity, /v switch denotes exclude value in results piped to DynScriptName
FINDSTR /i /v "pause" "C:\folder\folder\myBatch.bat">"%DynScriptName%"
:: Call the dynamically built script without PAUSE command lines
CALL "%DynScriptName%"
:: If DynScriptName already exists, just delete it (post cleanup)
IF EXIST "%DynScriptName%" DEL /F /Q "%DynScriptName%"
GOTO EOF
CONCLUSION: Ce ( Solution 1
) devrait répondre à vos deux besoins en particulier:
Vous avez maintenant le moyen de lancer un script construit dynamiquement sans PAUSE
commandes basées sur l'exécution d'un script qui construit dynamiquement un nouveau script par rapport à la logique de ce script [contenus], par exécution, mais pour tout exclure PAUSE
contenant des lignes et éliminant ainsi la PAUSE
commandes de courir.
En outre, cela garantit le script actuel que vous exécutez via CALL
N'A PAS BESOIN d'être modifié pour prendre en compte les modifications demandées dans votre demande, car elle en reconstruit dynamiquement une autre, à l'exclusion de ce que vous avez demandé.
En outre, un autre simple solution comme dans Solution 2
(ci-dessous) donne une méthode pour effectivement apporter des modifications au script que vous appelez, si vous souhaitez également envisager cet itinéraire facile, vous avez ma Solution 2
exemple, ainsi que les autres articles concernant les modifications nécessaires à ce niveau.
SOLUTION 2 (change la logique de script de traitement par lots)
Dans votre script avec le PAUSE
commande, vous mettriez une étiquette comme celle ci-dessous par exemple. Vous auriez ensuite apposé une étiquette sur la logique juste après le PAUSE
commande afin que vous puissiez ajouter IF
logique de rechercher le premier argument passé au script lorsqu’il est exécuté.
Juste au dessus du PAUSE
étiquette de commande (sens :PauseLabel
dans mon exemple) , tu mettrais le IF [%1]==[] GOTO PauseLabel
puis la ligne suivante en dessous de laquelle vous mettriez GOTO SkipPause
.
Cela indique si le script a été exécuté et si aucun argument n’est passé, puis cliquez sur :PauseLabel
et faire ce qui est là, qui est PAUSE.
S'il y a TOUT premier argument passé, alors il ira à :SkipPause
et faire la prochaine étape, qui est le reste de votre logique sans le PAUSE
commander.
De cette façon, les utilisateurs peuvent l’exécuter manuellement toute la journée en double-cliquant dessus (sans lui transmettre d’argument), mais votre travail planifié peut transmettre le premier argument de votre choix (il ne s’agit que d’un argument IF
la logique peut simplement confirmer qu'il existe ou si c'est NULL.
Script avec PAUSE
commande 1er argument de contrôle et saut exemple logique ci-dessous
<Script logic before PAUSE>
IF [%1]==[] GOTO PauseLabel
GOTO SkipPause
:PauseLabel
PAUSE
:SkipPause
<Rest of your batch logic>
Passer l'exemple d'argument à votre script (où il est planifié)
myBatch.bat SkipPause
Veuillez noter que lorsque vous planifiez le lot, le premier argument peut être SkipPause
, dummy
, DosEquis
ou tout ce que vous voulez que ce soit. La logique avec le IF
dit simplement: "Y at-il un argument passé au script quand il a été exécuté, et si oui, allez à :SkipPause
sinon, allez à :PauseLabel
.
simple
exigence. J'espérais quelque chose comme un argument de ligne de commande qui utilise un moyen intégré pour désactiver / ignorer / supprimer les pauses. Et il ne semble pas y avoir de telle fonctionnalité pour la console Windows ou le planificateur de tâches.--skippauses
, mais voici quelques solutions de contournement qui accompliront ce que vous avez décrit ... ", je peux le marquer comme accepté.