سؤال قم بتشغيل ملف .bat في مهمة مجدولة بدون إطار


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

تمكنت من جعل النافذة تظهر إلى الحد الأدنى من خلال جعل المهمة المجدولة قيد التشغيل

cmd /c start /min mybat.bat

ولكن هذا يعطيني نافذة أوامر جديدة كل ساعة. فوجئت بهذا ، معطى cmd /c "ينفذ الأمر المحدد بواسطة السلسلة ثم ينهي" - يجب أن أكون قد أساءت فهم المستندات.

هل هناك طريقة لتشغيل برنامج نصي دفعة دون أن تظهر نافذة كمد؟


140
2018-05-17 09:00


الأصل


لقد وجدت هذه الإجابة أكثر تفضيلاً stackoverflow.com/questions/6568736/... - Efekt


الأجوبة:


يمكنك تشغيلها بصمت باستخدام ملف Windows Script بدلاً من ذلك. تتيح لك "طريقة التشغيل" تشغيل برنامج نصي في الوضع غير المرئي. إنشاء .vbs ملف مثل هذا واحد

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

وجدولة ذلك. تعيّن الوسيطة الثانية في هذا المثال نمط الإطار. 0 تعني "إخفاء النافذة".

بناء جملة كاملة طريقة التشغيل:

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

الحجج:

  • الكائن: كائن WshShell.
  • strCommand: تشير قيمة السلسلة إلى سطر الأوامر الذي تريد تشغيله. يجب عليك تضمين أي معلمات تريد تمريرها إلى الملف القابل للتنفيذ.
  • intWindowStyle: اختياري. القيمة الصحيحة تشير إلى مظهر نافذة البرنامج. لاحظ أنه ليس كل البرامج تستخدم هذه المعلومات.
  • bWaitOnReturn: اختياري. تشير القيمة المنطقية إلى ما إذا كان يجب أن ينتظر البرنامج النصي حتى ينتهي البرنامج من التنفيذ قبل المتابعة إلى العبارة التالية في النص البرمجي. في حالة التعيين على true ، يتوقف تنفيذ البرنامج النصي حتى ينتهي البرنامج ، ويقوم Run بإرجاع أي رمز خطأ يتم إرجاعه بواسطة البرنامج. إذا تم تعيينها على false (الافتراضي) ، ترجع طريقة Run مباشرة بعد بدء البرنامج ، حيث تقوم تلقائيًا بإرجاع 0 (لا يتم تفسيره على أنه رمز خطأ).

142
2018-05-17 09:08



+1 ، فقط كتبت بالضبط نفس الشيء - Sam Cogan
لقد رأيت ذلك قبل حذفه. أعتقد أننا كلتا الروبوتات. ؛-) - splattne
اسم المستخدم ، وأعتقد بصدق أن سام يستحق ذلك أكثر مني بكثير. لكن شكرا لك على أي حال! ولا يذكرونني وجون سكيت في نفس الجملة. هذا التجديف! ؛-) - splattne
إلى السؤال "هل هناك طريقة لتشغيل برنامج نصي دفعي دون أن تظهر نافذة cmd؟" ، فإنه يعطي إجابة مباشرة جداً: تشغيله باستخدام ملف Windows Script. - Mark Meuer
Lee أعتقد أن علامات الاقتباس المزدوجة ضرورية إذا كان مسارك يحتوي على مسافات. - splattne


هل تقوم بتشغيل هذا كمهمة مجدولة؟ إذا تم ضبطه بحيث يتم تشغيله كحساب مستخدم مختلف ، فلن يكون مرئيًا للمستخدم الذي قام بتسجيل الدخول. إذا كان البرنامج النصي لا يحتاج إلى الوصول إلى الشبكة إلى العناصر التي تحتاج إلى مصادقة Windows (مثل مشاركات الملفات أو الطابعات) ، فيمكنك تشغيلها كـ "nt authority \ system" وترك كلمة المرور فارغة. على نظام التشغيل Windows 7 ، قم فقط بتعيين المستخدم إلى SYSTEM ، واضغط على OK.

(ربما يتعين عليك استخدام مستخدم حقيقي على الرغم من أنك تستخدم نسخة احتياطية من ...)

JR


56
2018-05-17 09:13



