Msys kabuğundan dahili cmd komutu nasıl çalıştırılır?


19

Windows CMDyardımcı programının birçok dahili komutu vardır mklink. Kabuktan nasıl kullanılabilirler msys?

Gönderen CMDbireyin belgelerinde , /canahtar bir komut ve çıkış çalıştırmak için kullanılabilir; ama bu işe yaramıyor gibi görünüyor.

  • Ben yaparsanız komutu yerine getirilmez ve kabuk çıkıldı edilmez.cmd /c mklinkmklinkCMD

Enter tuşuna basmadan önce:

resim açıklamasını buraya girin

Sonra:

resim açıklamasını buraya girin

Process Monitor ekran görüntüsü:

resim açıklamasını buraya girin

  • Komutu arka plan işlemi olarak çalıştırmayı denemek: cmd /c mklink &görünüşe göre çalışır - mklinkkomut yürütülür, ancak CMDkabuk sonlandırılmaz. Her Enterbasıldığında CMDaktif kabuk haline gelecektir.

cmd /c mklinkC kabuğumla, Cygwin'le bashve ile benim için çalışıyor cmd.exe. Ama yüksek koşmak zorunda kaldım yoksa başka bir şikayet aldım, "Bu işlemi gerçekleştirmek için yeterli ayrıcalığınız yok." Ben denemedim msysçünkü yüklü değil ama sorun bu şüpheci. Başka bir şey olduğundan şüpheleniyorum. Bir transkript ya da ne yaptığınızın ve olanların ekran görüntüsü yardımcı olabilir.
Nicole Hamilton

@NicoleHamilton, ekran görüntüleri eklendi. İçin mklinkişin, kabuk aslında yönetici olarak çalıştırılmak üzere ihtiyaç duyar; ama benim sorunum, cmdkabukları devralmadan veya arka planda çalışmadan iç komutlardan hiçbirini çalıştıramam. Bu sorun, yönetici gerektirmeyen daha basit komutlar için de mevcuttur dir.
Mihai Rotaru

Önleme olabilecek bir takma adınız, prosedür tanımınız veya komut dosyanız var cmdmı?
Nicole Hamilton

@NicoleHamilton, hayır; Ben @Maxiums' tavsiyesi ve ran Process Monitor aldı ve ben ekli ekran görüntüsünde görüldüğü üzere, mesele olmasıdır msysdönüştürür /ciçin c:\ . Cevap kaçmak ve komutu şu şekilde çalıştırmaktır cmd //c mklink.
Mihai Rotaru

Yanıtlar:


14
  1. % PATH% değerinizi cmd.cmd veya cmd.bat için arayın. Cmd'nize müdahale edebilirler

  2. Run Process Monitor ve keşfetmenize çalıştırın cmd /c mklink. ProcMon günlüğünü gerçekten yürütülen komutlar açısından inceleyin.


26
Process Monitor, sorunun izlenmesine yardımcı oldu. O olmasıdır msysdönüştürür /ciçin c:\ ; o kaçtı gerekiyor: cmd //c mklink. Bu dönüşümlerin yapılma şekli burada açıklanmaktadır .
Mihai Rotaru

1
@MihaiRotaru bu yorum bir cevap olmalı
laktak

2

win7 / cygwin / bash'da aynı sorun vardı, çözüm cmd'yi iki kez başlatmak ve eğik çizgileri cmd'nin gerektirdiği şekilde ters eğik çizgilere dönüştürmektir (örneğin): REPO_DIR=${REPO_DIR////\\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd /C "cmd /C mklink /D .Repo $REPO_DIR" # launch cmd /C cmd /C cmd


1

Process Monitor, sorunun izlenmesine yardımcı oldu. O olmasıdır msysdönüştürür /ciçin c:\; o kaçtı gerekiyor: cmd //c mklink. Bu dönüşümlerin yapılma şekli burada açıklanmaktadır . - Mihai Rotaru 1 Ocak 13, 21:32

Bunu sadece Mihai'nin yorumuna dayanarak çalıştıramadım , çünkü yol hala içinde eğik çizgiler içeriyordu /ve bunun geçerli bir anahtar olmadığını mklinkşikayet etti /msys64.

Bu yüzden çalışmasını sağlamak için bir toplu senaryo yazdım.

Toplu komut dosyamı MSYS'den şöyle çağırırım:

 $ mingw_ln.bat "$destination" "$targetpath"

Ve, toplu komut bu iki yol alır ve dönüştürür /için \kullanarak, :OLD=NEWdize değiştirmeleri için parametre genişletme sözdizimi. 1

set LINK=%1
set TARGET=%2

REM Convert POSIX paths to Windows paths
set LINK=%LINK:/=\%
set TARGET=%TARGET:/=\%

mklink /D %LINK% %TARGET%

1 Bu, ${PARAM:/OLD/NEW}aşina olanlar için bash sözdizimine benzer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.