Chạy một tệp bó theo cách hoàn toàn ẩn


139

Tôi đang tìm cách nào đó để chạy một tệp bó (.bat) mà không có gì hiển thị cho người dùng (không có cửa sổ, không có tên thanh tác vụ, .etc ..).

Tôi không muốn sử dụng một số chương trình để làm điều đó, tôi đang tìm kiếm một cái gì đó sạch hơn. Tôi đã tìm thấy một giải pháp sử dụng VBScript, nhưng tôi cũng không thực sự thích sử dụng VBS.


Haha! Chắc chắn không phải. Tôi đang phát triển một dịch vụ Windows sẽ chạy một tệp bó mỗi giờ.
Moayad Mardini

4
Các dịch vụ Windows không chạy dưới dạng tệp bó. Họ chạy như dịch vụ. Bạn cần làm rõ câu hỏi - như được viết và với các bình luận, nó không có ý nghĩa với tôi.
CarlF

1
Tôi có một dịch vụ Windows chạy các tệp bó. Không phải là dịch vụ là một tập tin hàng loạt.
Moayad Mardini

1
Ngôn ngữ nào bạn đang viết dịch vụ của bạn?
Hugh Allen

Có hstart quá.
barlop

Câu trả lời:


119

Giải pháp 1:

Lưu một dòng văn bản này dưới dạng tệp invisible.vbs:

CreateObject ("Wscript.Shell"). Chạy "" "" & WScript.Argument (0) & "" "", 0, Sai

Để chạy bất kỳ chương trình hoặc tệp bó nào vô hình, hãy sử dụng nó như thế này:

wscript.exe "C: \ Bất cứ nơi nào \ vô hình.vbs" "C: \ Một số nơi khác \ MyBatchFile.bat"

Để cũng có thể truyền / chuyển tiếp một danh sách các đối số chỉ sử dụng hai dấu ngoặc kép

CreateObject ("Wscript.Shell"). Chạy "" & WScript.Argument (0) & "", 0, Sai

Thí dụ: Invisible.vbs "Kill.vbs ME.exe"

Giải pháp 2:

Sử dụng một công cụ dòng lệnh để âm thầm khởi chạy một quá trình: Yên tĩnh , hidecon hoặc hideexec .


2
Tại sao 4 dấu ngoặc kép, bạn có thể vui lòng giải thích?
Starx

Điều gì xảy ra nếu chúng ta cần bắt đầu một chương trình ẩn?
Starx

