2012-11-06 10 views
100

Come è il comando di START con un'opzione WAITCALL vs. AVVIO opzione/WAIT con

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

... diverso da utilizzando un comando CALL?

CALL notepad.exe 
CALL notepad.exe 

C'è una situazione in cui si può comportarsi in modo diverso che l'altro dipende da ciò che viene eseguito?

+1

Date un'occhiata a https://technet.microsoft.com/en-us/library/bb491005.aspx è di circa START e https: //technet.microsoft.com/en-us/library/bb490873.aspx è su CALL –

risposta

117

Per i file exe, suppongo che le differenze siano quasi irrilevanti.
Ma per iniziare un exe non hai nemmeno bisogno di CHIAMATA.

All'avvio altro lotto è una grande differenza,
come CALL inizierà nella stessa finestra e la chiamata lotto ha accesso allo stesso contesto variabile.
Quindi può anche modificare le variabili che riguardano il chiamante.

START creerà un nuovo cmd.exe per il batch chiamato e senza/b verrà aperta una nuova finestra.
Dato che si tratta di un nuovo contesto, le variabili non possono essere condivise.

Addendum:
Utilizzando CALL può cambiare i parametri (per i file exe batch e), ma solo quando contengono segni di omissione o di segni di percentuale.

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

sarà ampliato a (all'interno di un file batch)

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

Quando si esegue un file.bat utilizzando START/WAIT è necessario specificare START/WAIT cmd/c "file.bat" anziché solo START/WAIT "file.bat", altrimenti la finestra cmd creata per file.bat rimarrà aperto – FrinkTheBrave

+3

È possibile trovare il confronto tra CALL e a partire da: https://ss64.com/nt/start.html (aggiornato oggi con sectio ns "Start/Wait" e "START vs CALL") –

10

Credo che dovrebbero svolgere in genere lo stesso, ma ci sono alcune differenze. START viene generalmente utilizzato per avviare le applicazioni o per avviare l'applicazione predefinita per un determinato tipo di file. In questo modo se non hai START http://mywebsite.com non lo fa START iexplore.exe http://mywebsite.com.

START myworddoc.docx avvia Microsoft Word e apre myworddoc.docx. CALL myworddoc.docx fa la stessa cosa ... tuttavia START fornisce più opzioni per lo stato della finestra e cose di quella natura. Consente inoltre di impostare la priorità e l'affinità del processo.

In breve, date le opzioni aggiuntive fornite da start, dovrebbe essere il vostro strumento di scelta.

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. 
5

C'è una differenza utile fra call e start /wait quando si chiama regsvr32.exe /s per esempio, si fa riferimento anche da Gary in nella sua risposta a how-do-i-get-the-application-exit-code-from-a-windows-command-line

call regsvr32.exe /s broken.dll 
echo %errorlevel% 

restituirà sempre 0, ma

start /wait regsvr32.exe /s broken.dll 
echo %errorlevel% 

restituirà il livello di errore da regsvr32.exe

3

chiamata

Richiama un programma batch da un altro senza arrestare il programma principale batch. Il comando di chiamata accetta le etichette come destinazione della chiamata. La chiamata non ha alcun effetto sulla riga di comando quando viene usata al di fuori di uno script o di un file batch. https://technet.microsoft.com/en-us/library/bb490873.aspx

Inizio

Avvia un comando separato finestra del prompt dei per eseguire un programma o un comando specifico. Utilizzato senza parametri, avvia una seconda finestra del prompt dei comandi. https://technet.microsoft.com/en-us/library/bb491005.aspx

1

Questo è quello che ho trovato durante l'esecuzione di file batch in parallelo (più istanze dello stesso file bat allo stesso tempo con diversi parametri di input):

Diciamo che si dispone di un file exe che esegue una lungo lavoro chiamato LongRunningTask.exe

Se si chiama l'exe direttamente dal file bat, solo la prima chiamata al LongRunningTask si succed, mentre il resto sarà un errore del sistema operativo "il file è già in uso dal processo"

Se si utilizza questo comando:

start/B/WAIT "" "" "LongRunningTask.exe parametri"

Sarete in grado di eseguire più istanze del pipistrello e exe, mentre ancora in attesa che il compito di terminare prima che il pipistrello continui a eseguire i restanti comandi. L'opzione/B è per evitare di creare un'altra finestra, le virgolette vuote sono necessarie per il comando per funzionare, vedere il riferimento sotto.

Si noti che se non si utilizza/WAIT all'inizio, LongRunningTask verrà eseguito contemporaneamente ai restanti comandi nel file batch, quindi potrebbe creare problemi se uno di questi comandi richiede l'output del LongRunningTask

Ripresa:

Questa corsa CAN NOT in parallelo:

  • chiamata LongRunningTask.exe

Questo sarà eseguito in parallelo e sarà ok per quanto non ci sono dipendenze di dati tra l'output del comando e il resto del file bat:

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

Questo verrà eseguito in parallelo e attendere che il compito di finire, in modo da poter utilizzare l'uscita:

  • start/B/WAIT """ LongRunningTask.exe" "parametri"

di riferimento per il comando di avvio: How can I run a program from a batch file without leaving the console open after the program start?