Почему этот код говорит, что эхо выключено?
Что не так с этим кодом? Он говорит 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
Любая помощь приветствуется.
Ответы
Ответ 1
Если ваша переменная где-то пуста, она будет такой же, как сама команда "echo", которая будет просто печатать статус эха.
Чтобы этого избежать, вы должны заменить все свои команды echo
примерно следующим образом:
echo var2: %var2%
Таким образом, если %var2%
пуст, он просто напечатает "echo var2:" вместо "echo off".
Ответ 2
Как заявил Лоран, это не проблема с ECHO
, это проблема вашего кода.
В пакетных файлах блоки анализируются до того, как они будут выполнены.
В то время как разбор всех процентов будет выполнен, так что кажется, что ваши переменные не могут быть изменены внутри блока.
Но для этого существует отложенное расширение, замедленное расширение будет оцениваться в момент выполнения не при разборе блока.
Он должен быть включен, по умолчанию отложенное расширение отключено.
@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
Я использовал здесь конструкцию echo(
вместо ECHO
, так как это обеспечит повторение пустой строки, даже если переменная пуста.
Ответ 3
Не уверен, если этот пост все еще прочитан, но тем не менее.
Вы должны попробовать следующее:
В верхней части кода сразу после @echo off
вы должны ввести
setlocal enabledelayedexpansion
Кроме того, в любом месте, где вы хотите использовать переменные, измененные в блоке скобок (например, For-Loops
или If's
), вы должны изменить %
на !
, чтобы получить
!varname!
Это должно помочь...
Привет
geisterfurz007
Ответ 4
Сначала создайте файл a.txt в том же каталоге, у которого есть этот командный файл... напишите текст в этом... Примечание: только Windows 2000
Windows ME
Windows XP
Виндоус виста
Windows 7 поддерживает 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
запустите этот файл ванны.. вы найдете подстроку (start = 5, length = 3) первой строки строки, которая у вас есть в a.txt во вновь созданном файле test.txt. Наконец, он работает!
Ответ 5
Решение вашей проблемы состоит в том, чтобы поместить "эхо" после завершения блока if.
Попробуйте следующее:
@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
Таким образом вы можете увидеть решение по своему усмотрению.
Ура!;]