Tôi có một tác vụ theo lịch trình bắt đầu một tập lệnh bó chạy robocopy
mỗi giờ. Mỗi khi nó chạy một cửa sổ bật lên trên màn hình nền với đầu ra của robocopy, điều mà tôi không thực sự muốn thấy.
Tôi quản lý để làm cho cửa sổ xuất hiện thu nhỏ bằng cách thực hiện công việc theo lịch trình
cmd /c start /min mybat.bat
nhưng điều đó cho tôi một cửa sổ lệnh mới mỗi giờ. Tôi đã ngạc nhiên về điều này, được đưa ra cmd /c
"Thực hiện lệnh được chỉ định bởi chuỗi và sau đó chấm dứt" - Tôi đã hiểu nhầm các tài liệu.
Có cách nào để chạy một tập lệnh bó mà không xuất hiện cửa sổ cmd không?
Thay vào đó, bạn có thể chạy nó một cách im lặng bằng tệp Windows Script. Phương thức Run cho phép bạn chạy một tập lệnh ở chế độ vô hình. Tạo một .vbs
tập tin như thế này
Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing
và lên lịch cho nó Đối số thứ hai trong ví dụ này đặt kiểu cửa sổ. 0 có nghĩa là "ẩn cửa sổ."
Cú pháp đầy đủ của Phương thức chạy :
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
Đối số:
Bạn đang chạy này như là một nhiệm vụ theo lịch trình? Nếu vậy, đặt nó để chạy như một tài khoản người dùng khác thì nó sẽ không hiển thị cho người dùng đã đăng nhập. Nếu tập lệnh không cần truy cập mạng vào các mục cần windows auth (như chia sẻ tệp hoặc máy in), bạn có thể chạy nó dưới dạng "nt thẩm quyền\system" và để trống mật khẩu. Trên Windows 7, chỉ cần đặt người dùng thành HỆ THỐNG và nhấn OK.
(Bạn có thể phải sử dụng một người dùng thực sự mặc dù nếu bạn đang sử dụng bản sao ...)
JR
Chỉ cần định cấu hình Tác vụ theo lịch là "Chạy cho dù người dùng có đăng nhập hay không".
Bạn cũng có thể thử CHP (Tạo quy trình ẩn) , thực hiện chính xác những gì bạn nghĩ ...
CHP.EXE mybat.bat
Chạy không có cửa sổ lệnh. Hoàn hảo! Được tạo bởi cùng một người như CMDOW, nhưng điều này phù hợp hơn.
CMDOW là một công cụ tuyệt vời cho phép bạn thực hiện nhiều, nhiều thứ cho các cửa sổ từ dòng lệnh.
Một trong những điều đơn giản nhất để làm là ẩn cửa sổ hiện tại (thường là dòng đầu tiên trong tệp bat) với:
cmdow @ /hid
hoặc bắt đầu một quy trình ẩn mới với
cmdow /run /hid mybat.bat
Hãy thử gọi kịch bản với
start /b <command>
Bạn có thể tạo lối tắt cho tệp bó, đặt phím tắt để bắt đầu thu nhỏ (trong thuộc tính của phím tắt, tab 'Phím tắt'), sau đó đặt công việc để bắt đầu phím tắt.
Quan trọng: Bạn sẽ cần chỉ định đường dẫn đến lối tắt theo cách thủ công bằng cách nhập nó vào trường văn bản Run, hoàn thành với phần mở rộng '.lnk'; nếu bạn chỉ cố gắng duyệt đến nó, nó sẽ một cách hữu ích tự chuyển hướng đến bất cứ điều gì các phím tắt trỏ đến.
Tôi nhận ra câu hỏi này đã được trả lời với độ phân giải hoàn toàn tốt có nguồn gốc từ Windows và do đó nên tương thích nhất và tôi hoàn toàn đồng ý.
Tôi cũng muốn nói rằng tôi không đồng ý với nhận xét của @ splattne (nhưng không phải là câu trả lời thực tế của anh ấy) - rằng độ phân giải trong chuỗi tham chiếu khác xứng đáng được ghi nhận. Câu trả lời đó liên quan đến việc chạy tập lệnh với tư cách là một người dùng khác (HỆ THỐNG), tương đương với việc cấp quyền truy cập tập lệnh gốc. Nó cũng sẽ thất bại đối với các công việc như ROBOCOPY
(như được tham chiếu bởi John Rennie), yêu cầu truy cập mạng.
Tôi chưa bao giờ thử CMDOW
trước đây, nhưng tôi muốn cung cấp một độ phân giải tương tự khác, mà [mặc dù không được cài đặt trên Windows] vẫn có tính di động cao đối với hầu hết các phiên bản, và có cả phiên bản 32 và 64- phiên bản bit và đó là NirCmd .
NirCmd là một công cụ rất mạnh có vô số tùy chọn, trong đó hữu ích nhất, cá nhân tôi nhận thấy khả năng của nó là khởi chạy các cửa sổ lệnh ẩn bằng cách thực hiện như sau:
c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"
Từ phần exec
của Tham chiếu lệnh NirCmd :
exec [show/hide/min/max] [application + command-line]
Chạy một ứng dụng và tùy chọn chỉ định một hoặc nhiều tham số dòng lệnh cho ứng dụng được thực thi. Tham số [show/ ẩn /min/max] chỉ định xem ứng dụng đang chạy có hiển thị hay không. Nếu 'ẩn' được chỉ định, ứng dụng đang chạy sẽ không hiển thị cho người dùng. Nếu 'max' được chỉ định, cửa sổ ứng dụng đang chạy sẽ được tối đa hóa. Nếu 'min' được chỉ định, cửa sổ ứng dụng đang chạy sẽ được thu nhỏ.
EDIT: Tôi đã thử chạy một công việc ROBOCOPY
và đã thử phương thức trong câu trả lời này và nó không hoạt động, ngay cả sau khi chỉnh sửa các đặc quyền truy cập mạng. Tôi đã thử bấm đúp vào tập lệnh và không thể làm cho nó hoạt động, nhưng chỉ có thể làm cho nó chạy theo lệnh nâng cao Nhắc. Tôi đã tạo một lối tắt đến tệp bó và để nó chạy với tư cách Quản trị viên và có thể thực hiện nó bằng cách nhấp đúp vào nó, nhưng phương pháp mà tôi đã kết thúc là chạy nó ẩn như HỆ THỐNG (tôi biết, tôi biết) - nhưng nó hoạt động với ROBOCOPY
, với giá trị của nó, miễn là tệp bó có quyền chính xác.
EDIT 2: Vì một số lý do, nó sẽ không hoạt động như HỆ THỐNG (có thể là điều truy cập mạng được tham chiếu trước đó) - Tôi chỉ nhận thấy điều này sau khi thực sự chạy ROBOCOPY
không có cờ/L, về cơ bản chỉ là mô phỏng và [rõ ràng] không thực sự kết nối với hệ thống từ xa, nhưng khi tôi chạy tệp bó với các đặc quyền cao nhất và kiểm tra hộp ẩn, và tôi có thể vẫn chạy nó với tư cách là người dùng đã đăng nhập trong nền mà không có cửa sổ lệnh hiển thị, cho bất cứ điều gì điều này có giá trị với bất cứ ai.
Một giải pháp khác tôi đã sử dụng là Ẩn bắt đầ