cmd.exe กำหนดส่วนขยายเชลล์“ Open Command Prompt here”


4

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

ฉันใส่คีย์รีจิสทรีใหม่ที่

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor/AutoRun

ด้วยมูลค่า

title %cd% 

สคริปต์นี้รันพร้อมต์รับคำสั่งทุกครั้งที่เริ่มต้น วิธีนี้ใช้ได้ผล เมื่อใดก็ตามที่ฉันเปิดพรอมต์คำสั่งผ่านทางลัดสิ่งนี้จะทำงานได้อย่างถูกต้อง

อย่างไรก็ตามเมื่อใดก็ตามที่ฉันเปิดพรอมต์คำสั่งด้วยการคลิกขวา - & gt; เปิดพร้อมท์คำสั่งที่นี่ดูเหมือนว่าไม่ได้ดำเนินการ ฉันลองดูคำสั่ง shell เพื่อเปิดที่นี่อยู่ที่

HKEY_CLASSES_ROOT/Directory/shell/cmd/command

ซึ่งค่าเริ่มต้นถูกตั้งค่าเป็น:

cmd.exe /s /k pushd "%V"

ฉันพยายามเปลี่ยนสิ่งนี้เป็น:

cmd.exe /s /k "cd %1 & title %cd%"

มีการแนะนำ "% 1" ในที่อื่น ๆ ทางออนไลน์สำหรับสคริปต์แบบเปิดที่นี่และหากฉันเข้าใจถูกต้อง & amp; ควรรันทั้งสองคำสั่ง อย่างไรก็ตามมันยังใช้งานไม่ได้ทุกครั้งที่ฉันเปิด command prompt ที่นี่ ไดเรกทอรีการทำงานถูกต้องแน่นอนชื่อหน้าต่างยังคงเป็น "C: \ Windows \ System32"

ตัวชี้ใด ๆ


ดูเหมือนว่า% cd% กำลังได้รับการประเมินก่อนดำเนินการ cd คุณไม่สามารถใช้ "cd %1 & title %1" ?
Paul

ไม่น่าทำงานเหมือนกัน
cemulate

ใช้งานได้หรือไม่หากคุณ hardcode ชื่อ? ฉันสงสัยว่ามันจะถูกแทนที่ผิดหรือเพียงแค่ไม่ได้ดำเนินการเลย
Paul

ใช่ดูเหมือนว่าจะไม่ถูกดำเนินการเลย
cemulate

เมื่อบันทึกคีย์ด้วยพา ธ ฮาร์ดโค้ด, kill explorer และรีสตาร์ทปรากฏว่าคำสั่งไม่ได้ถูกดำเนินการ เปิดพรอมต์ที่นี่ยังคงทำงานได้อย่างถูกต้องแม้ว่าฉันจะทำลายมันเป็นหลัก ฉันไม่รู้ว่าสคริปต์ตัวจริงจะเป็นอย่างไร
cemulate

คำตอบ:


4

คุณใกล้จะแก้ปัญหาแล้ว สำหรับฉันคำสั่งต่อไปใช้งานได้:

cmd.exe /s /k "pushd ""%V"" & title %V"

แก้ไข: มีหลายสถานที่ในรีจิสทรีที่สนับสนุนส่วนขยายเชลล์ "พร้อมรับคำสั่งที่นี่" เพื่อให้การเปลี่ยนแปลงนี้ทำงานอย่างต่อเนื่องในทุกวัตถุ (ไดเรกทอรีไดรฟ์และโฟลเดอร์พิเศษ) คุณจะต้องค้นหารีจิสทรีสำหรับการเกิดขึ้นทั้งหมดของ cmd.exe /s /k pushd "%V" และแทนที่ด้วยค่าด้านบน


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

นี่คือกุญแจที่คุณระบุในคำถามของคุณ ใช้งานได้กับไดเรกทอรีมาตรฐาน คุณอาจลองกับโฟลเดอร์พิเศษอย่าง "Desktop" หรือไม่? คุณต้องค้นหารีจิสตรี้สำหรับสิ่งที่เกิดขึ้นทั้งหมด cmd.exe /s /k pushd "%V" และแทนที่พวกเขา
MBu

