2013-01-15 7 views
16

このコードで何が問題になっていますか?それは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 

助けてください。

+0

「@ECHOオフ」を削除してみましたか? –

+8

それからエコーはオンだと言います。 – user1979801

答えて

19

変数がどこかに空の場合は、コマンド "echo"を単独で実行するのと同じになります。これはechoのステータスを出力します。これを避けるために

、あなたはこのようなもので、すべてのechoコマンドを置き換える必要があります:%var2%が空の場合、それは単に「VAR2をエコー:」印刷され、

echo var2: %var2% 

その方法の代わりに「オフエコー」のを。

+0

しかし、私はvar2が空ではないことを期待していますが、実行していますか? – user1979801

+1

それは 'echo'の問題ではありませんが、あなたが読もうとしているコードの問題です。しかし、それをデバッグするには、私の答えに記載されているように各エコーの接頭辞を付けたほうがよいでしょう。少なくともあなたの問題がどこにあるかを知るでしょう。 –

+0

'result'には文字列値がありますが、var2 = user1979801

0

enter image description hereまず、その中にいくつかのテキストを書く... uは、このバッチファイルを持っている同じディレクトリにファイルを作成A.TXT ...注意:Windows 2000のみ のWindows ME のWindows XP Windows Vistaの の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 

実行この風呂ファイル..あなたは、あなたが新たに作成されたファイルtest.txtのでA.TXTで持っている文字列の最初の行の部分文字列を(長さ= 3、5 =スタート)でしょう。ついにそれが働いた!

+0

まだ同じ結果 – user1979801

+0

あなたは何を入力していますか?id: –

+0

a.txtに既にあるテキスト – user1979801

13

Laurentが述べたように、それは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(を使用。

0

解決策は、ifブロックが完了した後に "echo"を置くことです。これを試してみてください :あなたが望んでいたよう

@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 

この方法であなたは解決策を見ることができます。 乾杯! ;]

4

この投稿がまだ読まれているにもかかわらず、わかりません。 あなたは次のことを試してみてください: のコードの上に右@echo off後にあなたがまたどこにかっこ(のようなFor-LoopsまたはIf's)のブロックに変更された変数を使用したい

setlocal enabledelayedexpansion 

に配置する必要がありますあなたが持っています !varname!

これが手助けしなければならない...

挨拶

012を取得するために !%を変更

geisterfurz007

関連する問題