Lệnh CALL so với START với tùy chọn / WAIT


149

Lệnh START với tùy chọn WAIT như thế nào

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

... có gì khác với việc sử dụng lệnh CALL không?

CALL notepad.exe 
CALL notepad.exe 

Có một tình huống mà một người có thể cư xử khác nhau mà người kia phụ thuộc vào những gì đang được thực hiện?


Câu trả lời:


183

Đối với các tệp exe , tôi cho rằng sự khác biệt gần như không quan trọng.
Nhưng để bắt đầu một exe bạn thậm chí không cần CALL.

Khi bắt đầu một đợt khác, đó là một sự khác biệt lớn,
CALLsẽ bắt đầu nó trong cùng một cửa sổ và lô được gọi có quyền truy cập vào cùng một bối cảnh biến.
Vì vậy, nó cũng có thể thay đổi các biến ảnh hưởng đến người gọi.

STARTsẽ tạo một cmd.exe mới cho lô được gọi và không có / b, nó sẽ mở một cửa sổ mới.
Vì đó là một bối cảnh mới, các biến không thể được chia sẻ.

Sự khác biệt

Sử dụngstart /wait <prog>
- Thay đổi các biến môi trường bị mất khi <prog>kết thúc
- Người gọi chờ cho đến khi <prog>kết thúc

Sử dụngcall <prog>
- Đối với exe, nó có thể được sử dụng, bởi vì nó chỉ bằng việc bắt đầu <prog>
- Đối với một exe-prog , lô người gọi chờ hoặc bắt đầu exe không đồng bộ, nhưng hành vi phụ thuộc vào chính exe .
- Đối với hàng loạt tác phẩm, lô gọi tiếp tục, khi gọi <batch-file>kết thúc, KHÔNG gọi sự kiểm soát sẽ không quay trở lại hàng loạt người gọi

Phụ lục:

Việc sử dụng CALLcó thể thay đổi các tham số (đối với các tệp bó và exe), nhưng chỉ khi chúng chứa dấu mũ hoặc dấu phần trăm.

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

Sẽ được mở rộng thành (từ trong một tệp bó)

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

25
Khi thực thi file.bat bằng START / WAIT, bạn cần chỉ định START / WAIT cmd / c "file.bat" thay vì chỉ START / WAIT "file.bat", nếu không, cửa sổ cmd được tạo cho file.bat sẽ vẫn mở
FrinkTheBrave 30/03/2015

5
Bạn có thể tìm thấy sự so sánh giữa CALL và START tại: ss64.com/nt/start.html (được cập nhật hôm nay với các phần "Bắt đầu / Chờ" và "START vs CALL")
Alfredo Capobianchi

Sở thích của tôi là start /wait /b cmd /c <batchfile.bat>vì các tệp bó chạy lần lượt trong cùng một cửa sổ lệnh
linux64kb

@ linux64kb, Nhưng đối với các tập tin batch nó không cần thiết, bạn chỉ cầncall batchfile.bat
Jeb

@jeb Đúng. Tôi thích cái này hơn vì mỗi tệp bó sẽ chạy trong môi trường lệnh shell khác nhau, kế thừa các biến từ vỏ gọi và thay đổi giá trị ban đầu sẽ bị mất sau khi lô kết thúc -> không còn rác ở đó sau mỗi lần chạy liên tiếp. Một chiến thắng khác là, bạn không phải đối phó với việc đặt lại các biến trong tập lệnh của mình.
linux64kb

17

Tôi nghĩ rằng họ nên thực hiện giống nhau, nhưng có một số khác biệt. STARTthường được sử dụng để khởi động ứng dụng hoặc khởi động ứng dụng mặc định cho một loại tệp nhất định. Theo cách đó, nếu bạn START http://mywebsite.comkhông làm START iexplore.exe http://mywebsite.com.

START myworddoc.docxsẽ khởi động Microsoft Word và mở myworddoc.docx. CALL myworddoc.docxthực hiện điều tương tự ... tuy nhiên STARTcung cấp nhiều tùy chọn hơn cho trạng thái cửa sổ và những thứ thuộc về bản chất đó. Nó cũng cho phép ưu tiên quá trình và mối quan hệ được thiết lập.