Aaaaah เดสก์ท็อปเป็นกรณีทดสอบของฉัน ฉันคิดว่ามันจะเป็นไดเรกทอรีปกติ ฉันจะลองดูขอบคุณ!
cemulate

ค้นหาอินสแตนซ์ทั้งหมดของคำสั่งดั้งเดิมและแทนที่ด้วยงานของคุณในทุกกรณี คุณอาจเพิ่มส่วนนั้นลงในคำตอบจริงถ้าคุณต้องการ
cemulate

-1

ลองเว็บไซต์นี้พวกเหล่านี้มีประโยชน์จริงๆ พวกเขามีการพังของสวิทช์ทั้งหมด

http://ss64.com/nt/cmd.html

และไม่ฉันไม่มีความเกี่ยวข้องกับเว็บไซต์นั้นฉันแค่พยายามจะเป็นประโยชน์ พวกเหล่านี้รวมถึงเว็บไซต์ SuperUser.com ช่วยฉันด้วยหลายร้อยครั้ง

CMD.exe เริ่มเชลล์ CMD ใหม่และ (เป็นทางเลือก) รันคำสั่ง / โปรแกรมที่เรียกทำงานได้

Syntax
      CMD [charset] [options]
      CMD [charset] [options] [/c Command] 
      CMD [charset] [options] [/k Command] 

Options   
   /C     Run Command and then terminate
   /K     Run Command and then return to the CMD prompt.
          This is useful for testing, to examine variables

   Command : The command, program or batch script to be run.
             This can even be several commands separated with '&' 
             (the whole should also be surrounded by "quotes")

   /T:fg  Sets the foreground/background colours 
   /X     Enable extensions to CMD.EXE
   /Y     Disable extensions to CMD.EXE 
   /A     Output ANSI characters
   /U     Output UNICODE characters (UCS-2 le)
          These options will affect piping or redirecting to a file.
          Most common text files are ANSI, use these switches
          when you need to convert the character set.
   /D Ignore registry AutoRun commands
      HKLM | HKCU \Software\Microsoft\Command Processor\AutoRun
   /F:ON Enable auto-completion of pathnames entered at the CMD prompt
   /F:OFF Disable auto-completion of pathnames entered at the CMD prompt (default)At the command prompt Ctrl-D gives folder name completion and Ctrl-F gives File and folder name completion.

These key-strokes will display the first matching path. Thereafter, repeated pressing of the same control key will cycle through the list of matching paths. Pressing SHIFT with the control key will move through the list backwards. 
   /Q    Turn echo off
   /S    Strip quote characters from the command_line
   /V:ON Enable delayed environment variable expansion 
         this allows a FOR loop to specify !variable! instead of %variable% 
         expanding the variable at execution time instead of at input time. 
   /V:OFF Disable delayed environment expansion.

   Environment expansion preference can be set permanently in the registry
   HKLM | HKCU  \Software\Microsoft\Command Processor\DelayedExpansion
   Set to either 0x1 or 0x0

   /knetdiag /debug 
   /knetdiag /fix

   The knetdiag switches are undocumented and work in XP only
   they list and (may) fix these networking issues.If /C or /K is specified, then the remainder of the command line is processed as an immediate command in the new shell. Multiple commands separated by the command separator '&' or '&&' are accepted if surrounded by quotes.

