เรียกใช้ไฟล์แบตช์ในลักษณะที่ซ่อนอยู่อย่างสมบูรณ์


139

ฉันกำลังมองหาวิธีที่จะเรียกใช้ไฟล์แบตช์ (.bat) โดยที่ผู้ใช้ไม่เห็นสิ่งใด (ไม่มีหน้าต่างไม่มีชื่อทาสก์บาร์, .etc .. )

ฉันไม่ต้องการใช้โปรแกรมเพื่อทำสิ่งนั้นฉันกำลังมองหาบางสิ่งที่สะอาดกว่านี้ ฉันพบโซลูชันที่ใช้ VBScript แล้ว แต่ฉันไม่ชอบใช้ VBS เช่นกัน


ฮ่าฮ่า! ไม่อย่างแน่นอน. ฉันกำลังพัฒนาบริการ Windows ซึ่งจะเรียกใช้แฟ้มชุดงานเป็นระยะ ๆ
Moayad Mardini

4
บริการ Windows ไม่ทำงานเป็นแบตช์ไฟล์ พวกเขาทำงานเป็นบริการ คุณต้องชี้แจงคำถาม - ตามที่เขียนและแสดงความคิดเห็นมันไม่มีเหตุผลสำหรับฉัน
CarlF

1
ฉันมีบริการ Windows ที่ใช้งานไฟล์แบตช์ ไม่ว่าบริการเป็นไฟล์แบทช์
Moayad Mardini

1
คุณเขียนด้วยภาษาอะไร
ฮิวจ์อัลเลน

มี hstart ด้วย
barlop

คำตอบ:


119

โซลูชันที่ 1:

บันทึกข้อความหนึ่งบรรทัดเป็นไฟล์invisible.vbs:

CreateObject ("Wscript.Shell") เรียกใช้ "" "" & WScript.Arguments (0) & "" "", 0, เท็จ

หากต้องการเรียกใช้โปรแกรมหรือไฟล์แบตช์ใด ๆ ให้ใช้อย่างนี้:

wscript.exe "C: \ เมื่อใดก็ตาม \ visible.vbs" "C: \ สถานที่อื่น \ MyBatchFile.bat"

เพื่อให้สามารถส่งผ่าน / รีเลย์รายการอาร์กิวเมนต์ใช้สองเครื่องหมายคำพูดคู่เท่านั้น

CreateObject ("Wscript.Shell") เรียกใช้ "" & WScript.Arguments (0) & "", 0, เท็จ

ตัวอย่าง: Invisible.vbs "Kill.vbs ME.exe"

โซลูชันที่ 2:

ใช้เครื่องมือบรรทัดคำสั่งเงียบเปิดตัวกระบวนการ: เงียบ , hideconหรือhideexec


2
ทำไม 4 เครื่องหมายคำพูดคู่คุณช่วยอธิบายได้ไหม?
Starx

ถ้าเราต้องการเริ่มโปรแกรมที่ซ่อนอยู่ล่ะ
Starx

