2012-04-25 7 views

Respuesta

43

Esta toma dos invocaciones de Split-Path AFAICT:

PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf 
dir3 
+0

gracias! pero en mi caso tuve que especificar -Leaf dos veces, también dentro de los corchetes donde escribiste -Parent, en mi caso quería el nombre de la carpeta más interna y mi ruta no contenía ningún nombre de archivo, solo carpetas. –

+2

¡Gracias! ¡El mío fue similar! Para mí utilicé <(Split-Path "\\ usa0xxxnas.na.xxx.net \ xxxbackups \ T_SQL_Web_Prod \" -leaf)> y me dio el directorio T_SQL_Web_Prod. – Michele

3

Si desea que sea sencillo y el camino va a ser en forma normal, puede utilizar String.Split():

"c:\dir1\dir2\dir3\file.txt".split("\")[-2] 
3

Otro opción usando System.Uri:

PS> ([uri]"c:\dir1\dir2\dir3\file.txt").segments[-2].trim('/') 
dir3 

Y si el archivo existe en el disco:

PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name 
+1

+1 Necesitaba obtener la ruta que incluye solo los primeros dos directorios en la ruta original y pude hacer eso en función de su respuesta usando '([uri]" c: \ dir1 \ dir2 \ dir3 \ file.txt ") .segments [1..3] -join "" 'que devuelve' c: \ dir1 \ dir2'. ¡Gracias! –

7

Esta pregunta se refiere específicamente a una fracción de ruta de lo que parece, pero algunas otras maneras son:

Si el archivo existe, me parece que es mucho más agradable que ver:

(Get-Item c:\dir1\dir2\dir3\file.txt).Directory.Name 

Si el archivo no existe, esto no funcionará. Otra forma en este caso es utilizar la API .NET, por ejemplo:

$path = [System.IO.Path]; 
$path::GetFileName($path::GetDirectoryName("c:\dir1\dir2\dir3\file.txt")) 
1

En general, si desea que el nombre del directorio que está en utilicé esto (gracias a Shay Levi por la idea original) :

PS> (dir) .directory.name [0]

Cuestiones relacionadas