บนบรรทัดรับคำสั่งของ windows ฉันจะรับพรอมต์ไดนามิคที่บอกตำแหน่งของฉันในระบบไฟล์ได้อย่างไร


5

ฉันพยายามแก้ไข CMD ของฉันเพื่อแสดงเฉพาะชื่อ dir ปัจจุบันแบบไดนามิก ชอบ:

Desktop $

เมื่อฉันเปลี่ยนโฟลเดอร์จะต้องได้รับการอัปเดต

มันไม่จำเป็นต้องเป็นรหัสใน หมดจด ไฟล์แบทช์มันอาจขึ้นอยู่กับคำสั่งภายนอกใด ๆ ทุบตี cygwin ฯลฯ

@echo off
set a=bash -c "pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'"    
%a%
cmd 

เอาท์พุท

_test-et
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. Tüm hakları saklıdır.
>> 

แต่

>> prompt %a%

จะช่วยให้

bash -c "pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'"

คำตอบ:


1

การใช้ PowerShell ของ Microsoft พรอมต์นั้นถูกสร้างขึ้นโดยฟังก์ชันที่สามารถทำอะไรได้เลย

ฟังก์ชั่นพรอมต์ที่ทำสิ่งที่คุณต้องการคือ:

function prompt { (Split-Path -Leaf $pwd) + '$ ' }

สำหรับข้อมูลเพิ่มเติมดู:

กำหนดค่า Windows Powershell เพื่อแสดงเฉพาะชื่อโฟลเดอร์ปัจจุบันในเชลล์พรอมต์
PowerShell เกี่ยวกับพรอมต์
พรอมต์ที่สมบูรณ์แบบสำหรับ Windows PowerShell


ได้เวลาปิดอายุ CMD แล้วและเปลี่ยนเป็น PowerShell :) ขอบคุณ ยากที่จะละทิ้งความเคยชิน แต่มีโอกาสมากที่ cygwin cd ~ ใช้งานได้กับ PowerShell แต่ไม่ได้อยู่ในหน่วย cmd
guneysus

4

ฉันเชื่อว่าคุณสามารถใช้ prompt คำสั่ง

PROMPT [text]

  text    Specifies a new command prompt.

Prompt can be made up of normal characters and the following special codes:

  $A   & (Ampersand)
  $B   | (pipe)
  $C   ( (Left parenthesis)
  $D   Current date
  $E   Escape code (ASCII code 27)
  $F   ) (Right parenthesis)
  $G   > (greater-than sign)
  $H   Backspace (erases previous character)
  $L   < (less-than sign)
  $N   Current drive
  $P   Current drive and path
  $Q   = (equal sign)
  $S     (space)
  $T   Current time
  $V   Windows version number
  $_   Carriage return and linefeed
  $$   $ (dollar sign)

If Command Extensions are enabled the PROMPT command supports
the following additional formatting characters:

  $+   zero or more plus sign (+) characters depending upon the
       depth of the PUSHD directory stack, one character for each
       level pushed.

  $M   Displays the remote name associated with the current drive
       letter or the empty string if current drive is not a network
       drive.

ตัวอย่าง:

setx PROMPT $P$S$$$S

ปรับปรุง

สร้างไฟล์แบตช์ที่มีรหัสด้านล่างและเรียกใช้

@echo off

set root=%~p0
for %%F in ("%root%.") do set "ParentFolder=%%~nF"
setx PROMPT %ParentFolder%$S$F$S

ผลลัพธ์คือ:

enter image description here


คุณเห็นข้างบนไหม CURRENT DIRECTORY ตัวแปร? มาทดสอบกันเถอะ เปิด cmd และตั้งค่าเป็น: set prompt=$B$C$D$E$F$G$H$L$N$P$Q$S$T$V$_$$ ซึ่งมีตัวแปรทั้งหมดยกเว้น $+ and $M. แต่ถึงกระนั้นฉันไม่สามารถเห็นผบ. คนปัจจุบันได้ แต่ให้ |(Pzt 04.11.2013←)<CC:\Users= 17:44:02,69Microsoft Windows [Version 6.3.9600] ทำไม? cmd.exe มีข้อผิดพลาดขนาดใหญ่หรือไม่
guneysus

@guneysus ฉันปรับปรุงคำตอบของฉัน :-)
stderr

ขอบคุณ แต่ฉันต้องเปลี่ยนเพราะโฟลเดอร์ปัจจุบันไม่ได้เป็นแบบไดนามิกและด้วย setx มันเป็นระบบกว้าง :) มันควรจะเป็น set ไม่ setx นอกจากนี้ฉันจะลองแทนที่ cd ฟังก์ชั่นเพื่ออัปเดตแบบไดนามิก
guneysus

2

ขึ้นอยู่กับรายการวิกิพีเดียสำหรับ AUTOEXEC.BAT prompt $P$G จะทำในสิ่งที่คุณต้องการ นี่คือโฮลด์จาก DOS เก่าที่ดี พระเจ้าเท่านั้นที่รู้ว่าทำไมบางสิ่งเช่นนี้จึงไม่เคยเป็นค่าเริ่มต้นตั้งแต่วันแรก ๆ ของ ... DOS3.3 หรือมากกว่านั้น


นี่ไม่ใช่สิ่งที่ OP ต้องการ มันให้เส้นทางที่สมบูรณ์ OP ต้องการเฉพาะส่วนสุดท้ายของไดเรกทอรีปัจจุบัน (ไม่มีพาเรนต์พา ธ ) และมันจำเป็นต้องเปลี่ยนเมื่อเปลี่ยนไดเรกทอรี เป็นไปไม่ได้ในปัจจุบัน prompt คำสั่ง อย่างน้อยก็ไม่ใช่ค่ะ cmd.exe.
Rik

0

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

นี่คือสิ่งที่ฉันทำตอนนี้ในทุกเครื่อง Windows ที่ฉันเข้าถึง:

SETX PROMPT "%username%@%computername% $P$_$G"

ซึ่งให้คุณพร้อมท์แสดงชื่อผู้ใช้ชื่อโฮสต์พา ธ เต็มไปยังโฟลเดอร์ปัจจุบันและบรรทัดใหม่ทั้งหมดสำหรับการพิมพ์

USERNAME@HOSTNAME C:\PATH\TO\CURRENT\FOLDER
>

SETX จัดเก็บตัวแปร (ในกรณีนี้คือ "PROMPT") อย่างถาวร (ผ่านการรีบูตจนกระทั่งคุณเปลี่ยน)

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