Nói tóm lại, với các tùy chọn bổ sung được cung cấp khi bắt đầu, nó sẽ là công cụ bạn chọn.

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.

11

Có một sự khác biệt hữu ích giữa callstart /waitkhi gọi regsvr32.exe /sví dụ, cũng được Gary tham khảo trong câu trả lời của mình về how-do-i-get-the-application-exit-code-from-a-windows-Command-line

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

sẽ luôn trả về 0 nhưng

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

sẽ trả về mức độ lỗi từ.


8

Đây là những gì tôi tìm thấy khi chạy các tệp bó song song (nhiều phiên bản của cùng một tệp bat cùng một lúc với các tham số đầu vào khác nhau):

Hãy nói rằng bạn có một tệp exe thực hiện một tác vụ dài gọi là LongRastyTask.exe

Nếu bạn gọi exe trực tiếp từ tệp bat, chỉ có cuộc gọi đầu tiên đến LongRastyTask sẽ bị hủy, trong khi phần còn lại sẽ gặp lỗi hệ điều hành "Tệp đã được quá trình sử dụng"

Nếu bạn sử dụng lệnh này:

bắt đầu / B / WAIT "" "LongRastyTask.exe" "tham số"

Bạn sẽ có thể chạy nhiều phiên bản của bat và exe, trong khi vẫn chờ tác vụ kết thúc trước khi bat tiếp tục thực hiện các lệnh còn lại. Tùy chọn / B là để tránh tạo một cửa sổ khác, các trích dẫn trống là cần thiết để lệnh hoạt động, xem tham chiếu bên dưới.

Lưu ý rằng nếu bạn không sử dụng / WAIT khi bắt đầu, LongRastyTask sẽ được thực thi cùng lúc so với các lệnh còn lại trong tệp bó, do đó, nó có thể tạo ra sự cố nếu một trong các lệnh này yêu cầu đầu ra của LongRastyTask

Tiếp tục:

Cái này có thể chạy song song:

  • gọi LongRastyTask.exe

Điều này sẽ chạy song song và sẽ ổn khi không có phụ thuộc dữ liệu giữa đầu ra của lệnh và phần còn lại của tệp bat:

  • tham số start / B "" "LongRastyTask.exe" "

Điều này sẽ chạy song song và chờ tác vụ kết thúc, vì vậy bạn có thể sử dụng đầu ra:

  • bắt đầu / B / WAIT "" "LongRastyTask.exe" "tham số"

Tham khảo cho lệnh start: Làm cách nào tôi có thể chạy chương trình từ tệp bó mà không để giao diện điều khiển mở sau khi chương trình bắt đầu?


6

Gọi

Gọi một chương trình hàng loạt từ một chương trình khác mà không dừng chương trình hàng loạt cha mẹ. Lệnh gọi chấp nhận nhãn là mục tiêu của cuộc gọi. Cuộc gọi không có hiệu lực tại dòng lệnh khi được sử dụng bên ngoài tập lệnh hoặc tập tin bó. https://technet.microsoft.com/en-us/l Library / bb490873.aspx

Khởi đầu

Bắt đầu một cửa sổ Dấu nhắc Lệnh riêng biệt để chạy một chương trình hoặc lệnh được chỉ định. Được sử dụng mà không có tham số, bắt đầu mở một cửa sổ nhắc lệnh thứ hai. https://technet.microsoft.com/en-us/l Library / bb491005.aspx


-1

Đây là một chủ đề cũ, nhưng tôi vừa gặp phải tình huống này và phát hiện ra một cách gọn gàng xung quanh nó. Tôi đã cố gắng chạy setup.exe, nhưng tiêu điểm đang quay trở lại dòng tiếp theo của tập lệnh mà không cần đợi setup.exe hoàn tất. Tôi đã thử các giải pháp trên mà không có may mắn.

Cuối cùng, đường ống lệnh thông qua nhiều hơn đã lừa.

setup.exe {đối số} | hơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.