Quel est le problème avec ce code? Il dit ECHO is off
.
@ECHO off
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
echo %var2%
set var1=%var2:~5,3%
echo %var1% > test.txt
echo %var1%
) else (
echo error
)
del result
pause
Toute aide est appréciée.
Si votre variable est vide quelque part, ce sera la même chose que d'avoir la commande "echo" seule, qui affichera simplement le statut d'écho.
Pour éviter cela, vous devez remplacer toutes vos commandes echo
par quelque chose comme ceci:
echo var2: %var2%
De cette façon, si %var2%
est vide, cela affichera simplement "echo var2:" au lieu de "echo off".
Comme Laurent l'a dit, ce n'est pas un problème de ECHO
, c'est un problème de code.
Dans les fichiers de traitement par lots, les blocs sont complètement analysés avant leur exécution.
Lors de l'analyse de tous les pourcentages d'expansion, il semble que vos variables ne puissent pas être modifiées à l'intérieur d'un bloc.
Mais pour cela existe l'expansion retardée, l'expansion retardée sera évaluée au moment de l'exécution et non lors de l'analyse du bloc.
Il doit être activé. Par défaut, l’extension différée est désactivée.
@ECHO off
setlocal EnableDelayedExpansion
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
echo(!var2!
set var1=!var2:~5,3!
echo(!var1! > test.txt
echo(!var1!
) else (
echo error
)
del result
J'ai utilisé ici la construction echo(
au lieu de echo
car cela garantira l'écho d'une ligne vide même si la variable est vide.
Pas sûr, si ce message est toujours lu, mais quand même .. Vous devriez essayer ce qui suit: En haut du code juste après @echo off
vous devez mettre dans
setlocal enabledelayedexpansion
De plus, partout où vous souhaitez utiliser des variables modifiées entre crochets (comme For-Loops
ou If's
), vous devez modifier le %
into !
pour obtenir !varname!
Cela devrait aider ...
Salutations
geisterfurz007
Commencez par créer un fichier a.txt dans le même répertoire que ce fichier de commandes ... écrivez du texte dans ce ... Remarque: uniquement sous Windows 2000Windows MEWindows XPWindows Vista Windows 7 prend en charge FINDSTR
set /p pattern=Enter id:
findstr %pattern% a.txt > __query.tmp
set /p result=<__query.tmp
if %errorlevel%==0 (
set var2= %result%
echo %var2%
set var1= %var2:~5,3%
echo %var1% > test.txt
echo %var1%
) else (
echo error
)
del __query.tmp
pause
lancez ce fichier bath .. vous trouverez une sous-chaîne (début = 5, longueur = 3) de la première ligne de chaîne que vous avez dans un fichier .txt dans un fichier test.txt nouvellement créé. Enfin, ça marche!
La solution à votre problème consiste à mettre les "échos" après la fin du bloc if. Essaye ça:
@ECHO off
set /p pattern=Enter id:
findstr %pattern% .\a.txt > result
if %errorlevel%==0 (
set var2= <result
set var1=%var2:~5,3%
goto print
) else (
echo error
goto result
)
:print
echo %var2%
echo %var1% > test.txt
echo %var1%
:result
del result
pause
De cette façon, vous pouvez voir la solution à votre guise. À votre santé! ;]