2014-11-15 13 views
6

değişkenini bulmakta bulunuyorum Birçok yerde çözümler bulmaya çalıştım ancak belirli bir cevap bulamadım.Yığınlama programı

Bir toplu iş komut dosyası oluşturuyorum. Aşağıdaki benim kodudur bugüne kadar

@echo off 
    SETLOCAL EnableDelayedExpansion 
    cls 
    for /f "delims=" %%a in ('rasdial EVDO cdma cdma') do set "ras=!ras! %%a" 

    findstr /C:"%ras%" "already" 

    if %errorlevel% == 0 
    (
     echo "it says he found the word already" 
    ) 
    else 
    (
     echo "it says he couldn't find the word already" 
    ) 

ÇIKIŞ: Ben değişken 'ras' de 'zaten' sözcüğü bulmaya çalışıyorum

FINDSTR: Cannot open already 
    The syntax of the command is incorrect. 

,

sorun gibi görünüyor findstr/C: "% ras%" "zaten"

Ben kullanarak çalıştı findstr "% ras%" "zaten" ama bu da çalışmıyor.

cevap

0

"Komutun sözdizimi yanlış." toplu komut satırında bulunmayan 'else' için raporlanır. İşte

findstr /c:"str" file 

str için

aranacak gerçek olmalıdır, ve dosya arama yapmak için dosya adıdır. Yani bu sizin ihtiyacınızı karşılamıyor.

Sanırım ihtiyacınız olan şey şudur.

rasdial EVDO cdma cdma | findstr already > NUL 

if %errorlevel% EQU 0 (
    echo "it says he found the word already" 
) 

if %errorlevel% NEQ 0 (
    echo "it says he couldn't find the word already" 
) 
1

Zaten ben birden durumlar için senaryo yazıyorum çünkü

rasdial EVDO cdma cdma | findstr already > NUL 

kullanamaz ..

echo %ras% | findstr "already" > nul 

ve @Karata çözüm buldu görünüyor ve ben saklamak istediğiniz Bir değişkede çıktı ... Yine de teşekkürler.

6

Kodunuzda iki sorun var.

Birincisi, findstr'un nasıl çalıştığıdır. Girdindeki her satır için, satırın belirtilen değişmez veya normal ifadeyi içerip içermediğini (veya değil) kontrol eder. Test edilecek giriş satırları bir dosyadan veya standart giriş akışından okunabilir, ancak komut satırındaki argümanlardan okunamaz. findstr komuta

echo %ras% | findstr /c:"already" >nul 

ikinci sorun haline hat borusu en kolay yolu if komut yazılır nasıl.Açılış parantezinin aynı satırda olması koşuluyla, else maddesinin ilk kapama parantezinin aynı satırda olması ve else maddesindeki açılış parantezinin else maddesinin aynı satırında olması gerekir (bkz. here) değişkeninde dize varlığını test etmek Ama

if condition (
    code 
) else (
    code 
) 

, değişkenin değeri ile aynı değere eşitse

if "%ras%"=="%ras:already=%" (
    echo already not found 
) else (
    echo already found 
) 

Bu test edecek yapmak daha kolaydır already dizesi hiçbir şekilde değiştirilmez.

Bilgi için: Değişken Düzenle/Değiştir görünüm here.

+0

Değiştirme ipi numarası çok akıllı! “Bul” ve benzeri tonlarca örnek gördüm, ama bu çok hızlı ve temiz ve anlaşılması kolay! – Gruber