ฉันจะสร้างไฟล์ Windows Batch ที่ไม่แสดงพรอมต์คำสั่งเมื่อดำเนินการได้อย่างไร [ซ้ำ]


58

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

ฉันพบไฟล์ Redcar.bat ซึ่งมีวัตถุประสงค์เพื่อเปิดใช้ Redcar เป็นทางลัดฉันเข้าใจ แต่ฉันไม่ต้องการให้หน้าต่างพรอมต์คำสั่งพิเศษเปิดขึ้นเมื่อใดก็ตามที่ฉันเปิดไฟล์ BAT

ฉันจะเรียกใช้ BAT โดยไม่เห็นพรอมต์ได้อย่างไร


1
หวังว่าฉันจะรู้คำตอบสำหรับ +1 นี้สำหรับคำถามที่ดี
Supercereal

@Kyle มีคำถามที่คล้ายกันถูกถามก่อน superuser.com/questions/191149/how-to-execute-cmd-exe-silently กล่าวถึง HSTART และกล่าวสั้น ๆ ว่าไฟล์ VBS สามารถเปิดใช้งานได้เช่นกัน
barlop

คุณสามารถอัพเดตคำตอบที่คุณเลือกได้ไหม? เป็นไปได้และง่ายมากเมื่อคุณรู้วิธี .. batch file: line 1: set var1=hello.txtline 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown

เพียงแค่ใช้หรือ:: @REMที่มา: superuser.com/a/843754/101936
PHPst

คำตอบ:


38

คุณไม่สามารถ - ดำเนินการแบตช์ไฟล์ด้วยพรอมต์คำสั่งในตัวจะเปิดหน้าต่างค้างไว้จนกว่าไฟล์แบตช์จะออก

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

ข้อแม้อย่างหนึ่งคือถ้าคุณใช้โปรแกรมโหมดคอนโซลซึ่งมีตัวแปลสคริปต์หลายตัวไฟล์แบตช์จะรอให้โปรแกรมออกและการใช้startจะวางไข่หน้าต่างคอนโซลใหม่ สิ่งที่คุณต้องทำในกรณีนี้คือการใช้ล่ามรุ่นที่ใช้ Windows แทนรุ่นที่ใช้คอนโซล - ไม่startจำเป็น สำหรับ Perl คุณจะทำงานแทนwperl.exe perl.exeสำหรับงูหลามก็แทนpythonw.exe python.exeWin32 Ruby รุ่นเก่าที่ฉันได้ดาวน์โหลดมานั้นมีrubyw.exeให้เลือกซึ่งควรทำแบบเดียวกัน

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


ขอบคุณที่ตอบคำถามของฉัน สิ่งที่น่ารำคาญจริง ๆ ไม่ใช่ว่าหน้าต่างแจ้งเตือนปรากฏขึ้น แต่ต้องเปิดอยู่ตราบที่โปรแกรมทำงานอยู่ ตอนนี้แฟลชสามารถรับได้ทั้งหมดและไม่น่ารำคาญเท่านี้ จะตรวจสอบว่าฉันสามารถแก้ไขสคริปต์เพื่อรัน rubyw แทน ruby ​​ได้หรือไม่
Jake

1
ขอบคุณมากสำหรับการอธิบายถึงความแตกต่างระหว่าง "python" ใด ๆ "pythonw" - ในที่สุดฉันก็พบวิธีแก้ปัญหาในการใช้เครื่องมือหน้าต่างหลามที่เรามีโดยไม่มีพรอมต์คำสั่งในพื้นหลัง
FP

avajava.exe´ และ avjavaw.exe´ เหมือนกัน
redbeam_

คุณสามารถ - ไม่ได้อยู่ในแบทช์เอง จริงๆมีจำนวนของ Qs ที่นี่ด้วยเป็นเกี่ยวกับวิธีการซ่อนพรอมต์คำสั่งsuperuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

ฉันคิดว่านี่เป็นวิธีที่ง่ายและสั้นที่สุดในการเรียกใช้งานไฟล์แบตช์โดยไม่ต้องเปิดหน้าต่าง DOS มันอาจเสียสมาธิได้มากเมื่อคุณต้องการกำหนดเวลาชุดคำสั่งให้ทำงานเป็นระยะ ๆ ดังนั้นหน้าต่าง DOS จะเปิดขึ้นมา . ใช้ VB Script เพื่อเรียกไฟล์แบตช์ ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

คัดลอกบรรทัดด้านบนไปยังเครื่องมือแก้ไขและบันทึกไฟล์ด้วยนามสกุล. VBS แก้ไขชื่อไฟล์และเส้นทาง. BAT ตามลำดับ จากนั้นให้เรียกใช้ไฟล์. vbs และสิ่งมหัศจรรย์จะเกิดขึ้น!


8

คุณสามารถเรียกใช้แบตช์ไฟล์อื่นด้วย START / MIN CMD.EXE / C mybatchfile.bat จากภายในพร้อมท์คำสั่ง

