Setel judul "buka perintah di sini" sebagai direktori tempat ia dipanggil

2

Saya tahu cara mengatur judul sebagai direktori saat ini dalam file batch biasa.

Saya ingin melakukan ini untuk jendela cmd yang terbuka ketika Anda melakukan "buka perintah jendela di sini" dari folder Windows (secara otomatis).

Saya tahu Anda dapat menjalankan file batch pada startup cmd apa pun dan saya telah melihat jawaban untuk mendapatkan nama direktori tetapi mencoba untuk mendapatkan nama direktori hanya memberi Anda nama langsung di mana autorun.cmdfile itu berada, bukan nama direktori yang " buka jendela perintah di sini cd.

Sepertinya pada saat autorun.cmddipanggil itu belum memiliki informasi tentang direktori yang akan berubah ke mana "jendela perintah terbuka di sini" dipanggil dari. Apakah itu masalahnya? Atau apakah masih ada cara untuk mengubah judul secara otomatis ke direktori saat ini?

masukkan deskripsi gambar di sini

laggingreflex
sumber
Apakah sebenarnya penting bahwa judul selalu menunjukkan direktori saat ini atau apakah cukup untuk menampilkan dir startup?
Mario

Jawaban:

2

Saya akan mencoba baris berikut:

for %a in (.) do title %~na

Atau dalam file batch Anda akan keluar dari %sekali:

for %%a in (.) do title %%~na

The for...doloop hanya ada untuk mendapatkan jalan saat ini menjadi variabel karena Anda tidak dapat menggunakan ~operator dengan variabel lingkungan seperti ( %cd%).

Namun, seperti yang Anda perhatikan, ini tidak akan berfungsi untuk "Command Prompt here", karena ini dijalankan sebelum direktori ditetapkan.

Untuk menghindari ini, Anda pada dasarnya harus mengubah baris perintah yang dipanggil setiap kali Anda menggunakan fungsi ini.

Ini dikontrol oleh dua variabel dalam Registry, keduanya merupakan sub kunci dari HKEY_CLASSES_ROOT\Directory:

HKEY_CLASSES_ROOT\Directory\shell\cmd\command: Kunci ini mendefinisikan perintah yang akan dijalankan ketika Anda Shift+ klik kanan ikon direktori / folder.

HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command: Kunci ini mendefinisikan perintah yang akan dijalankan ketika Anda shift+ klik kanan di suatu tempat di jendela Explorer yang terbuka.

Secara default, kedua nilai default ini diatur ke cmd.exe /s /k pushd "%V", yang akan membuka jendela perintah dan mengubah direktori ke parameter yang dilewatkan sebagai %V.

Jadi agar ini berfungsi, Anda harus mengedit dua nilai default dan menambahkan perintah dari atas, sedikit dimodifikasi. Cukup atur kedua nilai default untuk ini:

cmd.exe /s /k "pushd ""%V"" && for %%A in (%V) do @title %%~nA"

Perhatikan tanda kutip ganda untuk benar melarikan diri mereka, karena semuanya tertutup dalam satu pasang tanda kutip untuk kelompok segalanya untuk cmd.exe 's /kparameter. Di @sana akan menyembunyikan perintah agar tidak ditampilkan di dalam jendela perintah.

Ini berfungsi untuk saya, tetapi ada satu kebiasaan kecil yang terlibat: Jika nama direktori Anda berisi lebih dari satu titik, seperti one.two.three, ini akan menamai judul one.twosaja.

Perlu diingat juga bahwa judul tidak akan diperbarui ketika Anda CD ke direktori lain. Membuat ini bekerja akan sedikit lebih rumit (atau mungkin bahkan tidak mungkin; jangan coba-coba).

