it-swarm-tr.com

Penceresiz zamanlanmış bir görevde bir .bat dosyası çalıştırın

Her saat robocopy çalıştıran bir toplu iş komut dosyası başlatan zamanlanmış bir görevim var. Her seferinde masaüstünde, gerçekten görmek istemediğim robocopy çıktısıyla bir pencere açılır.

Zamanlanan işi çalıştırarak pencereyi simge durumuna küçültmeyi başardım

cmd /c start /min mybat.bat

ama bu bana her saat başı yeni bir komut penceresi veriyor. _ Beni şaşırttı, cmd /c "Dize tarafından belirtilen komutu yerine getirir ve sonra sonlandırır" - Belgeleri yanlış anlamış olmalıyım.

Bir toplu komut dosyasını bir cmd penceresi açmadan çalıştırmanın bir yolu var mı?

144
Tom Dunham

Bunun yerine bir Windows Script dosyası kullanarak sessizce çalıştırabilirsiniz. Çalıştırma Yöntemi bir komut dosyasını görünmez modda çalıştırmanıza olanak tanır. Oluşturmak .vbs dosya bunun gibi

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

ve planlayın. Bu örnekteki ikinci argüman pencere stilini ayarlar. 0 "pencereyi gizle" anlamına gelir.

Run yöntemi ifadesinin tam sözdizimi:

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

Bağımsız değişkenler:

  • object: WshShell nesnesi.
  • strCommand: Çalıştırmak istediğiniz komut satırını gösteren dize değeri. Yürütülebilir dosyaya iletmek istediğiniz parametreleri eklemeniz gerekir.
  • intWindowStyle: İsteğe bağlı. Program penceresinin görünümünü gösteren tamsayı değeri. Tüm programların bu bilgileri kullanmadığını unutmayın.
  • bWaitOnReturn: İsteğe bağlı. Komut dosyasındaki bir sonraki ifadeye devam etmeden önce komut dosyasının programın yürütülmesini bitirmesini bekleyip beklemeyeceğini gösteren Boolean değeri. True olarak ayarlanırsa, komut dosyası yürütme program bitene kadar durur ve Çalıştır program tarafından döndürülen hata kodlarını döndürür. False (varsayılan) olarak ayarlanırsa, Çalıştır yöntemi programı başlattıktan hemen sonra otomatik olarak 0 döndürür (hata kodu olarak yorumlanmamalıdır).
145
splattne

Bunu zamanlanmış bir görev olarak mı kullanıyorsunuz? Bu durumda farklı bir kullanıcı hesabı olarak çalışacak şekilde ayarlayın, o zaman oturum açan kullanıcı tarafından görülemez. Komut dosyasının, Windows kimlik doğrulaması gerektiren öğelere (dosya paylaşımları veya yazıcılar gibi) ağ erişimi gerektirmiyorsa, bunu "nt authority\system" olarak çalıştırabilir ve parolayı boş bırakabilirsiniz. Windows 7'de kullanıcıyı SİSTEM olarak ayarlayın ve Tamam'a basın.

(Robocopy kullanıyorsanız muhtemelen gerçek bir kullanıcı kullanmalısınız ...)

JR

59
John Rennie

Zamanlanmış Görevi "Kullanıcının oturum açmış olup olmadığını çalıştır" olarak yapılandırmanız yeterlidir.

29
Peter Meinl

Ayrıca deneyebilirsiniz CHP (Gizli işlem oluştur) , tam olarak düşündüğünüzü yapar ...

CHP.EXE mybat.bat

Komut penceresi olmadan çalışır. Mükemmel! CMDOW ile aynı kişiler tarafından yapılmıştır, ancak bu daha uygundur.

18
rocketmonkeys

CMDOW , komut satırından pencerelere birçok, çok şey yapmanıza izin veren harika bir araçtır.

Yapılacak en basit şeylerden biri, geçerli pencereyi (genellikle yarasa dosyasında ilk satır olarak) gizlemektir:

cmdow @ /hid

veya ile yeni bir gizli işlem başlatın

cmdow /run /hid mybat.bat 
9
itsadok

