web-dev-qa-db-fra.com

Vider la sortie du script de traitement par lots dans un fichier texte sans spécifier au préalable l'emplacement du fichier de traitement par lots

Je suis conscient que je peux obtenir le résultat de cette manière (pour capturer les erreurs standard et les erreurs):

[batchFilePath] > [logFilePath] 2>&1

Ou de cette façon pour la sortie standard:

C:\MyBatchFile.bat > output.txt

Mais existe-t-il un moyen de le faire sans spécifier l'emplacement du fichier batch lui-même?

Par exemple, supposons que j’exécute (il suffit de cliquer deux fois pour exécuter) C:\MyFolder\MyBatch.cmd et, une fois que j’ai quitté le fichier de commandes (ou il est terminé), je peux trouver la sortie dans C:\MyFolder\MyBatch.txt.

Si oui, quel code devrais-je inclure dans le fichier de commandes lui-même?

10
TMRW

La seule solution à laquelle je peux penser consiste à ajouter >> output.txt à la fin de chaque commande, ce qui permet de générer un élément de votre fichier de commandes. Il ajoutera la sortie de votre fichier à la fin de output.txt

Ou créer un deuxième fichier batch dont le contenu serait .\MyBatchFile.bat > output.txt.

4
Levans

Placez vos commandes entre parenthèses. MyBatchFile.bat:

@echo off
REM setlocal enabledelayedexpansion

(
  echo line one
  echo line two
  echo line three
) > "%~dpn0.txt"

Les variables entre crochets sont évaluées en une seule fois lorsque ( est rencontré. Utilisez enabledelayedexpansion pour retarder l'évaluation.

11