تمرير رمز يساوي في سلسلة

VBScript ليس حقا شيء بلدي ، ولكن وجود اشتغل.

أساسا لدي برنامج نصي الذي سوف ننظر في ملف نصي يحتوي على مجموعة من أسماء الجهاز ، ثم تحقق لمعرفة ما إذا كانت خدمة ما قيد التشغيل ، إذا توقفت عن ذلك وتعطيله ، إذا لم يتم تشغيل التحقق إذا تم تمكينه ثم تعطيله. تسجيل الخروج من حالة البداية وحالة النهاية.

محاولة تعزيز النص البرمجي لتكون قادرة على القيام بالعكس - أي: تمكين وبدء. سيتم تشغيل هذه من ويندوز مهمة مجدولة ، لذلك أراد أن يمر فقط في معلمة من يقول "على" أو "إيقاف"

شيء من هذا القبيل في الأعلى:

Function Toggle
    If UCase(WScript.Arguments(0)) = "ON" Then  states = "Running" End If 
    If UCase(WScript.Arguments(0)) = "OFF" Then  states =  "Running" End If 
    If UCase (WScript.Arguments(0)) = "ON" Then symbol = " = " End If
    If UCase (WScript.Arguments(0)) = "OFF" Then  symbol = " <> " End If 
End Function

ولكن عند محاولة استخدام هذه المقارنة لمقارنة حالة الخدمة باستخدام:

If InStr(objProcess.DisplayName,strService) > 0 And objProcess.State & symbol & states  Then Status = True 

خطأ وقت تشغيل Microsoft VBScript: Typemismatch: '[string: "Stopped = Running"]'

إذا قمت بالتعليق على متغير الرمز واستخدم رمز = ، تعمل المقارنة.

Is it possible to pass in = or <> into a string for comparison?

حاول استخدام cstr حول جميع المتغيرات ولكن هذا لم يحدث فرقًا.

0
مرحبًا ، نعم ، أعلم أن متغير الرمز هو العنصر المهم تمامًا لأنه سيتم استخدامه لتمرير ما إذا كان الشيك = أو <> قيد التشغيل. يمكن التفكير في طرق أخرى للقيام النصي ، كان يتساءل فقط لماذا لم يعمل هذا الأسلوب ، كما سيكون أقل الكتابة.
وأضاف المؤلف user3811820, مصدر
أنت تحاول تقييم سلسلة باعتبارها منطقية ( objProcess.State & symbol & states & /> ). & هو رمز تسلسل.
وأضاف المؤلف Paul, مصدر
أيضا ، في التعليمات البرمجية الخاصة بك أعلاه كنت قد حصلت على ON و OFF على أنها "قيد التشغيل".
وأضاف المؤلف Paul, مصدر

1 إجابة

إن سبب حصولك على هذه المشكلة ، كما هو موضح سابقًا ، هو أنك تحاول فعليًا تنفيذ عملية منطقية على سلسلة متسلسلة.

يمكنك الالتفاف حول هذا الطريقتين: الطريقة (تقريبا) الجيدة والطريقة الشريرة - اختيارك ...

جيد

اكتب معالج صغير لتقييم السلاسل ...

If symbol = "=" Then...

EVIL

(قد تغلي روحك في الجحيم للجميع الخلود ...)

لا تصدق الضجيج - إذا كنت تخطط بشكل صحيح وتنظيف السلاسل الخاصة بك بشكل صحيح يجب أن تكون على ما يرام.

Eval is the key, or, rather in VBScript's case, Execute.

كل ما عليك هو توخي الحذر الشديد - فهو مفتوح لإساءة الاستخدام .

also, your situation may not actually be suited to Execute. You may need to use the first or 'جيد' option above.

0
وأضاف
ابتهاج بول. أعتقد أنني سأستخدم فقط إجراءين منفصلين. واحد لإيقاف وتعطيل ، واحد لتمكين والتوقف - استنادا إلى معلمات سطر الأوامر. شكرا لأخذ الوقت لإظهار الخطأ في طرقي وحفظ لي بعض الجهد الضائع!
وأضاف المؤلف user3811820, مصدر
لا مشكلة على الإطلاق - نتمنى لك التوفيق.
وأضاف المؤلف Paul, مصدر