5
@Starx VB ไวยากรณ์ &หมายถึงสตริงที่ต่อกัน สตริงจะอยู่ในเครื่องหมายคำพูดคู่ ( ") เครื่องหมายคำพูดคู่ต่อเนื่อง ( "") ภายในตัวคั่นสตริงหมายถึงเครื่องหมายคำพูดคู่ ( ") ดังนั้นสี่คำพูดคู่ ( """") จะเป็นตัวอักษรสตริงของตัวละครตัวหนึ่งคำพูดคู่ ( ") รวมเข้าด้วยกันและ"""" & WScript.Arguments(0) & """"จะกลายเป็น"<argument>"ว่า<argument>อาร์กิวเมนต์บรรทัดคำสั่งแรกส่งผ่านไปยังสคริปต์อยู่ที่ไหน
บ๊อบ

4
วิธีการแก้ไขเพื่อให้มันผ่านการขัดแย้งทั้งหมด? มันจะสะดวกกว่าในการส่งผ่านข้อโต้แย้งโดยไม่ต้องอ้างถึง
Ctrl-C

2
สิ่งนี้ยังไม่ต้องการให้คุณสร้างไฟล์แบตช์เพื่อวางwscript.exe "C:\Wherever\invisible.vbs" ...ด้านในหรือไม่?
endolith

26

ในการซ่อนไฟล์แบตช์หรือไฟล์คำสั่งหรือไฟล์ใด ๆ .... ใช้ Windows XP ในตัวIExpress.exeยูทิลิตี้เพื่อสร้าง. EXE จากแบตช์ไฟล์ เมื่อใช้IExpressให้แน่ใจว่าคุณตรวจสอบตัวเลือกที่ซ่อนอยู่และทำเครื่องหมายในช่องทั้งหมดเกี่ยวกับการไม่แสดงอะไร หลังจากที่คุณสร้าง. exe ให้เก็บไว้ในโฟลเดอร์คำสั่ง run ที่คุณเลือกและคุณจะไม่เห็นมันเกิดขึ้น


1
โอ้ทางออกที่ดีจริง
Camilo Martin

7
มีอะไรเทียบเท่ากับ lexpress.exe ใน Windows รุ่นใหม่กว่าเช่น windows 7
Sнаđошƒаӽ

@ Sнаđошƒаӽมันอยู่ใน windows 7 .... เพิ่งทดสอบมัน
DarthRubik

@DarthRubik ขอบคุณสำหรับการแบ่งปัน ฉันทดสอบมันเกินไปและใช้งานได้ดี ใช้เวลาในการโหวตคำตอบ :)
Sнаđошƒаӽ

ดูเหมือนว่าจะไม่สามารถใช้งานได้กับ Windows 10 64 เนื่องจากดูเหมือนว่า "Command.com" จะไม่ปรากฏอีกต่อไป
Arne S

10

use Cmdowเป็นโปรแกรมอรรถประโยชน์ commandline Win32 สำหรับ NT4 / 2000 / XP / 2003 ที่อนุญาตให้ windows แสดงรายการย้ายปรับขนาดเปลี่ยนชื่อซ่อน / ไม่ซ่อนถูกปิดใช้งาน / เปิดใช้งานย่อขยายขยายเปิดใช้งาน / ปิดใช้งานถูกฆ่าและ มากกว่า.

เรียกใช้ไฟล์แบตช์ที่ซ่อนอยู่ผ่านพารามิเตอร์: -

cmdow / run / hid mybat arg1 "หาเรื่อง 2"


แต่ฉันจะเรียกใช้คำสั่งนี้ได้อย่างไร
Moayad Mardini

9
ตรวจพบ cmdow เป็นมัลแวร์โดยผลิตภัณฑ์ป้องกันไวรัสส่วนใหญ่ ดังนั้นจึงเป็นการยากที่จะใช้โซลูชันนี้ในสถานที่อื่นนอกเหนือจากพีซีของคุณ
Ganesh R.

@Ganesh: ทางออกที่ดีกว่า?
Moayad Mardini

มันเป็นโอเพนซอร์สหรือไม่ ไม่มีจุดประสงค์ในการใช้แอปของบุคคลที่สามที่ไม่ใช่โอเพ่นซอร์สและอาจบรรจุโทรจันเมื่อคุณสามารถทำสิ่งเดียวกันได้ด้วยการเรียกใช้ 1 บรรทัด vbscript ของ harrymc (ดูเขาตอบที่ด้านบนของเธรด)
thebunnyrules

1
มันเป็นโอเพ่นซอร์สดังนั้นมันก็ค่อนข้างดี สามารถรับซอร์สโค้ดได้ที่นี่: github.com/ritchielawrence/cmdow
thebunnyrules

9

หากไฟล์แบทช์ของคุณสามารถรวมกันเป็นหนึ่งบรรทัดและตัวอักษรจำนวนมากดังนั้นให้ใช้ทางลัดโดยคลิกขวาภายในโฟลเดอร์ที่ใส่ในไดเรกทอรีสุ่มและข้ามไปที่ส่วนที่เหลือของตัวช่วยสร้างและคลิกขวาที่ทางลัดที่เพิ่งสร้างขึ้น คลิกคุณสมบัติและภายใต้เป้าหมายป้อนสิ่งที่คุณมักจะใส่ในไฟล์ค้างคาว และ Bobs ลุงของคุณ!

ข้อดี:

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

จุดด้อย:

 Limited to one line, so many characters

ปัญหาเดียวคือคุณไม่สามารถเชื่อมโยงประเภทไฟล์กับทางลัด ดังนั้นหากคุณต้องการเปิดสคริปต์แบตช์ด้วยการคลิกสองครั้งที่สคริปต์นั้นใน Explorer คุณยังต้องใช้ไฟล์. bat
Björn Lindqvist

ฉันยังคงพยายามหาลุงบ๊อบอยู่แถวนี้ทุกที่ !!
Pimp Juice IT

7

รันสคริปต์ผ่านงาน at โดยไม่ทำให้มันโต้ตอบ:

at 11:00 script.bat

อีกทางเลือกหนึ่งถ้าคุณไม่สนใจการติดตั้งอะไรอย่างเช่น Python คุณก็สามารถสร้างสคริปต์และรันมันได้ด้วยpythonw(เวอร์ชันที่เชื่อมโยงสำหรับการใช้งาน GUI) เนื่องจากคุณไม่ได้ใช้ API แบบกราฟิกหน้าต่างจะไม่แสดง เพียงใช้การเรียกos.system()และมันจะเลียนแบบสคริปต์แบบแบทช์เหมือนกับการพิมพ์สตริงลงในบรรทัดคำสั่ง

ตัวอย่าง:

import os

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

3
แต่ฉันจะเรียกใช้คำสั่งนี้ได้อย่างไร
Moayad Mardini

คุณจะต้องกำหนดเวลางานตามกำหนดเวลาหรือเขียนบริการ
Unfundednut

เพิ่มตัวอย่างแล้ว
John T


6

การใช้ Windows7 คุณสามารถใช้แผงควบคุม "งานตามกำหนดเวลา" เพื่อกำหนดเวลาไฟล์แบตช์ให้ทำงานในพื้นหลังอย่างล่องหนด้วยสิทธิ์ที่ระบุและแม้กระทั่งเป็นบัญชี "ระบบ" ดูภาพหน้าจอด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้แม้ว่าจะมีความสามารถไม่มากนักคุณยังสามารถสร้างงานแบทช์สคริปต์ที่มองไม่เห็นเช่นนี้จากบรรทัดคำสั่งโดยใช้คำสั่ง "AT.exe" โดยไม่มีตัวเลือก '/ แบบโต้ตอบ'


3
ช่องทำเครื่องหมายที่ซ่อนอยู่เพียงซ่อนภารกิจจากส่วนติดต่อผู้ใช้ตัวกำหนดเวลางาน (
Sourav Ghosh

ใช้งานเป็น“ SYSTEM” เมื่อไม่ต้องการสิทธิ์“ SYSTEM” (และไม่ได้รับการตรวจสอบเพื่อหาจุดอ่อนด้านความปลอดภัยและแข็ง) เป็นความคิดที่ไม่ดี ดูการแสดงความคิดเห็นที่นี่
สกอตต์

6

ฉันไม่ชอบโซลูชัน VBScript

ดาวน์โหลดและคัดลอกnircmd.exeไปยัง%systemroot%\system32โฟลเดอร์ของคุณจากนั้นเพิ่มคำสั่งนี้ในบรรทัดแรกของแบทช์ของคุณ:

nircmd.exe win hide ititle "cmd.exe"

หรือกำหนดชื่อแบทช์ของคุณเองเป็นอันดับแรกด้วยtitleคำสั่งเพื่อหลีกเลี่ยงการซ่อนcmdหน้าต่างทั้งหมดเช่นนี้

title MyBatch
nircmd.exe win hide ititle "MyBatch"

ฉันใช้วิธีที่แน่นอนนี้ แต่ล้มเหลวในบางครั้งที่ nircmd ไม่ซ่อนหน้าต่าง cmd เพียงย่อขนาดลงในทาสก์บาร์และไม่สามารถกู้คืนได้โดยคลิกที่มัน ไม่รู้ทำไม ...
James Yang



3

ยังอีกทางจาก C / C ++ คือการใช้ฟังก์ชั่น CreateProcess กับธง CREATE_NO_WINDOW มันมีพลังพิเศษมากมายที่ไม่ได้แสดงไว้ที่นี่ นี่เป็นเพียงขั้นต่ำที่คุณต้องเปลี่ยน system () หรือตระกูล _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
คำตอบที่ถูกต้องสำหรับวิธีการ WINAPI นี่คือซอร์สโค้ดและแอปพลิเคชันนอกเหนือจากคำตอบของคุณ
อเล็กซ์

3

ดีค้างคาวเพื่อแปลง EXEจะแปลงของคุณ.batหรือ.cmdไฟล์ไปยัง.exeไฟล์

มันมี UI ที่เรียบง่าย คุณสามารถเลือกที่จะไม่มีหน้าต่างคอนโซลได้โดยเลือกตัวเลือก“ แอปพลิเคชันที่มองไม่เห็น” นอกจากนี้ยังช่วยให้คุณสามารถกำหนดไอคอนไฟล์ที่เกี่ยวข้องกับแพ็คเกจและตัวเลือกอื่น ๆ

นี่คือภาพหน้าจอของหน้าต่างอินเตอร์เฟสหลัก:


โปรดทราบว่าภาพนี้ล้าสมัย มันแสดงเวอร์ชั่น 2.4.8 และ ณ เดือนกันยายน 2018 เว็บไซต์นั้นมีเวอร์ชั่น 3.0.10.0 (อัปเดตล่าสุด 2018-03-23)

คำเตือน: การเชื่อมโยงเว็บไซต์ www.f2ko.de ไปcoinhive.comซึ่งเป็นที่ยอมรับอย่างกว้างขวาง ระบุ เป็น มัลแวร์


2

ฉันทำมันสำเร็จด้วยnircmdด้วยวิธีนี้:

  1. ดาวน์โหลด nircmd.exe จากลิงค์
  2. สร้างไฟล์. bat ของคุณ
  3. บรรทัดแรกของไฟล์. bat ต้องเป็นดังนี้: nircmd.exe win hide ititle "cmd.exe"
  4. เลือกไฟล์ทั้งสองและสร้างไฟล์แยกตัวเองโดยใช้ WinRAR
  5. ในแท็บ "ทั่วไป" ให้เลือก "สร้างไฟล์ดึงไฟล์อัตโนมัติ"
  6. ในแท็บ "ขั้นสูง" เลือกปุ่ม "ตัดอัตโนมัติ"
  7. มีหน้าต่างใหม่และเลือกแท็บ "โหมด" จากนั้นเลือกตัวเลือก: "ซ่อนทุกอย่าง"
  8. เลือกแท็บ "อัพเดต" และเลือกตัวเลือก "เขียนทับไฟล์ที่มีอยู่"
  9. เลือกแท็บ "ทั่วไป" และกำหนดโฟลเดอร์ปลายทางสำหรับการแยกข้อมูลหากคุณต้องการและในกล่อง "Excecute หลังจากการแยก" ให้เขียนเส้นทางแบบเต็มที่ไฟล์. bat ของคุณจะถูกแยกออก ตัวอย่าง: หากคุณกำหนดโฟลเดอร์การแยกเป็น: "c: \ windows \" เส้นทางแบบเต็มเพื่อแยกข้อมูลหลังจากการแยกจะเป็น: "c: \ windows \ file.bat" (ในกรณีที่ชื่อ. bat ของคุณมีชื่อว่า: file.bat )
  10. คลิกยอมรับในหน้าต่างทั้งหมด

ตอนนี้คุณจะมีไฟล์. exe ซึ่งหลังจากที่คุณเบลอคลิกและติดตั้งไฟล์. bat ของคุณจะทำงานอย่างสมบูรณ์


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

3
โปรดรวมคำอธิบายสั้น ๆ ของคำสั่ง ที่อาจช่วยให้ OP (และอื่น ๆ ) เข้าใจว่ามันทำงานอย่างไรแทนที่จะเพียงแค่คัดลอกคำสั่งและใช้งาน
BloodPhilia


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

1

คุณไม่จำเป็นต้องทำอะไรเป็นพิเศษ

หากคุณใช้งานแบตช์ไฟล์จากบริการ windows ไฟล์เหล่านั้นควรถูกซ่อนไว้เป็นค่าเริ่มต้นเว้นแต่คุณจะเปิดใช้งานตัวเลือก "อนุญาตให้บริการโต้ตอบกับเดสก์ท็อป" บนบริการ


1

การเพิ่มคำตอบของฉันที่นี่จากโพสต์อื่นเนื่องจากมันซ้ำกันและฉันไม่เห็นโซลูชันนี้ที่นี่ดังนั้นตอนนี้มี 17 คำตอบที่แตกต่างกันสำหรับวิธีที่คุณสามารถเรียกใช้แบทช์ไฟล์ที่ซ่อนอยู่ ฉันจะลบคำตอบของฉันในโพสต์นั้นในอนาคตอันใกล้

สร้างแบทช์สคริปต์ของคุณพร้อมกับแบตช์ตรรกะและคำสั่งในนั้นจากนั้นสร้างไฟล์ใหม่ที่มี.VBSนามสกุลใช้ตรรกะด้านล่าง (ตัวอย่างที่ฉันให้ไว้ด้านล่าง) และเพียงแค่เสียบเส้นทางแบบเต็มไปยังไฟล์ของคุณ.CMDหรือ.BATไฟล์ด้วยPING -t <IPAddress>คำสั่ง ฯลฯ มันดำเนินการแบทช์ในลักษณะที่ซ่อนอยู่ไม่แสดงหน้าต่างคำสั่งเมื่อมีการดำเนินการ

ที่ซึ่งตรรกะในตัวอย่างด้านล่างระบุC:\Folder\BatchFileName.cmdการเปลี่ยนแปลงที่จะชี้ไปที่สคริปต์ชุดพร้อมกับคำสั่งของคุณที่คุณกำลังทำงานด้วยตนเอง ฯลฯ ตอนนี้

บันทึก.VBSไฟล์และกำหนดเวลาด้วยTask Scheduler ปัญหาการกำหนดเวลางานบน windows7เพื่อเรียกใช้ตามกำหนดเวลาที่แน่นอนสำหรับความต้องการของคุณ

มิฉะนั้นเพียงดับเบิลคลิกที่.VBSไฟล์เพื่อเรียกใช้PINGคำสั่งที่ไม่มีที่สิ้นสุดที่คุณใส่ไว้ในไฟล์แบทช์ที่คุณต้องการชี้ไปที่จำเป็น

หมายเหตุ: ฉันเชื่อว่านี่คือที่ฉันได้รับตรรกะสคริปต์นี้จาก แต่มันทำงานได้อย่างน่าเชื่อถือเพื่อวัตถุประสงค์เดียวกันกับที่คุณต้องการที่นี่ซึ่งคือเพื่อให้แน่ใจว่าหน้าต่างคำสั่งถูกซ่อนอยู่เมื่อไฟล์แบตช์รันServer Fault Source

ตัวอย่าง VBS สคริปต์เรียกใช้ชุดคำสั่งของชุดคำสั่งซ่อนหน้าต่าง CMD

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

1

ที่นี่ฉันได้รวบรวมทุกวิธีที่ฉันรู้ที่จะเริ่มต้นกระบวนการที่ซ่อนอยู่กับแบทช์โดยไม่ต้องใช้เครื่องมือภายนอกพร้อมสคริปต์ที่ใช้งานได้ PID ถูกส่งคืนเครื่องมือที่ใช้คือ IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process และ JScript.Net


1

แม้ฉันจะตอบคำถามนี้แล้วนี่เป็นวิธีการอื่น ข้อแตกต่างที่นี่คือชุดสคริปต์สามารถซ่อนตัวเองในระหว่างการเรียกใช้คุณจะต้องมีสคริปต์เพิ่มเติมสองตัวคือ - windowMode.batและgetCMDPid.bat (ทั้งคู่มี.netรหัส) ต่อไปนี้เป็นวิธีใช้งาน:

@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

ฉันเริ่มพยายามคิดออกและไม่ประสบความสำเร็จจริงๆ นี่ใกล้เท่าที่ฉันได้รับ:

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

0

ฉันต้องการซ่อนหน้าต่างสำหรับไฟล์แบตช์ที่เรียกจากเมนูบริบทของ explorer และต้องเพิ่มเครื่องหมายคำพูดบนพารามิเตอร์ ไม่มีคำตอบใดที่เหมาะกับฉันดังนั้นฉันจึงเพิ่มโซลูชันของตัวเอง

ฉันมีสิ่งนี้ในรีจิสทรี "คำสั่ง" สำหรับเมนูบริบทของ explorer:

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

ดังนั้นเพื่อแทนที่ฉันต้องสร้าง vbs ดังนี้:

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

บันทึกในสถานที่ที่ชอบC:\mypath\myscript.vbsและเรียกว่าเป็นเช่นนี้ในรีจิสทรี:

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

โปรดทราบว่าเส้นทาง. bat ไม่สามารถมีช่องว่างได้ดังนั้นให้แทนที่ด้วยชื่อไฟล์ 8.3 ดังนั้นสำหรับตัวอย่างเช่นจะต้องมีการอ้างอิงเป็นC:\Program Files\myprogram.bat C:\Progra~1\myprogram.batเพื่อดูการใช้ชื่อไฟล์ 8.3dir /x


0

ฉันสร้างRunAppเพื่อทำงานดังกล่าวและใช้มันในการผลิตของฉันด้วยหวังว่ามันจะช่วยได้

การกำหนดค่าเช่นด้านล่าง:

ไฟล์: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

และเปิดrunapp.exeตัวแทน


-1

ใช้งานได้กับ windows 8 (อาจเป็นแบบอื่น)

  1. สร้างแบตช์ไฟล์ตามปกติ
  2. สร้างทางลัดไปยังไฟล์แบตช์
  3. คลิกขวาที่คุณสมบัติทางลัด>
  4. คลิกเค้าโครง
  5. ยกเลิกการเลือก "ให้หน้าต่างตำแหน่งของระบบ"
  6. ตั้งค่าตำแหน่งซ้าย tp -1000
  7. คลิกใช้

  8. คลิกที่ทางลัดแล้วมันจะทำงาน แต่คุณจะไม่เห็น :)


4
จริงๆ? สิ่งนี้จะไม่ปรากฏเป็นปุ่มบนทาสก์บาร์ใช่หรือไม่
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.