Pour la boucle et les délimitations dans les fichiers de commandes

Quelqu’un peut-il s’il vous plaît m’aider à comprendre la syntaxe du fichier de commande

IF "%INPUT_PATH%"=="" ( echo Searching for latest test results in: %TEST_RESULTS% FOR /F "delims=" %%i in ('dir /OD /B "%TEST_RESULTS%\*.trx"') DO ( SET INPUT_PATH=%TEST_RESULTS%\%%~ni GOTO :DoneInputPath ) ) 

Je constate qu’il vérifie d’abord si la variable INPUT_PATH est vide et si elle est vide, elle entre dans une boucle interne pour la perte, sinon je suis perdu

Plus précisément

  1. FOR /F "delims=" %%i in ('dir /OD /B "%TEST_RESULTS%\*.trx"')
  2. SET INPUT_PATH=%TEST_RESULTS%\%%~ni

La plupart des informations dont vous avez besoin sont disponibles dans l’aide intégrée, bien que cela puisse être intimidant si vous débutez dans la programmation par lots. Par exemple, tapez HELP FOR ou FOR /? depuis l’invite de commande pour obtenir de l’aide sur la commande FOR.

Explication:

 FOR /F "delims=" %%i in ('dir /OD /B "%TEST_RESULTS%\*.trx"') ... 

La commande DIR répertorie tous les fichiers *.TRX dans le chemin d’access %TEST_RESULTS% . L’option /B donne le format abrégé (noms de fichiers uniquement). L’option /OD sortinge les fichiers par date de dernière modification (le plus récent en premier).

La commande FOR / F a trois modes, en fonction du format de la clause IN (). Le fait que la clause IN () soit entre guillemets simples signifie que FOR / F traite le contenu comme une commande et traite la sortie de la commande, une ligne à la fois. L’ "delims=" signifie ne pas parsingr en jetons (préserver chaque ligne entière). Ainsi, chaque ligne est chargée de manière itérative dans la variable %%i . La variable %%i n’existe que dans le contexte de la commande FOR.

 SET INPUT_PATH=%TEST_RESULTS%\%%~ni 

Je pense que vous savez ce que la plupart de cette commande fait. Le seul aspect “inhabituel” est la syntaxe %%~ni . Cette syntaxe étend la valeur de %%i au nom de fichier de base uniquement, sans aucune extension.

 GOTO :DoneInputPath 

Le GOTO provoque l’annulation de la boucle FOR après la première itération. Cela signifie que INPUT_PATH sera défini sur le nom du fichier *.trx le plus récemment modifié, car il est sortingé vers le haut.

Si le GOTO n’était pas là, le résultat final serait alors le fichier *.trx le plus ancien.

essayez ceci, l’explication est dans le commentaire:

 IF NOT DEFINED INPUT_PATH ( echo Searching for latest test results in: %TEST_RESULTS% REM dir /OD means older files first and the youngest last, the last remains in INPUT_PATH; use "%%~nxi" for file name + file extension FOR /F "delims=" %%i in ('dir /OD /B "%TEST_RESULTS%\*.trx"') DO SET "INPUT_PATH=%TEST_RESULTS%\%%~ni" )