3 votes

Rediriger echo dans un fichier batch cmd vers une variable échoue

J'utilise la fonction ci-dessous pour vérifier si l'écho est activé ou non, et comme vous pouvez le voir, il redirige le statut de l'écho puis utilise la sortie pour définir un indicateur :

FONCTION

:echos 
echo > echo.txt & rem pipe ech status to a text file
@echo off
set _echos=yes
:: L'hypothèse par défaut est que l'écho était activé
CALL FileStringLength echo.txt & rem fetch string length. eq to 12 if off
IF %_strlength% EQU 12 (set _echos=no)
del echo.txt      & rem zap temporary file
set "_strlength=" & rem zap temporary variable
set "_echos"      & rem show status
IF %_echos% EQU yes (@echo on
) ELSE (
 @echo off
)
:: /echos

Cela fonctionne bien, mais créer un fichier semble... peu élégant. alors j'ai pensé, hmmm pourquoi ne pas simplement faire une redirection ? remplacer le pipe par

>echo|set /p _str="redirection"

le résultat est comme ci-dessous, et lorsque je vérifie la variable de chaîne, elle n'est pas là :

redirection
>set _str
Variable d'environnement _str non définie
>

pas ce que je voulais. À un moment donné, dans les premières heures lorsque l'esprit vagabonde, j'ai obtenu le résultat ! Hourra ! je me suis écroulé magnifiquement sur le canapé ... mais je ne pouvais pas pour la vie de moi me rappeler quelle combinaison arcane de code a permis à la redirection de fonctionner ! soupir quelqu'un a-t-il résolu ce problème particulier ? ou n'était-ce qu'une hallucination provoquée par TOC dans les premières heures ?

0 votes

Ce n'est pas possible. Voir stackoverflow.com/a/46324404/3536342 qui explique pourquoi.

0 votes

Merci. Hallucination alors! ... mais au moins il y a une solution là. Et au mieux je peux me débarrasser de ce fichier temporaire en sautant dans et hors du dossier :-)

0voto

ilinkcs Points 53

La solution proposée dans le lien suggéré par @DavidPostill échoue dans mon cas d'utilisation, malheureusement.

for /f "delims=" %%a in ('echo 111') do set "readValue=%%a"

Cependant, lors de l'exécution de la solution dans un batch (pour capturer le statut de echo):

@echo off
echo: pre for-do
echo
for /f "delims=" %%a in ('echo') do set "_str=%%a"
echo: post for-do
echo
echo _str= %_str%

le résultat est le suivant:

pre for-do
ECHO is off.
post for-do
ECHO is off.
_str= ECHO is on.

donc la question, je suppose, reste non résolue. J'ai toujours la solution plutôt inélégante, ce n'est pas la fin du monde! Si quelqu'un d'autre a des idées, je serais vraiment heureux de les explorer :-)

0voto

T3RR0R Points 417

Une fonction pour tester l'état Echo et assigner l'état à une variable. Malheureusement, je n'ai pas pu éviter le fichier temporaire.

@ECHO OFF

:getstate
CALL :ECHO_STATE
ECHO Echo est %state%
DEL /Q "tempEstate.sav"
PAUSE
GOTO :EOF

:ECHO_STATE
ECHO>tempEstate.sav && FIND /I "OFF" "tempEstate.sav" >nul || Set "state=on" && GOTO :EOF

Set "state=off"
GOTO :EOF

0 votes

Merci, TT3RROR, et désolé pour ne pas avoir répondu plus tôt - en vacances. Eh bien, vous avez une solution plus élégante, c'est sûr! Cela rend le bloc de code de prod plus petit ce qui est toujours une victoire dans un moteur d'interprétation en soi!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X