(Làm một số dự đoán nơi các chi tiết bị thiếu từ câu hỏi của bạn)
Trong CMD, khi một kịch bản lệnh thay đổi môi trường, hành vi mặc định là nó thay đổi môi trường của tiến trình CMD đang thực thi nó.
Bây giờ, nếu bạn có tập lệnh theo lô gọi một tập lệnh lô khác, có 3 cách để thực hiện.
chạy file batch trực tiếp:
REM call q.bat
q.bat
REM this line never runs
Thông thường, bạn không muốn điều này, bởi vì nó sẽ không quay trở lại kịch bản gọi điện thoại hàng loạt. Số này giống như goto
hơn gosub
. Quá trình CMD chỉ chuyển từ kịch bản này sang tập lệnh khác.
thực hiện với call
:
REM call q.bat
CALL q.bat
REM changes that q.bat affects will appear here.
Đây là cách phổ biến nhất cho một tệp theo lô để gọi một tệp khác. Khi q.bat
thoát, kiểm soát sẽ trở lại người gọi. Vì đây là cùng một quy trình CMD, các thay đổi đối với môi trường sẽ vẫn ở đó.
Lưu ý: Nếu q.bat
sử dụng câu lệnh EXIT
, điều này có thể khiến quá trình CMD chấm dứt mà không cần kiểm soát lại tập lệnh gọi.
Lưu ý 2: Nếu q.bat
sử dụng EXIT /B
, thì quy trình CMD sẽ không thoát. Điều này hữu ích cho việc thiết lập ERRORLEVEL
.
Execute trong một quá trình CMD mới:.
REM call q.bat
CMD /C q.bat
REM environment changes in q.bat don't affect me
Kể từ q.bat chạy ins một quá trình CMD mới, nó ảnh hưởng đến môi trường của quá trình đó, và không phải là CMD rằng người gọi đang chạy trong
Note : Nếu q.bat
sử dụng EXIT
, nó sẽ không chấm dứt quá trình của người gọi.
Các SETLOCAL
CMD lệnh sẽ tạo ra một môi trường mới cho kịch bản hiện hành. Các thay đổi trong môi trường đó sẽ không ảnh hưởng đến người gọi. Nói chung, SETLOCAL
là một thực hành tốt, để tránh bị rò rỉ thay đổi môi trường do tai nạn.
Để sử dụng SETLOCAL
và vẫn đẩy những thay đổi môi trường để kịch bản gọi điện thoại, kết thúc kịch bản với:
ENDLOCAL && SET X=%X% && SET Y=%Y%
này sẽ đẩy các giá trị của X và Y đối với môi trường của phụ huynh.
Nếu mặt khác bạn muốn chạy một quá trình (không phải là một kịch bản CMD) và có nó ảnh hưởng đến môi trường kịch bản hiện tại, hơn có công cụ tạo ra một tập tin thực thi mà làm cho những thay đổi mà bạn muốn, sau đó thực hiện tập tin thực thi đó.
REM q.exe will write %TEMP%\runme.cmd, which looks like:
REM set X=Y
q.exe
call "%TEMP%\runme.cmd"
Nguồn
2009-07-28 17:59:08
Vui lòng nêu cụ thể về vỏ bạn đang sử dụng. CMD là dự đoán tốt nhất của tôi, nhưng có thể bạn có nghĩa là PowerShell hoặc một cổng CSH của Windows. –