Получить последнее вхождение символа из пути к файлу и получить только имя файла без расширения файла в PowerShell?

#powershell

Вопрос:

В принципе, я разделил путь к файлу, разделив его косой чертой («»). Мой код пытается в основном получить имя файла без расширения файла, так как оно мне нужно для выполнения другой операции. Однако я хочу убедиться, что этот код является динамичным в том смысле, что даже если в пути к файлу есть несколько точек (.) в пути к файлу, он все равно получит точное имя файла пути к файлу, но без расширения файла? В принципе, я просто хотел бы убедиться, что получу последнее вхождение . и имя файла без расширения файла из пути к файлу. Я пробовал использовать lastIndexOf, но он не работает. Заранее благодарю всех, кто откликнется на этот пост.

P.S. $части файла разделяются косой чертой, но я не знаю, почему это не отражается на сообщении

 $sql_return_path = C:DocumentsTesttestFileResult.txt

#Get file directory with no file name

$filedirectory = Split-Path -Path $sql_return_path

#Split file path to get file name

$fileparts = ($sql_return_path).Split("")

$fileobject = 0

foreach($x in $filename) {

    $filename = $fileparts[-1]

    #Test
    $filenamenoextension = $filename.LastIndexOf(".")[0]

    #Official
    #$filenamenoextension = $filename.split(".")[0]
    
    $fileobject  
}
 

В настоящее время результатом $filenamenoextension при разделении на точки («.») и получении индекса 0 является testFileResult, который представляет собой просто имя файла БЕЗ расширения файла «.txt».

Комментарии:

1. Можете ли вы обновить вопрос с помощью примеров входных и выходных данных?

2. Это то, что тебе нужно? $sql_return_path.Substring(0, $sql_return_path.LastIndexOf(".") 1)

3. Внимательно изучите свой код. $имя файла не определено, когда вы используете его в первый раз, и вы меняете его в цикле for, даже если это то, что вы повторяете.

Ответ №1:

Ответ №2:

Можно использовать System.IO.FileInfo объект для получения свойств BaseName и. Extension

 foreach ($f in Get-ChildItem $dir) {
  $content = New-Object System.IO.FileInfo($f)
  echo $content.BaseName
  echo $content.Extension
}