CALL komutu ve / WAIT seçeneğiyle START


152

BEKLE seçeneğiyle BAŞLAT komutu nasıl

START /wait notepad.exe 
START /wait  notepad.exe 

... CALL komutunu kullanmaktan herhangi bir farkı var mı?

CALL notepad.exe 
CALL notepad.exe 

Birinin neyin yapıldığına bağlı olarak diğerinin farklı davranabileceği bir durum var mı?


Yanıtlar:


187

İçin exe dosyaları, ben farklılıklar neredeyse önemsizdir varsayalım.
Ama exe başlatmak için ihtiyacın bile yok CALL.

Başka bir parti başlatırken, aynı pencerede başlayacağı ve çağrılan grubun aynı değişken içeriğine erişebileceği
gibi CALL, bu büyük bir farktır .
Böylece arayan kişiyi etkileyen değişkenleri de değiştirebilir.

STARTçağrılan toplu iş için yeni bir cmd.exe oluşturacak ve / b olmadan yeni bir pencere açacaktır.
Yeni bir bağlam olduğu için değişkenler paylaşılamaz.

Farklılıklar

Kullanılmasıstart /wait <prog>
- zaman ortam değişkenleri değişiklikler kaybolur <prog>uçları
arayan bekler dek - <prog>bitmiş olduğunu

Kullanılmasıcall <prog>
- For exe sadece başlangıç eşit olduğu için bu, ommited edilebilir <prog>
- Bir İçin exe-prog arayan toplu bekler ya başlar exe uyumsuz, ama davranış bağlıdır exe kendisi.
- Toplu iş için dosyaları için, arayan grup devam eder, aranan işlem <batch-file>bittiğinde, arama OLMADAN kontrol, arayan gruba geri dönmez

Ek:

Kullanmak CALLparametreleri (toplu iş ve exe dosyaları için) değiştirebilir, ancak yalnızca düzeltme işaretleri veya yüzde işaretleri içerdiklerinde.

call myProg param1 param^^2 "param^3" %%path%%

Genişletilecek (bir toplu iş dosyası içinden)

myProg param1 param2 param^^3 <content of path>

25
START / WAIT kullanarak bir file.bat çalıştırırken sadece START / WAIT "file.bat" yerine START / WAIT cmd / c "file.bat" belirtmeniz gerekir, aksi takdirde file.bat için oluşturulan cmd penceresi açık kalacaktır
FrinkTheBrave

5
CALL ve START arasındaki karşılaştırmayı şu adreste bulabilirsiniz: ss64.com/nt/start.html (bugün "Başlat / Bekle" ve "BAŞLAT ve ÇAĞRI" bölümleriyle güncellendi)
Alfredo Capobianchi

Benim favorim, start /wait /b cmd /c <batchfile.bat>toplu iş dosyalarının aynı komut penceresinde birbiri ardına çalışmasıdır
linux64kb

@ linux64kb, Ancak toplu iş dosyaları için gerekli değil, sadece ihtiyacınız varcall batchfile.bat
19'19

@jeb True. Bunu tercih ediyorum çünkü her bir toplu iş dosyası farklı bir komut kabuğu ortamında çalışacak, değişkenleri çağıran kabuktan devralacak ve toplu iş bittikten sonra ilk değerlerde yapılan değişiklikler kaybolacak -> her ardışık çalıştırmadan sonra orada çöp kalmayacak. Diğer bir kazanç, komut dosyalarınızdaki değişkenleri sıfırlamakla uğraşmak zorunda olmamanızdır.
linux64kb

18

Genel olarak aynı performans göstermeleri gerektiğini düşünüyorum, ancak bazı farklılıklar var. STARTgenellikle uygulamaları başlatmak veya belirli bir dosya türü için varsayılan uygulamayı başlatmak için kullanılır. Eğer bu şekilde START http://mywebsite.como yapmaz START iexplore.exe http://mywebsite.com.

