2010-11-01 5 views
11

Je m'attends à ce que ce petit powerhell one liner fasse écho à un chemin complet vers foo.txt, où le répertoire est mon répertoire courant.

[System.IO.Path]::GetFullPath(".\foo.txt") 

Mais ce n'est pas le cas. Il imprime ...

C:\Documents and Settings\Administrator\foo.txt 

Je ne figure pas dans le répertoire $ home. Pourquoi résout-il là?

+2

vous devez utiliser Resolve-Path au sein Powershell. – x0n

Répondre

16

[System.IO.Path] utilise le processus de shell répertoire courant. Vous pouvez obtenir le chemin absolu avec l'applet de commande Resolve-Path:

Resolve-Path .\foo.txt 
+1

Ce comportement est non intuitif et incohérent avec tous les autres systèmes shell-scripting de la planète. Bien sûr. Merci aux utilisateurs de StackOverflow comme Shay, pour nous avoir aidés les simples humains à comprendre Powershell! –

+3

L'inconvénient de 'Resolve-Path' est qu'il ne peut résoudre que les chemins qui existent réellement. – herzbube

+0

Ah. Pour globaliser ou développer un chemin que vous envisagez de créer, vous ne pouvez pas l'utiliser. –

10

Selon la documentation de GetFullPath, il utilise le répertoire de travail en cours pour résoudre le chemin absolu. Le répertoire de travail courant Powershell est pas le même que l'emplacement actuel:

PS C:\> [System.IO.Directory]::GetCurrentDirectory() 
C:\Documents and Settings\user 
PS C:\> get-location 

Path 
---- 
C:\ 

Je suppose que vous pouvez utiliser SetCurrentDirectory pour les amener au match:

PS C:\> [System.IO.Directory]::SetCurrentDirectory($(get-location)) 
PS C:\> [System.IO.Path]::GetFullPath(".\foo.txt") 
C:\foo.txt 
+0

J'ai ma fonction d'invite faire cela, en mettant à jour le répertoire de travail en cours. – JasonMArcher

+0

Cela ne fonctionnera que si l'emplacement actuel est dans le système de fichiers. Vérifiez $ PWD.Provider.Name en premier. –

+0

chemin correct sans vérification du nom du fournisseur: [Environment] :: CurrentDirectory = (Get-Location -PSProvider FileSystem) .ProviderPath –

Questions connexes