De lot ou de PowerShell: Comment faire pour obtenir le dernier mot de la chaîne?
Voici mon scénario:
J'ai un fichier texte contenant beaucoup de lignes. Chaque ligne est un chemin d'accès à un dossier.
Exemple: 000.txt
C:\Program Files (x86)\Microsoft Office\Office15
C:\Program Files (x86)\Common Files\Adobe\Acrobat
C:\Program Files (x86)\Common Files\Blizzard Entertainment
J'ai besoin de trouver un moyen d'obtenir le dernier enfant du nom de ce dossier pour chaque ligne et l'utiliser pour créer un lien dossier:
d:\>mklink /j office15 "C:\Program Files (x86)\Microsoft Office\Office15"
d:\>mklink /j acrobat "C:\Program Files (x86)\Common Files\Adobe\Acrobat"
d:\>mklink /j "Blizzard Entertainment" "C:\Program Files (x86)\Common Files\Blizzard Entertainment"
J'ai essayé ceci:
$a="C:\Program Files (x86)\Microsoft Office\Office15"
$a.Split()[-1]
Avec le résultat de:
Office\Office15
J'ai aussi essayé:
$a.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)[-1]
Et le résultat est:
5
Comment puis-je obtenir le dernier mot de chaque ligne ou mot après la dernière \
par l'aide de Lot ou de PowerShell?
- La variable doit être get-content
Vous devez vous connecter pour publier un commentaire.
À l'aide de Lot - jetez un oeil à la
for
de commande et de manipulation de chaîne. Vous pourriez faire quelque chose comme ce qui suit -Ce script parcourt le document texte (j'ai utilisé 000.txt, pourrait changer la à une variable), à chaque fois que le réglage de la variable
dir
à la ligne actuelle, qui nous supposons est un chemin d'accès au répertoire. Il prépare ensuite la chaîne de traitement par la commande (sans le commutateur /f pour parcourir en boucle à chaque caractère espace) par le remplacement de tous les espaces avec/
(un personnage qui a un nom de répertoire ne pouvait pas contenir) et tous les\
caractères avec un espace (de sorte qu'il est maintenant un espace entre chaque nom de répertoire). Pour la boucle, puis définit la variableldir
pour le dernier nom de répertoire.Je suppose que ces dossiers existent déjà, si il y a une façon totalement différente de celle à prendre en compte:
Donc, pour chaque nom de dossier que vous obtenez le DirectoryInfo objet en lien avec ce dossier. Ensuite, vous pouvez directement extrait de la dernière partie de la trajectoire de la
Name
propriété.Cela a aussi l'avantage que vous obtiendrez une erreur si l'une des cibles des dossiers n'existent pas avant d'essayer de vous lier à lui.
Vous étaient proches, mais j'ai oublié de spécifier le caractère que vous souhaitez fractionner la chaîne, alors la valeur par défaut de l'espace:
get-content filepaths.txt | % { $_.Split('\')[-1] }
Ici est un autre moyen simple de le faire en batch
~n
applique seulement aux noms de fichiers, et pas les répertoires.PowerShell est un utilitaire dédié pour le fractionnement des chemins dans leur chemin parent (préfixe de répertoire) de feuilles ou de composant (nom de fichier /nom de répertoire):
Split-Path
.Split-Path -Leaf
renvoie le dernier élément de chemin, seulement, ce qui permet à la solution suivante:Note la nécessité d'utiliser
cmd /c
, parce quemklink
est une commande interne decmd.exe
.