2017-02-03 14 views
0

以下のバッチファイルは、srch文字列内のクエリ間にスペースを使用しないと完璧に動作します。スペースを追加すると、プログラムが飛び出して終了します。Findstrは変数入力のスペースが嫌いです。

@echo off 
mode con:cols=90 lines=40 
:top 
echo *******PHONE BOOK****** 
echo Press Q to quit 
echo. 
set /P srch=Enter Search query: 
IF /i %srch% EQU Q goto :end 
findstr /i %srch% %USERPROFILE%\documents\names.txt 
IF %ERRORLEVEL% EQU 1 goto :e1 
pause 
cls 
goto top 
pause 

:end 
set /p wate=Press any key to Quit 
exit 


:e1 
echo No match found edit names.txt in your documents folder. 
pause 
cls 
goto top 
exit 

PhoneQuery.bat

として保存

以下の保存ドキュメントフォルダ内の "names.txt" など。

Name    Address   Local   Phone# 
Bob Billings  123 here ST  St Paul MI 800-555-5555 
Information  nil    any   411 
Fire Dept   Multi    Dubai   +1-992-611-1212 
+0

'ます。findstr/i "の%SRCH%の" %USERPROFILE %\ documents \ names.txt' – Squashman

+1

ヘルプファイルはいくつかの素晴らしい例を示しています:**複数の検索文字列を区切るのに空白を使用しますntの先頭には/ Cが付きます。たとえば、 'FINDSTR "hello there" x.y'はx.yファイル内に "hello"または "there"を検索します。 'FINDSTR/C: "hello there" x.y'はx.yファイル内の "hello there"を検索します** – Squashman

答えて

1

あなたは単に読むためにあなたのfindstr行を変更することができる場合があります

findstr/IC:"%srch%" "%USERPROFILE%\documents\names.txt" 

Findを使用して代替:

find /I "%srch%"<"%USERPROFILE%\documents\names.txt" 
+0

私のコマンドを使用してそれを表示し、問題を再度説明するために、最初の投稿のスクリプトを更新してください。私のコマンドがコンソールで動作することを確認したので、それは明らかにあなたのスクリプトで問題があります。 – Compo

+0

書かれたスクリプトは、コマンドプロンプトで動作します。しかし、バッチファイルの中に置かれると、コマンドラインからバンプが出る。あなたの方法は悪いスイッチ "c:"で戻ってくる –

+0

** '/ L' **を落とす、私はコード内でそうした、さらにあなたは** findstr' **を落とすことを考えて、単に* * 'find/i"%srch% "' ** – Compo

関連する問題