Yol dizgisinin formuna bağlı olarak farklı cmd davranışı


0

görüntü tanımını buraya girin Gelen cmdpencerede Ben edemez cdbir dizine bir kullanıcı ortam değişkeni tarafından ayarlanır eğer.
Değişken içerik tamam. Değişkenin içeriği tarafından ayarlanan dizine
gidersem cd, tamam da çalışır.

Bu cmddavranışı nazikçe açıklayabilir misiniz ?


1
Değişkenleri nasıl ayarlıyorsunuz? Bir dizin olmayan IB_ENVIRONMENT_PATHdeğişmez dizgiyi içeriyor gibiyim %IB_WORKSPACE_PATH%, bu yüzden açıkça cdiçine giremezsiniz (çalışma alanı yolunun genişlemesinin aksine)
Eric Renouf

Evet, sorun, doğrudan kullanılmasının, başka bir değişkenin içine yerleştirilmesinin genişletilmemesinin geniş bir gizli nedenidir.
Gangnus

Değişkenleri nasıl yaratırsınız?
Magnus

Yanıtlar:


3

Sen ayarlamanız gerekir IB_WORKSPACE_PATHayarladığınız önce env değişkeni IB_ENVIRONMENT_PATHaksi takdirde dolayısıyla geçerli bir yol olarak değil dize olarak yorumlanır ve edilecek. Değişken genişleme sadece bir kez yapılır.

Doğru:

set IB_WORKSPACE_PATH=c:\foo
set IB_ENVIRONMENT_PATH=%IB_WORKSPACE_PATH%\bar
echo %IB_WORKSPACE_PATH%
c:\foo
echo %IB_ENVIRONMENT_PATH%
c:\foo\bar

Yanlış:

set IB_ENVIRONMENT_PATH=%IB_WORKSPACE_PATH%\bar
set IB_WORKSPACE_PATH=c:\foo
echo %IB_WORKSPACE_PATH%
c:\foo
echo %IB_ENVIRONMENT_PATH%
%IB_WORKSPACE_PATH%\bar

düzenleme 2: Biraz daha test ettim .. Sistem diyaloğunu kullanarak ortam değişkenleri oluşturursanız, değer IB_ENVIRONMENT_PATHolarak doğru bir şekilde oluşturur ve REG_EXPAND_SZ( IB_WORKSPACE_PATHayrıca tanımlandığı sürece) doğru şekilde ele alınır .

Bu yüzden asıl soru değişkenin nasıl ayarlandığıdır.


1
Benim örneğime bak. Ayarlanması gereken hususlar ...
Magnus

Görüyorum ... Sebebi gibi görünüyor. Ancak bu değişkenleri kullanıcı ortamı değişkenleri olarak ayarlıyorum. Oradaki emri nasıl etkileyebilirim?
Gangnus

Yapabileceğini sanmıyorum. Belki bunun yerine bir giriş komut dosyası kullanın?
Magnus

@Gangnus Bir olasılık, değişkenin türüne sahip olup olmadığına regeditbakmak HKCU\Environmentve emin olmak için kullanınIB_ENVIRONMENT_PATHREG_EXPAND_SZREG_SZ
Eric Renouf

2

Kullanıcı açıkça bir değişmezi %variable%başka bir değişken içinde saklarsa, o zaman çalışma zamanında daha sonra genişletilmemelidir, çünkü kullanıcı bu dizeyi yazdırmak isterse?

Geçici çözüm, callgecikmeli genişletme için kullanıyor

C:\Users\>set "IB_WORKSPACE_PATH=C:\Windows"

C:\Users\>set "IB_ENVIRONMENT_PATH=^%IB_WORKSPACE_PATH^%\System32"

C:\Users\>echo %IB_ENVIRONMENT_PATH%
%IB_WORKSPACE_PATH%\System32

C:\Users\>cd %IB_ENVIRONMENT_PATH%
The system cannot find the path specified.

C:\Users\>call echo %IB_ENVIRONMENT_PATH%
C:\Windows\System32

C:\Users\>call cd %IB_ENVIRONMENT_PATH%

C:\Windows\System32>

Gördüğün gibi, cdçalışmıyor ama call cdişe yarayacak


Sanırım, siz ve @Magnus'un iki cevabı, konuyla ilgili çok güzel bir makale yapabilir. Bütün bu bilgiler benim için çok yararlı. Ama üzgünüm, onu bir cevaplayıcı olarak işaretleyeceğim, çünkü ilk kişi oydu.
Gangnus
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.