Powershell - исключить последнюю запись из массива из соединения - PullRequest
0 голосов
/ 10 апреля 2020

Мне было интересно, может ли кто-нибудь помочь мне с моей проблемой. у меня есть этот код:

$test = ForEach ($file from $folder){
        join-path -path $path -childpath $file
{
$test -join ","

если у меня есть, например, 12 записей в массиве, мне нужно, чтобы первые 11 имели "," путь \ file1.txt, путь \ file2.txt, ... путь \ файл11.txt, путь \ файл12.txt (должен быть результатом), но я получаю путь \ file12.txt,

как мне сделать, чтобы последняя запись не содержала ","?

любая помощь очень ценится.

спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

В качестве обходного пути вы можете сделать следующее:

$test = $test -replace ',[^,]*$'

Однако я бы исследовал причину проблемы root, так как может возникнуть ряд проблем (или не возникших проблем) с вашими данными. Ниже показано, как это может произойти, если ваш последний элемент $folder содержит запятую:

# Example 1
# The $folder final element contains a comma in its string
# The -join does not add the comma because it is part of the string already
$folder = 'one','two','three','four,'
$path = 'c:\temp'
$test = foreach ($file in $folder) {
    Join-Path -Path $path -ChildPath $file
}
$test -join ','

#output
c:\temp\one,c:\temp\two,c:\temp\three,c:\temp\four,

В приведенном выше примере мы должны иметь возможность посмотреть на последний элемент ([-1]) из $test и найдите запятую:

$test[-1]
#output
c:\temp\four,

См. Ниже, если $test манипулируют, чтобы добавить пустой (или $null) элемент в конце этого:

# Example 2
# $test gets a space added as the final element
$folder = 'one','two','three','four'
$path = 'c:\temp'
$test = foreach ($file in $folder) {
    Join-Path -Path $path -ChildPath $file
}
$test += ' '
$test -join ','

#output
c:\temp\one,c:\temp\two,c:\temp\three,c:\temp\four,

Последний элемент $test здесь будет пустой строкой:

PS > $test[-1]

PS >

Редактировать на основе комментариев:

Вы можете используйте оператор форматирования -f для форматирования каждой строки запроса. Затем используйте оператор -join, чтобы объединить все ваши строковые элементы.

$query = ForEach ($file in $test) {
    $sqlquery = Join-Path -Path $path -ChildPath $file
    "file='{0}'" -f $sqlquery
}
$query -join ",`n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...