Que diriez-vous quelque chose d'aussi simple que:
PS> gci . -r foo.txt
Il utilise implicitement le paramètre -filter (par poste) spécifiant foo.txt comme filtre. Vous pouvez également spécifier * .txt ou foo? .txt. Le problème avec StartsWith est que pendant que vous gérez la comparaison insensible à la casse, il y a toujours le problème que les deux/et \ sont des séparateurs de chemins valides dans PowerShell.
En supposant que le fichier ne peut pas exister et les deux fichier $ et le répertoire $ sont des chemins absolus, vous pouvez le faire le « PowerShell » chemin:
(Split-Path $file -Parent) -replace '/','\' -eq (Get-Item $directory).FullName
Mais ce n'est pas grand puisque vous avez encore canonique le chemin/-> \ mais au moins la comparaison de chaîne PowerShell est insensible à la casse. Une autre option consiste à utiliser IO.Path pour canaliser le chemin, par ex.:
[io.path]::GetDirectoryName($file) -eq [io.path]::GetFullPath($directory)
Un problème avec ceci est que GetFullPath sera également un chemin relatif d'un chemin absolu basé sur répertoire courant du processus qui plus souvent qu'autrement, est pas le même que répertoire courant de PowerShell. Donc, assurez-vous que $ directory est un chemin absolu même si vous devez le spécifier comme "$ pwd \ $ directory".
Je ne suis pas intéressé si le fichier existe, mais si son chemin est sous un répertoire. En outre, votre formatage n'est pas clair. –
Ouais, le formatage de code ici ne fonctionne pas bien pour PS. Ce n'est pas un fichier PS1 complet, juste des choses tapées sur la ligne de cmd PS. Votre question posée "Comment vérifier si un fichier est sous un répertoire donné ..." Il semble que l'autre réponse vérifie également un fichier, comme vous l'avez demandé. Je vois votre édition, mais comment un fichier peut-il avoir un chemin s'il n'existe même pas? – Bratch
Je pense que je comprends maintenant, vous avez ce chemin de fichier stocké quelque part, et vous voulez voir si la partie du chemin existe sous un autre chemin spécifié? – Bratch