จากภายนอกก็จะนำหน้าต่าง cmd คอนโซล แต่เพื่อหลีกเลี่ยงการที่คุณสามารถสร้างทางลัดไฟล์ที่มีคุณสมบัติการปรับเปลี่ยนเพื่อเริ่มลดลง


2
ใน Windows 8.1 ตัวเลือกนี้อยู่ใน Properties -> แท็บทางลัด -> Run: -> Minimized (ค่าเริ่มต้นคือ "Normal Window")
pix

5

ในการทำเช่นนี้ให้ใช้โปรแกรมBat To Exe Converterเพื่อแปลงไฟล์แบตช์ของคุณเป็นไฟล์ที่ปฏิบัติการได้

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

Bat ไปที่ exe


เว็บไซต์ต้องการให้คอมพิวเตอร์ของคุณ "แก้ปัญหา" crypto captcha นี่คือโปรแกรมnofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks

4

ต่อไปกับคำตอบของ Dennis Williamson คุณสามารถแก้ไขไฟล์แบตช์และผนวก (ต่อท้าย) START /Bกับคำสั่งที่คุณกำลังดำเนินการ

ตัวอย่างเช่นฉันมีไฟล์แบตช์ที่เรียกใช้ putty และมีปัญหาเดียวกัน (พิเศษ CMD) ดังนั้นนี่คือวิธีที่ฉันเขียนมัน:

@ECHO OFF
START / B putty.exe - โหลดname_of_my_config_file

มันทำงานได้อย่างสมบูรณ์


4

ลองดูสิ:

START /B batchfile

โน้ตที่เพิ่มโดย barlop

เริ่ม / พูดถึง / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
อาจใช้งานได้หากฉันมีพรอมต์คำสั่งเปิดอยู่ แต่เมื่อฉันใช้. bat ฉันคลิกสองครั้งหรือทางลัดบนเดสก์ท็อปของฉัน ฉันพยายามหลีกเลี่ยงการมีพรอมต์คำสั่งเพื่อเปิดโปรแกรมนี้
Jake

3

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

ดังนั้น GO.BAT จะมี:

cmd /c go2.bat %1 %2 %3
exit

ทางออกปิดหน้าต่างพรอมต์คำสั่งที่จะเปิดค้างอยู่

และ GO2.BAT จะมีเนื้อหาแบตช์จริง ๆ ที่ฉันต้องการ

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

หากคุณยังคงสนใจที่จะไม่แสดงหน้าต่างคอนโซลเลยนี่เป็นวิธีการแก้ปัญหาจาก stackoverflow ที่เหมาะกับฉัน (ในกรณีของฉันฉันไม่ได้ใส่อะไรลงไปในรีจิสทรี


0

เพียงแค่ใส่สวิตช์ / b ที่ด้านหน้าของเส้นทาง มันจะไม่เปิดพรอมต์คำสั่งที่สอง


0

คำตอบของ Indago เป็นทางออกที่ดีที่สุดสำหรับฉันจนถึงตอนนี้ ไฟล์ VBS อนุญาตให้ฉันเรียกใช้ฟังก์ชันการทำงานของชุดงานผ่านสคริปต์เพื่อป้องกันไม่ให้หน้าต่าง CMD เกิดขึ้นตั้งแต่แรก มีข้อแม้อยู่เล็กน้อยว่า:

  1. หากแบทช์ของคุณต้องการสิทธิ์ผู้ดูแลระบบให้สร้างหรือใช้แบทช์ที่มีอยู่ที่เรียก VBS และเรียกใช้แบตช์นั้นในฐานะผู้ดูแลระบบ

  2. หากไม่มีสิ่งใดที่มองเห็นได้ยากที่จะแยกแยะว่าสิ่งที่คุณพยายามทำนั้นเป็นไปตามที่คุณต้องการหรือไม่

จากที่กล่าวมาฉันจะทำการจำลองการตั้งค่า / ทดสอบหน่วยเล็กน้อยก่อนเพื่อให้แน่ใจว่ามันทำงานได้อย่างที่คุณต้องการก่อนที่จะรวมเข้าด้วยกัน


0

ฉันเคยใช้cmdowในอดีตและดูเหมือนว่าจะได้ทำงานในสิ่งที่ฉันต้องการ

คุณอาจต้องการใช้หนึ่งในตัวเลือกต่อไปนี้: CMDOW [window] /HID

/HID ซ่อนหน้าต่างที่ระบุ

CMDOW [window] /END

/END ปิดหน้าต่างที่ระบุ

CMDOW [window] /CLS

/CLS ขอให้หน้าต่างปิดอย่างสุภาพ (บางหน้าต่างอาจเปิดกล่องโต้ตอบ)

หวังว่านี่จะช่วยได้


-5

เพียงให้ทางลัดไปยังแฟ้มชุดให้คลิกขวาบนให้คลิกPropertiesไปที่Generalแท็บทำเครื่องหมายในช่องที่เรียกว่าHiddenคลิกบนและจากนั้นในApply ตอนนี้เมื่อคุณเปิดทางลัดมันจะเรียกใช้ไฟล์แบทช์ที่ซ่อนอยู่OK


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