Komut dosyasını şununla çağırmayı deneyin:

start /b <command>
5
rashfeather

Toplu iş dosyası için bir kısayol oluşturabilir, kısayolu simge durumuna küçültülecek şekilde ayarlayabilir (kısayolun özellikleri, 'Kısayol' sekmesinde) ve ardından işi kısayolu başlatacak şekilde ayarlayabilirsiniz.

Önemli: Kısayolun yolunu, '.lnk' uzantısıyla birlikte Çalıştır metin alanına yazarak manuel olarak belirtmeniz gerekir; sadece göz atmaya çalışırsanız, yardımcı olarak kısayolun işaret ettiği yere kendini yönlendirecektir.

5
Doug Kavendek

Bu sorunun zaten Windows'a özgü mükemmel bir çözünürlükle yanıtlandığını ve bu nedenle en uyumlu olması gerektiğini anlıyorum ve tamamen katılıyorum.

Ayrıca @ splattne yorum (ama onun gerçek cevabı değil) - katılmıyorum söylemek istedim - diğer başvurulan iş parçacığı çözünürlük kredi hak ediyor. Bu yanıt, komut dosyasının farklı bir kullanıcı (SYSTEM) olarak çalıştırılmasını içerir, bu da komut dosyası kök erişimine eşittir. Ayrıca ağ erişimi gerektiren ROBOCOPY (John Rennie tarafından referans verildiği gibi) gibi işler için de başarısız olacaktır.

Daha önce hiç CMDOW denemedim, ancak [Windows'ta yerel olarak yüklü olmasa da] yine de çoğu sürüm için son derece taşınabilir olan ve hem 32 hem de 64- bit sürümleri ve bu NirCmd .

NirCmd sayısız seçenek içeren çok güçlü bir araçtır, en faydalı olanı, kişisel olarak aşağıdakileri uygulayarak gizli komut pencerelerini başlatma yeteneği olduğunu düşünüyorum:

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

NirCmd Komut Başvurusu 'nun exec bölümünden:

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

Bir uygulama çalıştırır ve isteğe bağlı olarak yürütülen uygulama için bir veya daha fazla komut satırı parametresi belirtir. [Show/ hide /dak/max] parametresi çalışan uygulamanın görünür olup olmayacağını belirtir. 'Hide' belirtilirse, çalışan uygulama kullanıcı tarafından görülmez. 'max' belirtilirse, çalışan uygulama penceresi büyütülür. 'Min' belirtilirse, çalışan uygulama penceresi simge durumuna küçültülür.

DÜZENLEME: Bir ROBOCOPY işini çalıştırmaya çalışıyordum ve bu cevapta yöntemi denedim ve düzenledikten sonra bile çalışmadı ağ erişim ayrıcalıkları. Komut dosyasına çift tıklamayı denedim ve işe yaramadım, ancak yalnızca yükseltilmiş bir komut İstemi altında çalıştırabiliyordum. Toplu iş dosyasına bir kısayol oluşturdum ve Yönetici olarak çalıştırmasını sağladım ve çift tıklatarak çalıştırılmasını sağlayabildim, ancak devam ettiğim yöntem SİSTEM olarak gizli çalıştırmaktı (biliyorum, biliyorum) - ancak toplu iş dosyası doğru izinlere sahip olduğu sürece değeri için ROBOCOPY ile çalışır.

DÜZENLEME 2: Nedense, SİSTEM (muhtemelen daha önce atıfta bulunulan ağ erişim şey) olarak işe yaramaz - Sadece bunu gerçekten çalıştırdıktan sonra fark ettim ROBOCOPY/L bayrağı olmadan, bu sadece bir simülasyon ve [görünüşte] aslında uzak sisteme bağlanmaz, ancak toplu iş dosyasını en yüksek ayrıcalıklarla çalıştırdığımda ve gizli kutuyu işaretlediğimde hala kimseye değer ne olursa olsun, bir komut penceresi göstermeden arka planda oturum açmış kullanıcı olarak çalıştırın.

1
rubynorails

Kullandığım başka bir çözüm Gizli Başlangıç

0
SteveC