Soru Komut satırı .cmd / .bat komut dosyası, çalışan komut dizininin nasıl alınacağı


Çalıştırılan komut dosyasının dizinini nasıl alabilir ve .cmd dosyasında kullanabilirsiniz?


76
2017-09-24 21:32


Menşei


olası kopyası Windows'da toplu komut dosyasının yolunu nasıl edinebilirim? - Celada


Cevaplar:


Raymond Chen'in birkaç fikri var:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx

MSDN arşivleri bir şekilde güvenilmez olma eğiliminde olduğu için burada tam olarak alıntılanmıştır:

Kolay yolu kullanmaktır %CD% sözde değişkeni. Bu genişler   geçerli çalışma dizini.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory 

(Tabii ki, dizin kaydetme / geri yükleme daha kolay olabilir   ile yapıldı pushd/popdama buradaki nokta bu değil.

%CD% hile komut satırından bile kullanışlı. Mesela ben   sık sık kendimi istediğim bir dosyanın bulunduğu bir dizinde buldum   Çalıştır ama ... oh, sırayla başka bir dizine ihtiyacım var   Bu işlemi gerçekleştirmek için.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args 

(Kullanmayı severim %_% Benim çizdiğim ortam değişkeni olarak.)

tip SET /? Komut tarafından sağlanan diğer sözde değişkenleri görmek   işlemci.

Ayrıca makaledeki yorumlar, örneğin şu şekilde taranmaya değer:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Bu% ~ dp0 kullanımını kapsar:

Toplu iş dosyasının nerede olduğunu öğrenmek isterseniz: %~dp0 

%0 toplu iş dosyasının adıdır. ~dp size sürücü ve yol verir   belirtilen argüman.


55
2017-09-24 21:34



Bu soruya cevap vermiyor. % CD%, geçerli dizini verirken, sorulan soru, komut dosyasının dizini idi. - ketorin
@ketorin: Bu DOES soruyu cevapla. Komut dizininin kullanım sırasında dizinini değiştirmesi durumunda% CD% değişecektir (pushd / cd / ..) ancak % ~ Dp0 irade DEĞİL değiştirin ve her zaman komut dosyasının bulunduğu yere bakın. - Jay
-1 Bunun soruyu cevaplayıp cevaplamadığını söyleyemem. Bana bir örnek gösterebilir misin? - Iain Samuel McLean Elder
@IainElder - muhtemelen haklısınız, bu cevabı birkaç gün önce tekrar ziyaret ettim ve bundan çok memnun değildim. Raymond Chen'in blogunda bahsettiğim yorumlar MS tarafından ihmal edilmiş gibi görünüyor - dolayısıyla tamamen dışsal kaynaklara dayanan cevapların tehlikeleri yatıyor. Cevabımı yedeklemek için başka bir malzeme bulmaya çalıştım ama çok uzun zaman önce şimdi zamanların sislerinde. Silme için işaretleme. Beni bununla kenara attığın için teşekkürler :) SkyScanner için işe yaramaz mısın? - Kev
@Kev Yardımcı kısmı Yığın Taşması'na kopyalarsanız, dış kaynaklara başvurmak yeterlidir. Sanırım artık çok geç! Ve evet, Skyscanner'ın veri merkezinde; - Iain Samuel McLean Elder


Bu, komut dosyasının yoluna eşdeğerdir:

%~dp0

Bu, toplu parametre uzantısı sözdizimini kullanır. Parametre 0 her zaman betiğin kendisidir.

Komut dosyanız C:\example\script.bat, sonra %~dp0 değerlendirir C:\example\.

ss64.com Parametre uzantısı sözdizimi hakkında daha fazla bilgiye sahiptir. İşte ilgili alıntı:

Herhangi bir parametrenin değerini, komut satırında bir% ve ardından sayısal konum kullanarak alabilirsiniz.

[...]

Bir dosya adı sağlamak için bir parametre kullanıldığında, aşağıdaki genişletilmiş sözdizimi uygulanabilir:

[...]

% ~ d1% 1’i sadece bir Drive mektubuna genişlet - C:

[...]

% ~ p1% 1'i yalnızca bir Yol'a genişletin örn. \ utils \ bu, bazı komutlar tarafından bir çıkış karakteri olarak yorumlanabilecek bir takip içerir.

[...]

Yukarıdaki değiştiriciler birleştirilebilir:

% ~ dp1% 1'i bir sürücü harfine ve yoluna genişlet

[...]

Toplu komut dosyasının yol adını% 0 ile alabilirsiniz, parametre uzantıları buna uygulanabilir.% ~ Dp0, Drive ve Yolu toplu komut dosyasına döndürür, örn. W: komut \ \


138
2017-09-24 21:38



Tam olarak ihtiyacım olan şey. Ve bu anwser'ımı blog'uma bir hatırlatıcı olarak bağladım :) - Olivier H
Alıntıdaki metinde bir hata / hata olup olmadığından emin değilim, ancak betiğimde sürücü harfini almak için "% ~ d0" ye ihtiyacım var! Benim durumumda% ~ d1 boş. - eftokay83
Gözlerim / durumumda bu kabul edilen cevaba göre daha üstündür. Komut satırı komut dosyasını "Yönetici olarak" çalıştırırsanız (sağda), komut dosyanız Windows \ system32'den yürütülür. Kabul edilen cevap size script konumunu vermez, size Windows \ system32'yi tekrar verecektir. Yani BU cevap düzeltmenize yardımcı olur, senaryonuzu cd% ~ dp0 ile başlatırsın - Jaroslav Záruba


for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Kaynak


1
2017-12-23 17:06