#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:
Вы можете просто использовать метод GetFileNameWithoutExtension из примера класса System.IO.Path
[System.IO.Path]::GetFileNameWithoutExtension("..xyzabc.de") # ==> "abc"
Ответ №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
}