شكرا - كان هذا أقل من المتاعب بالنسبة لي من الخيار .vbs. - mackenir
أنا وضعت المستخدم "تشغيل ك" إلى النظام (الذي تغير في وقت لاحق س NT AUTHORITY \ SYSTEM) وعملت بالنسبة لي. لم أعد أرى نافذة CMD المنبثقة عند تشغيل مهمتي المجدولة. شكر! - Ryan Stille
+1 ، هذا أنيق. تأكد من إدخال "النظام" كاسم المستخدم ، ثم WIN7 يقوم بالباقي لك. لاحظ أنك تحصل على الوصول إلى شبكة الإنترنت ، وليس فقط لمشاركة الشبكة والأشياء التي تحتاج إلى مصادقة النوافذ. - samsmith
مستخدم النظام بسيط وأنيق ، نصيحة رائعة! +1! - Matteo Conta
نرى تنفيذ نماذج إدارية ذات امتياز على الأقل. هل استخدام حساب النظام لهذا انتهاك لسياسات الامتياز أقل؟ إذا كان الأمر كذلك ، فيجب أن يعرف المسؤولون ذلك ليس القيام بذلك في معظم الحالات. - user34660


ببساطة قم بتكوين المهمة المجدولة على أنها "تشغيل ما إذا كان المستخدم قد قام بتسجيل الدخول أم لا".


28
2017-10-04 20:06



في احسن الاحوال! يمكنك حتى تعطيل تخزين الاعتماد ثم ينتهي الأمر بأن يكون أكثر أمانا من تشغيل النظام! - binki


يمكنك أيضا المحاولة CHP (إنشاء عملية مخفية)، يفعل بالضبط ما كنت اعتقد ...

CHP.EXE mybat.bat

يعمل مع عدم وجود نافذة الأوامر. في احسن الاحوال! مصنوعة من قبل نفس الأشخاص مثل CMDOW ، ولكن هذا هو أكثر ملاءمة.


17
2017-07-20 21:54



يعمل بشكل مثالي عندما تحتاج إلى تشغيل المهمة في سياق المستخدم الذي قام بتسجيل الدخول ("Trigger: on connect to user session"، "Run task as: Users") - Sergei
هذه ليست أداة مضمنة - Jonny Leeds


CMDOW هي أداة أوسم تسمح لك بالعديد من الأشياء إلى windows من سطر الأوامر.

واحد من أبسط الأشياء للقيام به هو إخفاء النافذة الحالية (عادة كخط أول في ملف bat) مع:

cmdow @ /hid

أو بدء عملية خفية جديدة مع

cmdow /run /hid mybat.bat 

9
2018-05-17 11:30



يتضمن هذا الاقتراح واقتراح Rocketmonkeys تحميل أدوات جديدة ، مما يعني المزيد من التوافق على أجهزة الكمبيوتر المكتبية المختلفة. خبز في ، باستخدام أوامر windows هو أفضل بكثير. - IanVaughan
بالإضافة إلى ذلك ، يتم الكشف عن cmdo بأنها "خطرة" من قبل بعض برامج مكافحة الفيروسات (إنها ليس خطرة ، ولكن يمكن للاكتشاف نفسه يسبب بعض المشاكل إذا تم عزل ملف cmdow ...). - Otiel
لا يزال هناك وحدة منبثقة ، فقط فلاش سريع جدا. - Bamboo


حاول استدعاء البرنامج النصي مع

start /b <command>

5
2018-05-17 14:54



هذا لا يعمل ، تنص المهمة المجدولة> الحالة "تعذر بدء" ، هذا مع: start / b C: \ file.bat: و: start / b "C: \ file.bat": لكن: C: \ file.bat: يعمل على ما يرام. - IanVaughan
لان start ليس برنامجًا ، إنه أمر. عليك أن تحدد cmd مثل البرنامج لتشغيل و /c start /b <file> كما الحجة. ومع ذلك ، هذا مازال لن يعمل لأنه سيظل إنشاء إطار وحدة تحكم لـ cmd وامض نافذة سوداء على الشاشة. - Synetech
يمكنك أيضًا التأكيد معSynetech على أن هذا لن يؤدي إلى إنشاء نافذة جديدة ، ولكنك لا تزال بحاجة إلى فتح نافذة وحدة التحكم لبدء تشغيلها. هذا بالفعل أمر مفيد ، ولكن لا يمكن استخدامه كما هو مطلوب مع المهام المجدولة. - JonathanDavidArndt