Mario
sumber
Terima kasih!!! Dua hal: Dalam kasus saya itu HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd\command. Dan: Ini mengabaikan spasi (Ini memberi judul "Folder" untuk "Folder Baru")
laggingreflex
@ laggingreflex: Itu pada dasarnya jalur yang sama. HKCRhanyalah "jalan pintas". :) Adapun mengabaikan ruang: Ya, itu mungkin beberapa sisa dari zaman DOS lama (seperti batasan satu titik).
Mario
Hmm. Saya mencobanya dan tidak berhasil. Kemudian saya mencari regedit untuk "cmd.exe / s / k pushd"% V "" dan menemukan beberapa entires, beberapa di antaranya saya tidak dapat mengedit (beberapa kesalahan). Itulah yang akhirnya saya edit dan berhasil. Mungkin ini hanya untuk kasus saya, saya memiliki beberapa pengaturan yang diaktifkan jadi saya tidak perlu menahan shift untuk mendapatkan "jendela perintah terbuka".
laggingreflex
Untuk menghindari harus menekan tombol shift, buka saja jalur yang dijelaskan dalam jawaban saya dan hapus Extendednilai di bawah cmdtombol. Meskipun memang memungkinkan beberapa alat lain mengedit izin dan semacamnya untuk menghindari modifikasi / reset lebih lanjut.
Mario
Ini bukan hanya kasus Anda, folder khusus seperti Desktop dll. Ditangani oleh kunci lain dalam registri. Dan tidak perlu menggunakan forperintah, cmd.exe /s /k "pushd ""%V"" & title %V"sudah cukup. Lihat pertanyaan ini: superuser.com/questions/414155/… (Sebelumnya ketika menulis jawaban saya untuk pertanyaan Anda, saya lupa bahwa pertanyaan itu sudah dijawab di tempat lain)
MBu
1

Terinspirasi oleh pertanyaan, saya telah menambahkan beberapa fungsi menyenangkan ke baris perintah pada Windows saya: perintah pseudocdn , pushdndan popdn(mengikuti N = acronymous new atau penamaan atau bahkan nonsens atau apa pun lainnya) yang berkaitan dengan cd, pushddan popdperintah. Mereka semu perintah membantu untuk menjaga saya cmdparalel judul jendela ke cmdjalur direktori saat ini sebagai berikut:

current directory    window title
------------------   --------------
X:\subpath\subfold   X:\ ..\subfold 
X:\folder            X:\folder
X:\                  X:\

untuk setiap drive X:dan kedalaman sewenang-wenang subpath.

Contoh kode: cdn.batditempatkan ke folder apa pun secara eksplisit dalam pathvariabel lingkungan.

@rem cdn.bat
@rem change directory (and drive) || abort script processing in case of bad success
@cd /D %* || @goto :eof
@rem eliminate (if any in %*) trailing backslashes, surrouding double-quotes
@rem and/or (combined) symbols to current, parent or root directory (., .., \)
@call :window_title "%CD%"
@rem or, to title window to bare folder name, use: 
@rem @for /F "tokens=*" %%G in ("%CD%") do @title %%~nG%%~xG
@goto :eof

:window_title
  @if "%~p1%~n1%~x1" == "\%~n1%~x1" (
    @rem window title to 'X:\folder' on highest-level path or to 'X:\' on drive root
    @title %~d1%~p1%~n1%~x1
  ) else (
    @rem window title to 'X:\...\folder' otherwise (i.e. nor root, nor highest-level)
    @title %~d1^\ ..^\%~n1%~x1
  )
  @exit /B

Senang berbagi kegembiraan saya.

JosefZ
sumber
0

Ini sekarang memungkinkan untuk selalu mendapatkan informasi terbaru secara otomatis setelah perintah apa pun, tanpa mendefinisikan ulang 'cd' dll. Lihat Ubah prompt perintah untuk hanya menampilkan nama direktori saat ini

mike_n
sumber
Selamat Datang di Pengguna Super! Seperti jawaban Anda yang lain (identik dengan jawaban ini), akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
bertieb
Juga, pos yang ditautkan telah dihapus, jadi tautan ini tidak mengarah ke mana pun.
fixer1234