5
@ Starx VB cú pháp. &có nghĩa là chuỗi nối. Chuỗi được đặt trong dấu ngoặc kép ( "). Liên tiếp trích dẫn kép ( "") bên trong các dấu phân cách chuỗi có nghĩa là một trích dẫn kép theo nghĩa đen ( "). Vì vậy, bốn dấu ngoặc kép ( """") sẽ là một chuỗi ký tự của một ký tự, một dấu ngoặc kép ( "). Đặt nó cùng nhau, và """" & WScript.Arguments(0) & """"sẽ trở thành "<argument>", nơi <argument>đối số dòng lệnh đầu tiên được truyền cho tập lệnh.
Bob

4
Làm thế nào để sửa đổi nó để nó vượt qua tất cả các đối số? Sẽ thuận tiện hơn để vượt qua các đối số mà không trích dẫn chúng.
Ctrl-C

2
Điều này có còn yêu cầu bạn tạo một tệp bó để đặt wscript.exe "C:\Wherever\invisible.vbs" ...bên trong không?
endolith

26

Để ẩn tệp bó hoặc tệp lệnh hoặc bất kỳ tệp nào .... Sử dụng IExpress.exetiện ích được tích hợp trong Windows XP để tạo tệp .EXE khỏi tệp bó. Khi sử dụng, IExpressđảm bảo bạn kiểm tra tùy chọn ẩn chạy và đánh dấu vào tất cả các ô về việc không hiển thị bất cứ thứ gì. Sau khi bạn tạo .exe, hãy đặt nó vào bất kỳ thư mục lệnh chạy nào bạn chọn và bạn sẽ không bao giờ thấy nó xuất hiện.


1
Oh, giải pháp tốt thực sự.
Camilo Martin

7
Có gì tương đương với lexpress.exe trong các phiên bản Windows mới hơn như windows 7 không?
Sнаđошƒаӽ

@ Sнаđошƒаӽ Nó ở trong windows 7 .... chỉ cần thử nghiệm nó
DarthRubik

@DarthRubik Cảm ơn bạn đã chia sẻ điều đó. Tôi cũng đã thử nó và nó hoạt động tốt. Thời gian để nâng cao câu trả lời. :)
Sнаđошƒаӽ

Điều này dường như không hoạt động trên Windows 10 64 vì "Command.com" dường như không còn tồn tại
Arne S

10

sử dụng Cmdow là một tiện ích dòng lệnh Win32 cho NT4 / 2000 / XP / 2003 cho phép các cửa sổ được liệt kê, di chuyển, thay đổi kích thước, đổi tên, ẩn / không bị chặn, bị vô hiệu hóa / kích hoạt, thu nhỏ, tối đa hóa, khôi phục, kích hoạt / hủy kích hoạt, đóng và hủy hơn.

Chạy một tệp bó ẩn đi qua các tham số: -

cmdow / run / ẩn mybat arg1 "arg 2"


Nhưng làm thế nào tôi có thể chạy lệnh này?
Moayad Mardini

9
cmdow được phát hiện là phần mềm độc hại bởi hầu hết các sản phẩm chống vi-rút. Do đó, rất khó để sử dụng giải pháp này ở những nơi khác ngoài PC của bạn.
Ganesh R.

@Ganesh: Giải pháp nào tốt hơn?
Moayad Mardini

Nó có phải là nguồn mở không? Không có điểm nào trong việc sử dụng ứng dụng của bên thứ ba không phải là nguồn mở và có thể đóng gói trojan khi bạn có thể làm điều tương tự bằng cách chạy vbscript 1 dòng của harrymc (xem anh ta trả lời ở đầu chuỗi).
thebunnyrules

1
Vâng, nó là nguồn mở, vì vậy điều đó thật tuyệt vời. Có thể lấy mã nguồn tại đây: github.com/ritchielawrence/cmdow
thebunnyrules

9

Nếu Tệp Batch của bạn có thể vừa với một dòng và rất nhiều ký tự, thì chỉ cần sử dụng Phím tắt bằng cách nhấp chuột phải vào thư mục được đặt trong thư mục ngẫu nhiên và bỏ qua phần còn lại của trình hướng dẫn, và cuối cùng nhấp chuột phải vào phím tắt vừa tạo và bấm vào thuộc tính và theo mục tiêu, nhập những gì bạn thường đặt trong một tập tin bat. Và Bobs chú của bạn!

Ưu điểm:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

Nhược điểm:

 Limited to one line, so many characters

Vấn đề duy nhất là bạn không thể liên kết một kiểu tệp với một phím tắt. Vì vậy, nếu bạn muốn mở một tập lệnh bó bằng cách nhấp đúp vào tập lệnh đó trong trình thám hiểm, bạn vẫn cần một tập tin .bat.
Bjorn Lindqvist

Tôi vẫn đang cố gắng tìm chú Bob, ở đây khắp mọi nơi !!
Pimp Juice IT

7

Chạy kịch bản thông qua một công việc mà không làm cho nó tương tác:

at 11:00 script.bat

Một giải pháp khác, nếu bạn không ngại cài đặt một cái gì đó như Python, bạn có thể chỉ cần tạo một tập lệnh và chạy nó với pythonw(phiên bản được liên kết cho các hoạt động GUI). Vì bạn không sử dụng bất kỳ API đồ họa nào, cửa sổ sẽ không hiển thị. Đơn giản chỉ cần sử dụng các cuộc gọi đến os.system()và nó sẽ bắt chước một tập lệnh bó, vì nó giống như việc gõ các chuỗi vào dòng lệnh.

Thí dụ:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")

3
Nhưng làm thế nào tôi có thể chạy lệnh này?
Moayad Mardini

Bạn sẽ phải lên lịch cho một nhiệm vụ theo lịch trình hoặc viết một dịch vụ.
Unundednut

ví dụ thêm vào.
John T

6

Bạn có thể chạy nó giảm thiểu dễ dàng.

start /MIN batch.cmd

3
hoặc sử dụng / B thay thế!
rany

6

Sử dụng Windows7, bạn có thể sử dụng bảng điều khiển "Tác vụ theo lịch trình" để lên lịch cho một tệp bó để chạy trong nền vô hình với các quyền được chỉ định và ngay cả dưới dạng tài khoản "HỆ THỐNG". Xem ảnh chụp màn hình bên dưới:

nhập mô tả hình ảnh ở đây

Hơn nữa, mặc dù không có nhiều khả năng, bạn cũng có thể tạo một tác vụ tập lệnh vô hình như thế này từ dòng lệnh bằng cách sử dụng lệnh "AT.exe" mà không có tùy chọn '/ tương tác'.


3
Hộp kiểm ẩn chỉ ẩn tác vụ khỏi giao diện người dùng Lập lịch tác vụ (
Sourav Ghosh

Điều hành một nhiệm vụ như là HỆ THỐNG HỆ THỐNG khi không cần các đặc quyền của HỆ THỐNG HỆ THỐNG xem các ý kiến ​​ở đây .
Scott

6

Tôi không thích giải pháp VBScript.

Tải xuống và sao chép nircmd.exe vào %systemroot%\system32thư mục của bạn , sau đó thêm lệnh này vào dòng đầu tiên của lô:

nircmd.exe win hide ititle "cmd.exe"

hoặc làm cho tiêu đề hàng loạt của bạn tùy chỉnh trước tiên bằng titlelệnh để tránh ẩn tất cả các cmdcửa sổ, như thế này:

title MyBatch
nircmd.exe win hide ititle "MyBatch"

Tôi sử dụng phương pháp chính xác này, nhưng đôi khi không thành công mà nircmd không ẩn cửa sổ cmd, chỉ thu nhỏ vào thanh tác vụ và không thể khôi phục bằng cách nhấp vào nó. Không biết tại sao ...
James Yang


3

Bạn cũng có thể tạo tập lệnh AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 

3

Cách YET ANOTHER, từ C / C ++, là sử dụng hàm CreatProcess với cờ CREATE_NO_WINDOW. Nó có rất nhiều sức mạnh thêm không được hiển thị ở đây. Đây chỉ là mức tối thiểu bạn cần để thay thế hệ thống () hoặc họ _spawn ().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

1
Câu trả lời đúng cho cách tiếp cận WINAPI. Đây là mã nguồn và ứng dụng ngoài câu trả lời của bạn.
Alex

3

Các tuyệt vời Bát Để Exe Chuyển đổi sẽ chuyển đổi của bạn .bathoặc .cmdnộp cho một .exetập tin.

Nó có một giao diện người dùng đơn giản. Bạn có thể chọn không có cửa sổ giao diện điều khiển bằng cách chọn tùy chọn Ứng dụng vô hình trực quan. Ngoài ra, nó cho phép bạn chỉ định một biểu tượng, gói các tệp liên quan và một số tùy chọn khác.

Đây là một ảnh chụp màn hình của cửa sổ giao diện chính:


Lưu ý rằng hình ảnh này đã lỗi thời. Nó hiển thị phiên bản 2.4.8 và kể từ tháng 9 năm 2018, trang web cung cấp phiên bản 3.0.10.0 (cập nhật lần cuối 2018-03-23).

Cảnh báo: trang web www.f2ko.de liên kết đến coinhive.com, được xác định rộng rãi phần mềm độc hại .


2

Tôi đã làm thành công với nircmd theo cách này:

  1. tải xuống nircmd.exe từ liên kết
  2. tạo tập tin .bat của bạn
  3. dòng đầu tiên của tệp .bat phải là: nircmd.exe win hide ititle "cmd.exe"
  4. chọn cả hai tệp và tạo tệp tự giải nén bằng winrar
  5. trong tab "chung", đánh dấu vào ô "tạo tập tin tự động"
  6. trong tab "trước", chọn nút "autoextract"
  7. có một cửa sổ mới và chọn tab "mode" sau đó chọn tùy chọn: "ẩn mọi thứ"
  8. chọn tab "cập nhật" và chọn tùy chọn "ghi đè lên các tệp hiện có"
  9. Chọn tab "chung" và xác định thư mục đích để trích xuất nếu bạn muốn và trong hộp "Thực hiện sau khi giải nén" hãy viết đường dẫn đầy đủ nơi .bat của bạn sẽ được trích xuất. Ví dụ: nếu bạn xác định thư mục trích xuất là: "c: \ windows \" thì đường dẫn đầy đủ để loại bỏ sau khi giải nén sẽ là: "c: \ windows \ file.bat" (trong trường hợp .bat của bạn được đặt tên: file.bat )
  10. nhấn chấp nhận trên tất cả các cửa sổ

Bây giờ bạn sẽ có một tệp .exe mà sau khi bạn nhấp vào nó và cài đặt nó, .bat của bạn sẽ chạy hoàn toàn ẩn.


1
cmdow /run /hid "file.extention" arg1 "arg 2"

3
Vui lòng bao gồm giải thích ngắn gọn về lệnh. Điều đó có thể giúp OP (và những người khác) hiểu cách thức hoạt động của nó thay vì chỉ sao chép lệnh và sử dụng nó.
BloodPhilia


'cmdow' is not recognized as an internal or external command, operable program or batch file.
Bacco

1

Bạn không cần phải làm gì đặc biệt.

Nếu bạn đang chạy các tệp bó từ dịch vụ windows, chúng sẽ được ẩn theo mặc định trừ khi bạn bật tùy chọn "Cho phép dịch vụ tương tác với máy tính để bàn" trên dịch vụ.


1

Thêm câu trả lời của tôi ở đây từ một bài đăng khác vì nó là một bản sao và tôi không thấy giải pháp này ở đây vì vậy hiện có 17 câu trả lời khác nhau về cách bạn có thể chạy một tệp bó. Tôi sẽ xóa câu trả lời của tôi trên bài đăng đó vào một thời điểm nào đó trong tương lai gần.

Tạo tập lệnh bó của bạn với logic lô và các lệnh trong đó, sau đó tạo tệp mới có .VBSphần mở rộng, sử dụng logic bên dưới (ví dụ tôi cung cấp bên dưới) và chỉ cần cắm đầy đủ đường dẫn đến .CMDhoặc .BATtệp của bạn bằng các PING -t <IPAddress>lệnh, v.v. nó thực thi lô theo cách ẩn không hiển thị cửa sổ lệnh khi nó được thực thi.

Trường hợp logic trong ví dụ dưới đây chỉ định C:\Folder\BatchFileName.cmdthay đổi để trỏ đến tập lệnh bó với các lệnh bạn đang chạy thủ công, v.v.

Lưu .VBStệp và lên lịch với các Sự cố khi Task Scheduler lập lịch tác vụ trên windows7 để chạy theo lịch trình không xác định cho nhu cầu của bạn.

Mặt khác, chỉ cần nhấp đúp vào .VBStệp để chạy PINGlệnh vô hạn mà bạn đặt trong tệp bó mà bạn trỏ nó đến khi cần thiết.

LƯU Ý: Tôi tin rằng đây là nơi tôi lấy logic tập lệnh này nhưng nó hoạt động đáng tin cậy cho cùng một mục đích bạn cần ở đây để đảm bảo cửa sổ lệnh bị ẩn khi một tệp bó được chạy Nguồn Lỗi của Máy chủ

VÍ DỤ VBS SCRIPT CHẠY LINE LINE BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing

1

Ở đây tôi đã biên soạn tất cả các cách mà tôi biết để bắt đầu một quy trình ẩn với lô mà không cần các công cụ bên ngoài. Với một tập lệnh sẵn sàng (một số trong số chúng khá phong phú về các tùy chọn) và tất cả chúng đều tạo thành dòng lệnh. PID được trả về. Các công cụ được sử dụng là IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process và JScript.Net


1

Mặc dù tôi đã trả lời đây là một cách tiếp cận khác. Khác nhau ở đây là tập lệnh bó có thể tự ẩn trong khi chạy. Bạn sẽ cần hai tập lệnh bổ sung - windowMode.batgetCMDPid.bat (cả hai đều chứa .netmã). Ở đây làm thế nào sau đó có thể được sử dụng:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit

0

Tôi đã có cùng một vấn đề, nhưng đã tìm ra nó:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)


0

Tôi bắt đầu cố gắng để tìm ra điều này và không bao giờ thực sự thành công. Điều này gần như tôi đã nhận được:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul

0

Tôi cần phải ẩn cửa sổ cho một tệp bó được gọi từ menu ngữ cảnh explorer và cũng cần thêm dấu ngoặc kép vào tham số. Không có câu trả lời nào phù hợp với tôi, vì vậy tôi đang thêm giải pháp của riêng mình.

Tôi đã có cái này trong "lệnh" đăng ký cho một menu ngữ cảnh explorer:

cmd /c C:\mypath\myprogram.bat "%1"

Vì vậy, để thay thế nó, tôi đã phải tạo một vbs như thế này:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Lưu ở một nơi như thế C:\mypath\myscript.vbsvà gọi nó như thế này trên sổ đăng ký:

wscript "C:\mypath\myscript.vbs" "%1"

Lưu ý rằng đường dẫn .bat không thể có khoảng trắng, vì vậy hãy thay thế nó bằng tên tệp 8.3. Vì vậy, ví dụ C:\Program Files\myprogram.batphải được tham chiếu là C:\Progra~1\myprogram.bat. Để xem tên tệp 8.3, hãy sử dụngdir /x


0

Tôi đã tạo RunApp để thực hiện một công việc như vậy và cũng sử dụng nó trong env sản xuất của mình, hy vọng nó sẽ giúp ích.

Các cấu hình như dưới đây:

tập tin: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Và khởi động runapp.exethay thế.


-1

Điều này hoạt động cho windows 8 (có thể khác)

  1. Tạo một tệp bó như bình thường
  2. Tạo lối tắt đến tệp bó
  3. Nhấp chuột phải vào phím tắt> thuộc tính
  4. Nhấp vào Bố cục
  5. Bỏ chọn "Để cửa sổ vị trí hệ thống"
  6. đặt vị trí bên trái tp -1000
  7. bấm vào áp dụng

  8. Nhấp vào phím tắt và nó sẽ chạy nhưng bạn sẽ không thấy nó :)


4
Có thật không? Điều này sẽ không hiển thị như là một nút trên thanh tác vụ?
Scott
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.