ตรรกะต่อไปนี้ใช้เพื่อประมวลผลอักขระอัญประกาศ ("):

  1. หากตรงตามเงื่อนไขทั้งหมดต่อไปนี้เครื่องหมายคำพูดบนบรรทัดคำสั่งจะถูกเก็บรักษาไว้:
    • สวิตช์ไม่ / S (เครื่องหมายคำพูด)
    • เครื่องหมายคำพูดสองตัว
    • ไม่มีอักขระพิเศษระหว่างอักขระเครื่องหมายคำพูดสองตัวโดยที่พิเศษคือหนึ่งใน: & amp; & lt; & gt; () @ ^ |
    • มีอักขระช่องว่างอย่างน้อยหนึ่งตัวระหว่างอักขระเครื่องหมายคำพูดสองตัว
    • สตริงระหว่างอักขระเครื่องหมายคำพูดสองตัวคือชื่อของไฟล์เรียกทำงาน
  2. มิฉะนั้นพฤติกรรมเก่าคือการดูว่าอักขระตัวแรกเป็นอักขระเครื่องหมายคำพูดหรือไม่ถ้าใช่ให้ดึงอักขระนำหน้าออกแล้วลบอักขระเครื่องหมายคำพูดสุดท้ายบนบรรทัดคำสั่งโดยคงข้อความใด ๆ ในการลบลักษณะการทำงานนี้ให้ใช้อัญประกาศคู่ "" ที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดคำสั่ง เต็มจอ คีย์ผสม ALT + ENTER จะสลับหน้าต่าง CMD เป็นโหมดเต็มหน้าจอ กด ALT + ENTER อีกครั้งเพื่อกลับสู่หน้าต่างปกติ Command.com vs CMD.exe คำสั่งทั้งหมดในหน้าเหล่านี้สมมติว่าคุณกำลังเรียกใช้บรรทัดคำสั่ง 32 บิตหรือ 64 บิต (cmd.exe)

ตัวประมวลผลคำสั่งเก่า 16 บิต command.com ถูกจัดทำขึ้นเพื่อให้เข้ากันได้แบบย้อนหลังสำหรับแอปพลิเคชัน 16 บิต DOS Command.com มีฟังก์ชันการทำงานที่ จำกัด มากเมื่อเทียบกับ cmd.exe เช่น มันจะล้มเหลวในการตั้งค่า% errorlevel% หลังจากหลายคำสั่ง

หากคุณตั้งชื่อสคริปต์แบทช์ของคุณด้วย. CMD แทนที่จะเป็น. BATAT พวกเขาจะไม่ทำงานภายใต้ command.com แม้ว่าคัดลอกไปยังเครื่อง Windows 95

ตัวแปรสภาพแวดล้อม% COMSPEC% จะปรากฏขึ้นหากคุณกำลังใช้งาน CMD.EXE หรือ command.com

ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างสคริปต์. CMD และ. BAT (ทำงานภายใต้ CMD.EXE) คือเมื่อเปิดใช้งานส่วนขยายคำสั่งเช่น PATH / APPEND / PROMPT / SET / ASSOC จะรีเซ็ต ERRORLEVEL เป็น 0 หากพวกเขาประสบความสำเร็จ ในไฟล์. BAT แบบเก่า ERRORLEVEL จะไม่เปลี่ยนแปลงเว้นแต่จะมีข้อผิดพลาดใหม่ (แหล่งที่มา) บน Windows รุ่น 64 บิต CMD.exe 32 บิตสามารถพบได้ที่% windir% \ SysWoW64 \ cmd.exe เพื่อลดปัญหาความเข้ากันได้ระบบย่อย WOW64 แยกไบนารี 32- บิตจากไบนารี 64 บิตโดยเปลี่ยนเส้นทางการโทรรีจิสทรีและบางส่วน การเรียกระบบไฟล์ เปิด CMD จาก Windows Explorer คุณสามารถเปิดพรอมต์ CMD ใหม่ได้โดยเลือก START, RUN, cmd, OK คีย์รีจิสทรี: อนุญาตเส้นทาง UNC ที่พร้อมท์คำสั่ง [ตัวประมวลผล HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command] "DisableUNCCheck" = DWORD: 00000001

; เรียกใช้คำสั่งเมื่อ CMD.exe เริ่มทำงาน [ตัวประมวลผล HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command] "การทำงานอัตโนมัติ" = -

; เปิดใช้งานการทำให้สมบูรณ์อัตโนมัติ [ตัวประมวลผล HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command] "CompletionChar" = 0x9

; สำหรับ Windows 7: เพิ่มตัวเลือก 'Open CMD prompt ที่นี่ (Admin)' ตัวเลือกไปที่ ; เมนูบริบทสำหรับโฟลเดอร์ระบบไฟล์: [HKEY_CLASSES_ROOT \ Directory \ shell \ runas] @ = "เปิดพร้อมท์ CMD ที่นี่ (ผู้ดูแลระบบ)" [HKEY_CLASSES_ROOT \ ไดเรกทอรี \ shell \ runas \ คำสั่ง] @ = "cmd.exe / k pushd% L"

; สำหรับ Windows 7: เพิ่มตัวเลือก 'Open CMD prompt ที่นี่ (Admin)' ตัวเลือกไปที่ ; เมนูบริบทคอมพิวเตอร์ของฉัน: [HKEY_CLASSES_ROOT \ CLSID {20D04FE0-3AEA-1069-A2D8-08002B30309D} \ shell \ runas] @ = "เปิดพรอมต์ CMD ที่นี่ (ผู้ดูแลระบบ)" [HKEY_CLASSES_ROOT \ CLSID {20D04FE0-3AEA-1069-A2D8-08002B30309D} \ shell \ runas \ คำสั่ง] @ = "cmd.exe" ประวัติคำสั่งก่อนหน้า การกดลูกศรขึ้นจะแสดงรายการคำสั่งก่อนหน้านี้ที่ป้อนที่พร้อมท์คำสั่ง ปุ่มฟังก์ชั่นอื่น ๆ ของ DOSKEY ถูกโหลดตามค่าเริ่มต้น (F7, F8, F9) คัดลอกและวาง / QuickEdit ในการทำให้การใช้การตัดและวางที่ Command Prompt ง่ายขึ้นให้เปิดใช้งานโหมด QuickEdit ดังนี้: เปิดใช้งานเมนูควบคุมที่ด้านบนซ้ายของหน้าต่าง cmd ปัจจุบันไปที่คุณสมบัติแท็บตัวเลือกแล้วติ๊กกับโหมด QuickEdit ตอนนี้คุณสามารถเลือกข้อความด้วยเมาส์แล้วกด Enter (หรือคลิกขวา) เพื่อคัดลอกไปยังคลิปบอร์ด วางที่ใดก็ได้โดยใช้ Control + V (หรือคลิกขวา) หรือผ่านเมนู ESC จะยกเลิกการเลือกใด ๆ และกลับสู่โหมดแก้ไข เมื่อคัดลอกระหว่างหน้าต่างคุณอาจต้องคลิกหนึ่งครั้งเพื่อเลือกหน้าต่างและคลิกสองครั้งเพื่อวาง เรียกใช้ CMD.exe หลายอินสแตนซ์ ที่บรรทัดคำสั่งหรือในชุดสคริปต์ CMD จะเริ่มต้นอินสแตนซ์ใหม่ของ CMD.exe ซึ่งจะปรากฏในหน้าต่างเดียวกัน คำสั่ง EXIT จะปิดอินสแตนซ์ CMD ที่สองและกลับไปที่เชลล์ก่อนหน้า

วิธีการเรียกสคริปต์ Batch หนึ่งจากอีกสคริปต์หนึ่งคือการเรียกใช้คำสั่งเช่น CMD / c C: \ docs \ myscript.cmd

เอาต์พุตของ CMD สามารถเปลี่ยนเส้นทางไปยังไฟล์ข้อความ ขอให้สังเกตว่าในกรณีที่ใช้ CMD / c คำสั่ง EXIT ไม่จำเป็น

ตัวแปรสภาพแวดล้อม% CMDCMDLINE% จะขยายเข้าไปในบรรทัดคำสั่งดั้งเดิมที่ส่งไปยัง CMD.EXE CMD.exe รุ่นเนทิฟอยู่ใน% windir% \ system32 เสมอบนระบบปฏิบัติการ 64 บิตนอกจากนี้ยังมี CMD.exe 32 บิตใน% windir% \ SysWOW64

หยุดชั่วคราวหรือหยุดสคริปต์ชุดงาน การดำเนินการของแบตช์สคริปต์ใด ๆ สามารถหยุดชั่วคราวโดยกด CTRL-S นอกจากนี้ยังใช้สำหรับหยุดคำสั่งเดียวเช่นรายการ DIR กดปุ่มใด ๆ จะกลับมาดำเนินการต่อ

การดำเนินการของสคริปต์ชุดใด ๆ สามารถหยุดได้โดยกด CTRL-C

หากไฟล์แบตช์หนึ่งถูกเรียกไฟล์แบตช์อื่น CTRL-C จะออกจากทั้งสองชุดสคริปต์ หากใช้ CMD / c เพื่อเรียกไฟล์แบตช์หนึ่งจากอีกไฟล์หนึ่ง CTRL-C จะทำให้แบทช์สคริปต์หนึ่งเดียวสิ้นสุดลง (ดูเพิ่มเติมที่ EXIT)

คำสั่งยาวและชื่อไฟล์แบบยาว ภายใต้ Windows XP บรรทัดคำสั่ง CMD จำกัด ไว้ที่ 8,191 ตัวอักษร สำหรับ Windows ทุกรุ่น NTFS และ FAT อนุญาตให้ใช้ชื่อพา ธ ได้สูงสุด 260 ตัวอักษร

วิธีแก้ปัญหาสำหรับความยาวชื่อพา ธ ที่ จำกัด คือการใส่คำนำหน้า \? \
ตัวอย่างเช่น:
\ \ C: \ Temp \ Long_Directory \ Long_Filename.txt
errorlevel
CMD / C จะส่งคืนระดับข้อผิดพลาดตัวอย่างเช่น CMD / c dir Z: โดยที่ไม่มีไดรฟ์ Z: จะส่งกลับ% errorlevel% = 1 ไปยังเชลล์ CMD ที่เรียกใช้
ส่วนขยายคำสั่ง
ฟังก์ชันการทำงานส่วนใหญ่ของ CMD.exe สามารถปิดใช้งานได้ซึ่งจะมีผลกับคำสั่งภายในทั้งหมดส่วนขยายคำสั่งจะถูกเปิดใช้งานตามค่าเริ่มต้น สิ่งนี้ถูกควบคุมโดยการตั้งค่าในรีจิสตรี: ตัวประมวลผล \ EnableExtensions HKCU \ Software \ Microsoft \ Command หรือภายใต้ Win XP คุณสามารถเรียกใช้ CMD / e: เปิดหรือ CMD / e: off
ตัวอย่าง:
เรียกใช้โปรแกรมและส่งผ่านพารามิเตอร์ชื่อไฟล์:
CMD / c write.exe c: \ docs \ sample.txt
เรียกใช้โปรแกรมและผ่านชื่อไฟล์แบบยาว:
CMD / c write.exe "c: \ sample documents \ sample.txt"
ช่องว่างในเส้นทางโปรแกรม:
CMD / c "" Office \ Office \ Winword.exe Files \ Microsoft Files \ Microsoft c "โปรแกรม
ช่องว่างในพารามิเตอร์เส้นทางของโปรแกรม +:
CMD / c "" c: \ Program Files \ demo.cmd "" พารามิเตอร์ 1 Param2
ช่องว่างในพารามิเตอร์ Program Path + พร้อมช่องว่าง:
CMD / k "" c: \ batch files \ demo.cmd "" พารามิเตอร์ 1 พร้อมช่องว่าง "" พารามิเตอร์ 2 พร้อมช่องว่าง ""
เรียกใช้การสาธิต 1 จากนั้นเรียกใช้การสาธิต 2:
CMD / c "" c: \ Program Files \ demo1.cmd "& amp;" c: \ Program Files \ demo2.cmd ""
“ ผู้ที่สามารถควบคุมตนเองสั่งผู้อื่นได้” - Hazlitt

ที่เกี่ยวข้อง:

EXIT - ใช้สิ่งนี้เพื่อปิดเชลล์ CMD และย้อนกลับ
CALL - เรียกโปรแกรมแบทช์หนึ่งจากอีกโปรแกรมหนึ่ง
START - รันโปรแกรมคำสั่งหรือไฟล์แบตช์
DOSKEY แก้ไขบรรทัดคำสั่งจำคำสั่ง
Q156276 - Cmd ไม่สนับสนุนชื่อ UNC เป็นไดเรกทอรีปัจจุบัน
Powershell: คุณสามารถเรียกใช้เชลล์ CMD ภายใต้ Powershell, Exit จะส่งคุณกลับไปที่พรอมต์ PS
คำสั่ง bash เทียบเท่า (Linux): bash - รันเชลล์ bash (เช่น csh, ksh, sh)


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