Как вырезать конкретную строку? - PullRequest
1 голос
/ 10 июня 2019

У меня есть строка с разной длиной.Я хочу вырезать конкретное слово в моей строке.Пожалуйста, помогите, я новичок в PowerShell.

Я пробовал этот код, он все еще не тот, который мне нужен.

$String = "C:\Users\XX\Documents\Data.txt"
$Cut = $String.Substring(22,0)
$Cut

Я ожидаю, что смогу вернуть слово Data.

Ответы [ 5 ]

4 голосов
/ 10 июня 2019

Если предположить, что строка всегда имеет один и тот же формат (то есть путь, оканчивающийся на имя файла), то существует довольно много способов сделать это, например, использовать регулярные выражения. Вот немного менее традиционный метод:

# Define the path
$filepath = "C:\Users\XX\Documents\Data.txt"

# Create a dummy fileinfo object
$fileInfo = [System.IO.FileInfo]$filePath

# Get the file name property
$fileInfo.BaseName

Конечно, вы можете сделать все это за один шаг:

([System.IO.FileInfo]"C:\Users\XX\Documents\Data.txt").BaseName
2 голосов
/ 10 июня 2019

Если путь уже существует, вы можете использовать

(Get-Item $String).BaseName

В противном случае

(Split-Path $String -Leaf) -Replace '\.[^\.]*$'
1 голос
/ 10 июня 2019

Есть несколько способов сделать это в зависимости от вашего ввода -

Метод 1 - Жесткое кодирование с использованием функции подстроки.

$String = "C:\Users\XX\Documents\Data.txt"
$Cut = $String.Substring(22,4)
$Cut

Вышеупомянутый подход будет работать для одного входа, но будет трудно управлять для нескольких входов различной длины.

Метод 2 - Использование метода split

$String = "C:\Users\XX\Documents\Data.txt"
$cut = $String.Split("\")[-1].split(".")[0]
$cut

Split метод разделит строку на подстроку. Индекс [-1] вернет последнее значение, возвращенное методом split. Второе разделение - вернуть слово Data из слова Data.txt.

Метод 3 - Если входной файл является путем к файлу

$string = Get-ChildItem $env:USERPROFILE\Desktop -File | select -First 1
$Cut = $String.BaseName

Подробнее о методе 3 здесь .

1 голос
/ 10 июня 2019

Хотя в этом конкретном примере самый простой способ - использовать Substring(startPosition,length) для извлечения имени файла, вы, вероятно, захотите использовать что-то вроде этого:

(("C:\Users\XX\Documents\Data.txt".split("\\"))[-1].Split("."))[0]

Объяснение:

("C:\Users\XX\Documents\Data.txt".split("\\"))[-1]

эта часть разделяет путь на \ и возвращает последний элемент (экранирование кажется не обязательным, поэтому вы можете использовать .split("\") вместо .split("\\")).От него вы получаете Data.txt, поэтому вы должны отделить имя и расширение.Вы можете сделать это, разделив на . и выбрав первый возвращенный элемент

0 голосов
/ 10 июня 2019

Если вы можете использовать Powershell 6 - SplitPath

#Requires -Version 6.0
Split-Path $String -LeafBase
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...