Test-Chemin d'accès ne retourne $True sur un fichier qui existe
Je suis en train de valider l'existence d'un fichier, mais le problème est que le nom de fichier a parenthèses dans le nom c'est à dire c:\test[R] 10005404, a Échoué avec Commentaires, [S] SiteName.txt.
J'ai essayé d'utiliser la chaîne .remplacement de la méthode, sans succès.
$a = c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt
$Result = (Test-Path $a)
# Returns $False even though the file exists.
Essayé
$a = $a.Replace("[", "`[")
$a = $a.Replace("]", "`]")
$Result = (Test-Path $a)
# Also returns $False even though the file exists.
Idées serait grandement apprécié.
Merci, Le Saint Chrême
Il devrait y avoir des guillemets autour du nom de chemin d'accès:
Un vieux Windows PowerShell Astuce de la Semaine explique pourquoi et les solutions de contournement. C'est une sorte de double question de powershell get-childitem ne peut pas gérer le nom commence par [ personnage même avec les caractères d'échappement
$a = 'c:\test\[R] 10005404, Failed with Comments, [S] SiteName.txt'
. Est-ce juste une faute de frappe, ou est-il dans votre code?Un vieux Windows PowerShell Astuce de la Semaine explique pourquoi et les solutions de contournement. C'est une sorte de double question de powershell get-childitem ne peut pas gérer le nom commence par [ personnage même avec les caractères d'échappement
OriginalL'auteur user991721 | 2012-04-13
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser l'-LiteralPath paramètre:
Crochets ont une signification spéciale.
C'est en fait une fonction POSIX de sorte que vous pouvez le faire:
Cela va vous donner toutes les choses dans le répertoire en cours qui commencent par la lettre A à F. Bash a la même fonction.
OriginalL'auteur Andy Arismendi
Il y a au moins trois façons de le faire fonctionner.
À l'aide de quelque chose de similaire à votre approche, vous avez besoin d'ajouter 2 backticks lors de l'utilisation de guillemets, car un seul de backtick seront évaluées comme un caractère d'échappement avant d'être envoyé à la
Replace
méthode.Utiliser des guillemets simples dans la
Replace
méthode permettra également d'éviter les backticks d'être retiré.Enfin, vous pouvez utiliser le
LiteralPath
paramètre de ne pas utiliser des caractères génériques (les crochets sont utilisés par PowerShell matchs de définir un ensemble de caractères qui peuvent être appariés).*.txt
aux côtés de fichiers ou de dossiers avec[
ou]
dans leurs nomsOriginalL'auteur Rynant