2014-11-15 14 views
6

Tôi đã cố gắng tìm các giải pháp ở nhiều nơi nhưng không thể tìm thấy câu trả lời cụ thể.Hàng loạt chương trình tìm chuỗi trong biến

Tôi đang tạo tập lệnh theo lô. Sau đây là mã của tôi cho đến nay

@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" 
    ) 

OUTPUT:

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

Tôi đang cố gắng để tìm từ 'đã' vào biến 'ras',

Vấn đề có vẻ là in findstr/C: "% ras%" "đã"

Tôi đã thử sử dụng findstr "% ras%" "đã" nhưng điều đó cũng không hoạt động.

Trả lời

0

"Cú pháp của lệnh không chính xác". được báo cáo cho 'else', không tồn tại trong hàng loạt dòng lệnh.

Đối

findstr /c:"str" file 

Đây str thì sát nghĩa được tìm kiếm, và tập tin là tên tập tin để thực hiện tìm kiếm. Vì vậy, điều này không đáp ứng yêu cầu của bạn.

Tôi nghĩ sau đây là những gì bạn cần.

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

Có vẻ tôi đã tìm thấy các giải pháp ..

echo %ras% | findstr "already" > nul 

và @Karata tôi không thể sử dụng

rasdial EVDO cdma cdma | findstr already > NUL 

vì tôi đang viết kịch bản cho nhiều trường hợp và tôi muốn lưu trữ đầu ra trong một biến..Cảm ơn anyways.

6

Có hai vấn đề trong mã của bạn.

Cách đầu tiên là cách hoạt động của findstr. Đối với mỗi dòng trong đầu vào của nó, nó sẽ kiểm tra xem dòng có chứa (hay không) biểu thức bằng chữ hoặc cụm từ thông dụng được chỉ định. Các dòng đầu vào sẽ được kiểm tra có thể được đọc từ một tệp hoặc từ luồng đầu vào tiêu chuẩn, nhưng không phải từ các đối số trong dòng lệnh. Cách đơn giản nhất nó cho ống dòng vào findstr lệnh

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

Vấn đề thứ hai là cách lệnh if được viết.Dấu ngoặc đơn mở phải nằm trong cùng một dòng với điều kiện, mệnh đề else phải nằm trong cùng một dòng mà dấu ngoặc đơn đóng đầu tiên và dấu ngoặc đơn mở trong mệnh đề else phải nằm trong cùng một dòng với mệnh đề else (xem here)

if condition (
    code 
) else (
    code 
) 

Nhưng để kiểm tra sự hiện diện của chuỗi trong biến, nó là dễ dàng hơn để làm

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

này sẽ kiểm tra nếu giá trị trong biến là tương đương với giá trị tương tự với chuỗi already được thay thế bằng không có gì.

Để biết thông tin về Chỉnh sửa thay thế/thay thế xem here.

+0

Rất thông minh về mẹo thay thế chuỗi! Tôi đã nhìn thấy rất nhiều ví dụ với tấn 'find' và tương tự, nhưng điều này rất nhanh chóng và sạch sẽ, và dễ hiểu! – Gruber

Các vấn đề liên quan