153 votes

Supprimer le chemin et l'extension d'un nom de fichier dans PowerShell

J'ai une série de chaînes de caractères qui sont des chemins complets vers des fichiers. J'aimerais enregistrer uniquement le nom du fichier, sans l'extension de fichier et le chemin d'accès principal. Donc, à partir de ceci :

c:\temp\myfile.txt

a

myfile

Je ne suis pas en train d'itérer dans un répertoire, dans ce cas quelque chose comme la fonction PowerShell basename pourrait être utilisée, mais je préfère m'occuper uniquement des chaînes de caractères.

170voto

Leonardo Points 1519

Il est beaucoup plus facile que je ne le pensais de résoudre le problème de l'affichage du chemin d'accès complet, du répertoire, du nom du fichier ou de l'extension du fichier.

                                           ## Output:
$PSCommandPath                             ## C:\Users\user\Documents\code\ps\test.ps1
(Get-Item $PSCommandPath ).Extension       ## .ps1
(Get-Item $PSCommandPath ).Basename        ## test
(Get-Item $PSCommandPath ).Name            ## test.ps1
(Get-Item $PSCommandPath ).DirectoryName   ## C:\Users\user\Documents\code\ps
(Get-Item $PSCommandPath ).FullName        ## C:\Users\user\Documents\code\ps\test.ps1

$ConfigINI = (Get-Item $PSCommandPath ).DirectoryName+"\"+(Get-Item $PSCommandPath ).BaseName+".ini"

$ConfigINI                                 ## C:\Users\user\Documents\code\ps\test.ini

Autres formes :

$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
split-path -parent $PSCommandPath
Split-Path $script:MyInvocation.MyCommand.Path
split-path -parent $MyInvocation.MyCommand.Definition
[io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name)

150voto

Keith Hill Points 73162

Il existe une méthode .NET très pratique pour cela :

C:\PS> [io.path]::GetFileNameWithoutExtension("c:\temp\myfile.txt")
myfile

70voto

CodeFox Points 301

Inspiré par un réponse de @walid2mi :

(Get-Item 'c:\temp\myfile.txt').Basename

Veuillez noter : cela ne fonctionne que si le fichier donné existe réellement .

33voto

walid2mi Points 1222

Ou

([io.fileinfo]"c:\temp\myfile.txt").basename

ou

"c:\temp\myfile.txt".split('\.')[-2]

28voto

walid2mi Points 1222

Vous pouvez utiliser nom de base propriété

PS II> ls *.ps1 | select basename

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X