START myworddoc.docxMicrosoft Word'ü başlatır ve myworddoc.docx dosyasını açar. CALL myworddoc.docxaynı şeyi yapar ... ancak STARTpencere durumu ve bu nitelikteki şeyler için daha fazla seçenek sunar. Ayrıca işlem önceliğinin ve yakınlığın ayarlanmasına izin verir.

Kısacası, başlangıç ​​tarafından sağlanan ek seçenekler göz önüne alındığında, tercih ettiğiniz araç olmalıdır.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
B           Start application without creating a new window. The
            application has ^C handling ignored. Unless the application
            enables ^C processing, ^Break is the only way to interrupt
            the application.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node's processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.


8

Toplu iş dosyalarını paralel olarak çalıştırırken bulduğum şey bu (aynı bat dosyasının birden çok örneğini aynı anda farklı girdi parametreleriyle):

LongRunningTask.exe adlı uzun bir görevi gerçekleştiren bir exe dosyanız olduğunu varsayalım.

Exe'yi doğrudan bat dosyasından çağırırsanız, yalnızca LongRunningTask'a yapılan ilk çağrı başarılı olurken geri kalanı bir işletim sistemi hatası alır "Dosya zaten işlem tarafından kullanılıyor"

Bu komutu kullanırsanız:

başlat / B / WAIT "" "LongRunningTask.exe" "parametreler"

Yarasa kalan komutları yürütmeye devam etmeden önce görevin bitmesini beklerken, yarasa ve exe'nin birden çok örneğini çalıştırabileceksiniz. / B seçeneği, başka bir pencere oluşturmaktan kaçınmaktır, komutun çalışması için boş tırnak işaretleri gereklidir, aşağıdaki referansa bakın.

Başlangıçta / WAIT öğesini kullanmazsanız, LongRunningTask'ın toplu iş dosyasında kalan komutlarla aynı anda yürütüleceğini ve bu komutlardan birinin LongRunningTask çıktısını gerektirmesi durumunda sorun yaratabileceğini unutmayın.

Devam ettiriliyor:

Bu paralel çalışamaz:

  • LongRunningTask.exe'yi çağırın

Bu paralel olarak çalışacak ve komutun çıktısı ile bat dosyasının geri kalanı arasında veri bağımlılığı olmadığı sürece uygun olacaktır:

  • start / B "" "LongRunningTask.exe" "parametreleri"

Bu paralel olarak çalışacak ve görevin bitmesini bekleyecektir, böylece çıktıyı kullanabilirsiniz:

  • başlat / B / WAIT "" "LongRunningTask.exe" "parametreler"

Start komutu için referans: Program başladıktan sonra konsolu açık bırakmadan bir toplu iş dosyasından bir programı nasıl çalıştırabilirim?


6

Aramak

Ana toplu iş programını durdurmadan bir toplu iş programını diğerinden çağırır. Call komutu, etiketleri çağrının hedefi olarak kabul eder. Bir komut dosyası veya toplu iş dosyasının dışında kullanıldığında, çağrının komut satırında hiçbir etkisi yoktur. https://technet.microsoft.com/en-us/library/bb490873.aspx

Başlat

Belirli bir programı veya komutu çalıştırmak için ayrı bir Komut İstemi penceresi başlatır . Start parametresiz kullanıldığında ikinci bir komut istemi penceresi açar. https://technet.microsoft.com/en-us/library/bb491005.aspx


-1

Bu eski bir konu, ancak bu durumla yeni karşılaştım ve etrafında düzgün bir yol keşfettim. Bir setup.exe'yi çalıştırmaya çalışıyordum, ancak odak, setup.exe'nin bitmesini beklemeden komut dosyasının sonraki satırına dönüyordu. Yukarıdaki çözümleri şanssız denedim.

Sonunda, komutu daha fazla yönlendirmek hile yaptı.

setup.exe {bağımsız değişkenler} | Daha

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.