คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:
- เรียกใช้แบตช์ไฟล์ในวิธีที่ซ่อนอยู่ 23 คำตอบ
ใน Windows XP ฉันสามารถเรียกใช้ไฟล์ batch (.bat หรือ. cmd) ผ่านทางลัดโดยไม่มี "หน้าต่างดำ" ได้หรือไม่
คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:
ใน Windows XP ฉันสามารถเรียกใช้ไฟล์ batch (.bat หรือ. cmd) ผ่านทางลัดโดยไม่มี "หน้าต่างดำ" ได้หรือไม่
คำตอบ:
บันทึกข้อมูลต่อไปนี้เป็น wscript เช่น hidecmd.vbs หลังจากแทนที่ "test.bat" ด้วยชื่อไฟล์แบตช์ของคุณ
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false
พารามิเตอร์ที่สองของoShell.Run
is คือintWindowStyle
ค่าที่ระบุลักษณะที่ปรากฏของหน้าต่างของโปรแกรมและค่าศูนย์สำหรับหน้าต่างที่ซ่อนอยู่
การอ้างอิงอยู่ที่นี่http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx
.bat
ไฟล์ในฐานะผู้ดูแลระบบโดยใช้วิธีนี้?
นี่เป็นเพียงคำตอบง่ายๆของ Shaji คุณสามารถเรียกใช้สคริปต์ชุดงานของคุณผ่านสคริปต์VBScript (.vbs) ดังนี้:
'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True
สิ่งนี้จะดำเนินการไฟล์แบตช์ของคุณโดยไม่มีหน้าต่างคำสั่งปรากฏขึ้น
.bat
ไฟล์ในฐานะผู้ดูแลระบบโดยใช้วิธีนี้ได้อย่างไร
เพียงเพื่อขยายคำตอบ "ใช้ Windows Scripting" (ซึ่งฉันคิดว่าดีที่สุดเพราะมีอยู่แล้วในตัว) นี่คือวิธีการทำโดยใช้สคริปต์ wrapper เดียวและส่งชื่อไฟล์แบทช์ "ของจริง" เป็นพารามิเตอร์ พารามิเตอร์เพิ่มเติมจะถูกส่งต่อไปยังไฟล์แบตช์
If WScript.Arguments.Count >= 1 Then
ReDim arr(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
Arg = WScript.Arguments(i)
If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
arr(i) = Arg
Next
RunCmd = Join(arr)
CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If
ดังนั้นเช่นบันทึกไฟล์ข้างต้นเป็นNoShell.vbs
บางที่แล้วโทร:
NoShell.vbs c:\foo\my_batch_file.bat
สุดท้ายหากคุณต้องการเรียกใช้จากที่ใดที่ไม่เข้าใจไฟล์. vbs (เช่น "เครื่องมือภายนอก" ใน Visual Studio) คุณจะต้องโทรหาC:\Windows\System32\wscript.exe
ด้วยไฟล์ vbs เป็นพารามิเตอร์ตัวแรกและ ไฟล์แบทช์เป็นครั้งที่สอง
"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat
นี้:
"C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat
. ไม่ว่าฉันจะลองใช้เส้นทางแบบไหน - ให้ใส่เครื่องหมายอัญประกาศล้อมรอบทุกอย่าง% 20 แทนที่พื้นที่หรือการรวมกันของสองสิ่งนี้ไม่มีอะไรทำงาน ฉันได้รับข้อความแสดงข้อผิดพลาดบอกฉันว่าไม่พบไฟล์หรือไม่มีอะไรเกิดขึ้น นี่เป็นเพราะข้อผิดพลาดของผู้ใช้ในตอนท้ายของฉันข้อ จำกัด ของ Windows ที่มีฟิลด์เป้าหมายสำหรับทางลัดหรือปัญหากับสคริปต์ vbs ที่มันไม่ได้จัดการเส้นทางของไฟล์ที่มีช่องว่างอย่างเหมาะสมหรือไม่?
คุณสามารถเปลี่ยนคุณสมบัติของทางลัดเพื่อให้ย่อขนาดได้
หากต้องการเรียกใช้อย่างล่องหนอย่างสมบูรณ์คุณจะต้องมีอย่างอื่นเช่น Windows Scripting
ใช้เริ่มต้นด้วยตัวเลือก '/ B' ตัวอย่างเช่น:
@echo off
start /B go.bat
start /b
จะเรียกใช้โปรแกรมในคอนโซลที่จัดสรรไว้ในปัจจุบันแทนที่จะวางไข่ใหม่ คุณจะได้รับชุดใหม่ตั้งแต่ชุดต้องทำงานด้วย cmd (ซึ่งในที่สุด [แปลกใจ] จะเปิดคอนโซล)
SYSTEM
ใน C / C ++)
cmd /c foo.cmd
โดยตรงในกรณีที่ว่าหรือหากสิ่งที่คุณใช้ในการวางไข่กระบวนการที่ไม่สร้างเปลือกแรกที่ใช้ มีอย่างไม่จำเป็นต้องใช้start
ในสถานการณ์เหล่านั้นและผมยืนยันว่าไม่ควรนำมาใช้ในความโปรดปรานของsystem
CreateProcess
เมื่อเปิดไฟล์แบตช์คุณจะต้องพึ่งพาแพลตฟอร์มเดียวอยู่แล้วและคุณอาจใช้เครื่องมือที่ดีกว่าสำหรับงาน
cmd /c
ก่อน คำสั่ง cmd คือสิ่งที่ฉันต้องการในกรณีของฉัน แต่คำตอบ stackexchange ทั้งหมดที่ฉันพบจนถึงตอนนี้เกี่ยวกับแบตช์ไฟล์ที่เรียกใช้ไฟล์แบตช์อื่นมีคำตอบที่ดีที่สุดสำหรับการใช้งานเริ่มต้น ...
start /b go.bat
จะไม่จัดสรรคอนโซลใหม่ (เช่นอินสแตนซ์ของ conhost.exe - หรือเธรดใน csrss.exe ก่อน Windows 7) แต่มันจะทำให้เป็นระเบียบตั้งแต่สคริปต์ชุดจะทำงานกับตัวอย่างใหม่ของ cmd.exe ที่ติดอยู่กับคอนโซลเดียวกัน ทั้งสองอินสแตนซ์ของเชลล์จะแข่งขันเพื่ออ่านอินพุตจากคอนโซลโดยทั่วไปแล้วจะสลับกัน มันต้อง/w
(เช่นstart /b /w go.bat
) เพื่อที่จะรอในครั้งที่สองซึ่งเป็นคล้ายกับการใช้ถ้าใช้cmd /c
system
นอกจากนี้หากคุณโทรให้เรียกCreateProcess
ใช้go.bat
โดยตรง cmd /c
ไม่จำเป็นต้องเป็น
ฟรี GPL โอเพนซอร์ส "สร้างกระบวนการที่ซ่อนอยู่"
http://www.commandline.co.uk/chp/
Microsoft Security Essentials และอาจเป็นสแกนเนอร์ไวรัส / มัลแวร์อื่น ๆ ส่วนใหญ่จะจัดการ chp.exe ที่ปฏิบัติการได้เนื่องจากเป็นไวรัสเพราะจะซ่อนโปรแกรมอะไรก็ตามที่คุณระบุไม่ให้แสดงหน้าต่างหรือปุ่มแถบงานเหมือนกับที่ไวรัสทำ
มันไม่ใช่ไวรัส ไม่ซ่อนกระบวนการเป้าหมายไม่ให้ปรากฏในตัวจัดการงานตัวอย่างเช่น และแน่นอนว่ามีซอร์สโค้ดรวมอยู่ด้วยดังนั้นคุณจะเห็นว่ามันมีขนาดเล็กมากและไม่ได้ทำอะไรเลยนอกจากรันโปรแกรมใด ๆ ก็ตามที่คุณให้มา
คุณไม่จำเป็นต้องเชื่อถือว่า chp.exe ที่รวมอยู่นั้นถูกสร้างขึ้นจากแหล่งนั้นจริง ๆ คุณสามารถไปข้างหน้าและละทิ้ง chp.exe ที่รวมอยู่และคอมไพล์ของคุณเองจากแหล่งที่มาและเครื่องมือที่จำเป็นทั้งหมดในการทำเช่นนั้นจะฟรีและดาวน์โหลดได้
นอกจากนี้คุณยังสามารถสร้างทางลัดไปยังไฟล์. bat หรือ. cmd จากนั้นคลิกขวาที่ทางลัดคุณสมบัติแท็บทางลัดเรียกใช้: ย่อขนาดเล็กสุด จากนั้นในงานที่กำหนดเวลาไว้ให้ใช้ทางลัดแทนไฟล์. bat / .cmd โดยตรง ซึ่งจะป้องกันไม่ให้หน้าต่างโผล่ขึ้นมา แต่ปุ่มแถบงานจะยังคงปรากฏขึ้น
คุณสามารถใช้สคริปต์หน้าต่างเช่นAutoIt
เป็นตัวอย่างเพียงแค่เขียนสิ่งนี้กับโปรแกรมแก้ไขสคริปต์ AutoIt มันค่อนข้างง่าย
Run("C:\test\batchfile.bat", "", @SW_HIDE)
หากคุณต้องการเรียกใช้ในการวนซ้ำ
$x=0
Do
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Sleep(5000)
Until $x = 1
รวบรวมเป็น. exe - และคุณทำเสร็จแล้ว
เช่นเดียวกันในAutoHotkey :
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
ใช้การเริ่มต้นที่ซ่อน (ราคา $ 20)
เริ่มต้นที่ซ่อน - เรียกใช้แอปพลิเคชันและแบตช์ไฟล์โดยไม่มีหน้าต่างคอนโซลหรือ UAC พร้อมท์
แอปพลิเคชั่นของคอนโซลและไฟล์แบตช์จะทำงานเป็นประจำเมื่อเริ่มต้น Windows หรือตามกำหนดเวลา ความไม่สะดวกหลักของเรื่องนี้คือแต่ละแอปพลิเคชันจะเปิดหน้าต่างคอนโซลที่กะพริบบนหน้าจอ Hidden Start (หรือ Hstart) เป็นยูทิลิตี้บรรทัดคำสั่งที่มีน้ำหนักเบาซึ่งช่วยให้คุณเรียกใช้แอปพลิเคชันคอนโซลและไฟล์แบตช์โดยไม่มีหน้าต่างใด ๆ ในพื้นหลังจัดการสิทธิ์ยกระดับสิทธิ์ UAC ภายใต้ Windows 7 และ Vista .
ทางออกที่ง่ายโดยไม่ต้องใช้โปรแกรมเสริมใด ๆ
โชคดี!