у меня есть эта строка
"C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online\_vti_history\101376\Shared Documents\Global PKI\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx"
Мне просто интересно, как я могу отделиться от \_ и получить результат только так
vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx
Я пробовал использовать -split("\_"), но это не сработало.
$Path = "C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online\_vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx"
$Result = $Path -split('\_')[2]
любая помощь или предложение будут действительно оценены.
Вы должны экранировать специальные символы, такие как «\», с помощью «\». ;-)
Ты можешь сделать это
$myString = "C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online\_vti_history\101376\Shared Documents\Global PKI\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx" -split "(\\_)"
Write-Output $myString[2]
Выход: vti_history\101376\Shared Documents\Global PKI\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx
Это может быть $mystring[1] без круглых скобок.
Есть несколько неправильных вещей. Из-за высокого приоритета оператора с [2] вы разбиваете $null, поскольку ('\_') имеет только 2 символа. Скобки не нужны, но безвредны, так как -split не является функцией. Разделение на '\_'
приведет к ошибке синтаксического анализа регулярного выражения, поэтому обратную косую черту необходимо экранировать. Разделение на '(\\_)'
со скобками в кавычках приведет к включению в результат делителя.
$Path = 'C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online\_vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx'
($Path -split '\\_')[1]
vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx
$Path -split '\_'
parsing "\_" - Unrecognized escape sequence \_.
At line:1 char:1
+ $Path -split '\_'
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException
$Path -split '(\\_)'
C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online
\_
vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx
'\_'[2] -eq $null
True
Вы можете использовать одну из перегрузок функции string.split .net, где массив строк является первым аргументом (не массив символов), но для этого требуется второй аргумент. Тогда вам не нужно беспокоиться об экранировании символов регулярных выражений. С разделителем из одного символа проще.
# string[] Split(string[] separator, System.StringSplitOptions options)
$path.split([string[]]'\_','None')
# $path.split((,'\_'),0)
C:\Users\testinguser\OneDrive - Company\Desktop\Hello\Jobs\Testing-Online
vti_history\101376\Shared Documents\Global JLN\Legacy Stuff\Vehicle Credential Trackers\Tracker_JLN_records_USE.xlsx
Посмотреть все перегрузки:
$path.split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
По каким критериям вы хотите разделить? Почему бы не использовать
($Path -split 'Testing-Online\\_')[1]
? ;-) ... и кстати: "это не работает" совсем не помогает. ;-)