Benzer sorunları yaşadım ve PowerShell'de (tam son kullanıcı GUI uygulamaları) yazılmış programlar yaptığım ve diskten yüklemem gereken çok fazla dosya ve kaynak var. Deneyimlerime göre, .
geçerli dizini temsil etmek için kullanmak güvenilmez. Geçerli çalışma dizinini temsil etmelidir, ancak genellikle göstermez. PowerShell'in, PowerShell'in içinden çağrıldığı konumu kaydettiği anlaşılıyor .
. Daha kesin olmak gerekirse, PowerShell ilk başlatıldığında, varsayılan olarak ana kullanıcı dizininizde başlar. Bu genellikle kullanıcı hesabınızın dizinidir.C:\USERS\YOUR USER NAME
. Bundan sonra, PowerShell, ya PowerShell istemini sunmadan ya da komut dosyasını çalıştırmadan önce dizini ya çağırdığınız dizine ya da yürüttüğünüz komut dosyasının bulunduğu dizine değiştirir. Ancak bu, PowerShell uygulamasının kendisi başlangıçta ev kullanıcı dizininizde başladıktan sonra olur.
Ve .
PowerShell başladığı ilk dizin içini temsil eder. Dolayısıyla .
, PowerShell'i istenen dizinden çağırdıysanız yalnızca geçerli dizini temsil eder. Daha sonra PowerShell kodunda dizini değiştirirseniz, değişiklik .
her durumda içeriye yansıtılmamış gibi görünür . Bazı durumlarda .
geçerli çalışma dizinini ve PowerShell'in (komut dosyası değil, kendisinin çağrıldığı) diğer dizinlerde tutarsız sonuçlara yol açabilir. Bu nedenle invoker betiği kullanıyorum. Tek komut içiyle PowerShell komut dosyası:
POWERSHELL
. Bu, PowerShell'in istenen dizinden çağrılmasını sağlar ve böylece.
geçerli dizini temsil eder. Ancak, dizini daha sonra PowerShell kodunda değiştirmezseniz çalışır. Bir komut dosyası durumunda, bir dosya seçeneği içermesi dışında, bahsettiğim sonuncuya benzer invoker komut dosyası kullanıyorum:
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Bu, PowerShell'in geçerli çalışma dizini içinde başlatılmasını sağlar.
Betiğe tıklamak, betiğin bulunduğu konum ne olursa olsun ana kullanıcı dizininizden PowerShell'i çağırır. Bu senaryo bulunduğu Geçerli çalışma dizini olmak dizin olan sonuç, ancak PowerShell çağırma dizin varlık C:\USERS\YOUR USER NAME
ve birlikte .
duruma göre, bu iki dizinlerden birini dönen, saçma şeydir.
Ancak tüm bu yaygarayı önlemek ve invoker komut dosyasını kullanmak için, geçerli çalışma dizinini veya komut dosyasının çağrıldığı dizini temsil etmek istediğiniz hava durumuna bağlı olarak geçerli dizini temsil etmek için $PWD
veya $PSSCRIPTROOT
yerine kullanabilirsiniz .
. Ve herhangi bir nedenle, .
geri dönen iki dizinden diğerini almak istiyorsanız, kullanabilirsiniz $HOME
.
Kişisel olarak sadece ana uygulama komut dizimi çağıran PowerShell ile geliştirdiğim uygulamalarımın kök dizini içinde invoker betiğim var ve basitçe, uygulamanızın kaynak kodundaki geçerli çalışma dizinini hiçbir zaman değiştirmemeyi hatırlıyorum, bu yüzden asla endişelenmem, ve .
geçerli dizini temsil etmek ve uygulamalarımda göreceli dosya adreslemeyi sorunsuz bir şekilde desteklemek için kullanabilirim . Bu, PowerShell'in daha yeni sürümlerinde (sürüm 2'den daha yeni) çalışmalıdır.