يمكنك إنشاء اختصار لملف الدفعات ، وتعيين الاختصار لبدء التصغير (في خصائص الاختصار ، علامة التبويب "اختصار") ، ثم تعيين المهمة لبدء الاختصار.

مهم: ستحتاج إلى تحديد المسار إلى الاختصار يدويًا عن طريق كتابته في حقل النص "تشغيل" ، مع استكمال الامتداد ".lnk" ؛ إذا كنت مجرد محاولة لتصفح ، وسوف مفيد إعادة توجيه نفسها إلى ما يشير إلى الاختصار.


5
2017-08-11 16:49



هذا لا يعمل على نظام التشغيل Windows 10 x64 ، وهذا يعطي نافذة منبثقة "كيف تريد فتح هذا الملف؟" - Jan


أدرك أن هذا السؤال قد تمت الإجابة عليه بالفعل من خلال دقة جيدة تمامًا تكون أصلية في Windows وبالتالي يجب أن تكون أكثر توافقًا ، وأوافق تمامًا.

وأردت أيضًا أن أقول إنني لا أوافق على تعليق @ splattne (ولكن ليس إجابته الفعلية) - أن القرار في الخيط المشار إليه الآخر يستحق التقدير. تتضمن هذه الإجابة تشغيل البرنامج النصي كمستخدم مختلف (SYSTEM) ، وهو ما يعادل إلى حد كبير منح الوصول إلى جذر البرنامج النصي. وسوف تفشل أيضا لوظائف مثل ROBOCOPY (كما أشار إليه John Rennie) ، والتي تتطلب الوصول إلى الشبكة.

انا لم احاول ابدا CMDOW من قبل ، لكني أود تقديم حل مشابه آخر ، والذي [على الرغم من عدم تثبيته أصلاً على نظام التشغيل Windows] لا يزال قابلاً للنقل إلى معظم الإصدارات ، ويأتي في نسختين 32 و 64 بت ، وهذا NirCmd.

NirCmd هي أداة قوية للغاية تحتوي على عدد لا يحصى من الخيارات ، وأكثرها فائدة ، وأنا شخصياً أجد قدرتها على تشغيل نوافذ الأوامر المخفية ببساطة عن طريق تنفيذ ما يلي:

c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"

من exec قسم من مرجع الأمر NirCmd:

exec [show/hide/min/max] [application + command-line]

لتشغيل تطبيق ، وتحديد اختياري واحد أو أكثر من معلمات سطر الأوامر للتطبيق الذي تم تنفيذه. العرض/إخفاء/ min / max] المعلمة يحدد ما إذا كان التطبيق قيد التشغيل سيكون مرئيًا أم لا. إذا تم تحديد "إخفاء" ، فلن يكون التطبيق قيد التشغيل مرئيًا للمستخدم. إذا تم تحديد "max" ، فسيتم تكبير نافذة التطبيق قيد التشغيل. إذا تم تحديد "min" ، فسيتم تصغير نافذة التطبيق قيد التشغيل.

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

تعديل 2: لسبب ما ، فإنه لن يعمل كما SYSTEM (ربما شيء الوصول إلى الشبكة المشار إليها في وقت سابق) - أنا فقط لاحظت هذا بعد تشغيلها في الواقع ROBOCOPY بدون علامة / L ، والتي هي في الأساس مجرد محاكاة و [على ما يبدو] لا تتصل فعليًا بالنظام البعيد ، ولكن عند تشغيل ملف الدُفعات بأعلى الامتيازات وتحقق من المربع المخفي ، ولا يزال بإمكاني تشغيله باعتباره تسجيل الدخول مستخدم في الخلفية دون نافذة الأوامر تظهر ، على كل ما يستحق هذا لأي شخص.


1
2018-05-01 03:38





حل آخر لقد استعملت هو بداية خفية


0
2017-07-01 07:38





حاول وضع أمر خروج في نهاية ملف الدُفعات الخاص بك. هذا يجب إغلاق إطار الأوامر عند الانتهاء من البرنامج النصي.


-2
2017-08-13 11:58





لإخفاء الإخراج (على الرغم من عدم وجود الإطار) ، أضف هذا إلى بداية الملف الدفعي الخاص بك:

@echo off

-2
2017-09-01 16:01