Почему этот код говорит, что эхо выключено? - программирование
Подтвердить что ты не робот

Почему этот код говорит, что эхо выключено?

Что не так с этим кодом? Он говорит 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

Любая помощь приветствуется.

4b9b3361

Ответ 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

enter image description here Сначала создайте файл 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

Таким образом вы можете увидеть решение по своему усмотрению. Ура!;]