11
votes

Comment faire un journal de toutes les commandes d'écho dans un fichier de lot?

J'essaie d'utiliser un fichier de commandes comme choix de votre propre aventure dans laquelle l'utilisateur peut créer un caractère et être appelé par nom et tel que les personnages de l'histoire. Il m'a frappé une heure de retour sur lequel il serait cool si comme ou après que le fichier de lot contenant l'histoire a été exécuté, il fallait un journal de toutes les commandes d'écho afin que, plus tard, le joueur puisse lire ce qu'ils ont fait sur tout jeu donné. < / p>

J'aimerais que le fichier journal soit lu comme ceci:

% Date %% Time%% (Tout le texte affiché par Echo Commandes pour la longueur du fichier est exécutée)

Malheureusement, tout ce que je peux comprendre comment faire est de créer un fichier logé avec juste la date et l'heure. Mettre ">> storylog.txt" fonctionne pour créer le fichier .txt et que je reçois la date et l'heure de là, mais il affiche simplement le texte ">> StoryLog.txt" après ce que je souhaite que le fichier de commandes s'affiche dans TXT écho Dans "Vous allez au nord du chemin >> StoryLog.txt" est affiché à l'écran. Cela ne fonctionnera naturellement pas. Que dois-je faire?


1 commentaires

Vous pouvez utiliser TEE , disponible également pour Windows.


4 Réponses :


0
votes

Vous ne pouvez pas le faire dans le script de lot littéralement, mais si vous définissez des fonctions, vous pouvez générer des données dans le bloc de fonction qui écrit également sur un fichier journal avant que la fonction ne renvoie, comme:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
echo. 2>outfile.log

CALL :functionPerson "Jon Doe" jump
GOTO :END
:functionPerson fullname action
  ECHO fullname is ^"%~1^"
  ECHO action is %2
  ECHO %1 performs action %2>> outfile.log
EXIT /B 0
:END
pause


0 commentaires

0
votes

Chaque fois que vous echo pour le lecteur de savoir ce qui se passe, vous pouvez également echo dans votre fichier journal, ajouter la date et l'heure au début de votre ligne :) Simple que cela pour moi. Je ne sais pas comment votre script semble cependant.


1 commentaires

Codage démêté pour avoir des paires de lignes partout. Mieux vaut créer une nouvelle routine logecho qui echos à l'écran et se connecte également au fichier.



7
votes

À cette fin, j'utilise ce qui suit:

:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0


2 commentaires

Technique intéressante. J'avais espéré que c'était une astuce de fichier temporaire in-mémorisée, mais elle est écrite sur le disque en tant que fichier avec le nom de fichier de soulignement unique. Également dans mes tests, j'ai trouvé qu'un seul et est nécessaire ... IE SET Testout = ^> _ ^ & Type _ ... DIR% Testout%


_ est juste utilisé comme tampon - parce que j'ai besoin de la sortie (donnée une fois) deux fois. C'est en fait un fichier et est écrasé à chaque fois. Et oui, puisque c'est un fichier, vous pouvez l'utiliser, mais vous le souhaitez - jusqu'à ce que vous l'écriviez à la suivante "ECHO BLABLABLA% logG%" et vous avez raison, un seul "&" devrait faire (il était tard la nuit, Quand j'ai travaillé ça - et je ne l'ai plus jamais touché, une fois que cela a fonctionné)



3
votes

Comme mon autre réponse a été assez longue en raison de quelques modifications, voici une nouvelle suggestion (Pas beaucoup changé, mais cela rend le code assez facile à lire): xxx


2 commentaires

+1, mais il échoue avec du texte comme % dire% "Cela devrait être un caret ^ pas deux" et % dire% "un ampersand ^ & échec"


aussi |, <,> va échouer. Chaque astuce a des limites. Mais je pense que ça va pour la question initiale. Je pense qu'une aventure textuelle ne fera pas l'utilisation de ces caractères spéciaux.