تعيين متغير إلى نتيجة "البحث" في دفعة الملف

StackOverflow https://stackoverflow.com/questions/831122

  •  06-07-2019
  •  | 
  •  

سؤال

أود أن تعيين متغير بناء على عدد الخطوط في الملف التي تحتوي على إعطاء السلسلة.

شيء من هذا القبيل:

set isComplete = 0
%isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG"
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure"

أو:

set isComplete = 0
find /c /i "Transfer Complete" "C:\ftp.LOG" | %isComplete%
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure"

لم يكن أي من هذه الخيارات تعمل الواضح.

شكرا

هل كانت مفيدة؟

المحلول

ومن سطر الأوامر

for /f "tokens=3" %f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%f 

ومن البرنامج النصي دفعة

for /f "tokens=3" %%f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%%f 

نصائح أخرى

أنت لا تحتاج إلى استخدام for الأمر ؛ find سيتم تعيين ERRORLEVEL إلى واحدة من هذه القيم ، استنادا إلى النتيجة:

  • 0, مباراة واحدة على الأقل وجد.
  • 1, لا يطابق وجدت.
  • 2 أو أكثر ، حدث خطأ.

يبدو أنك فقط تريد أن ترى إذا كان نقل الانتهاء ، وليس إجمالي عدد مرات السلسلة يظهر ، يمكنك أن تفعل شيئا مثل هذا:

@echo OFF

@find /c /i "Transfer Complete" "C:\test path\ftp.LOG" > NUL
if %ERRORLEVEL% EQU 0 (
    @echo Success
) else (
    @echo Failure
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top