2017-11-17 44 views
-2

有益的堆棧溢出社區,名稱字符串的兩個部分作爲使用PowerShell

我與包含的信息,我需要在一個更大的字符串的兩件自動報告奏(.txt文檔)工作變量。我需要找到一種方法來從每個變量中創建變量,並使用它們傳輸到另一個命令中。報告淘汰

例子:

B072L8FX9H 2017-11-17 14:49:17 -05:00 2017-11-17 14:49:17 -05:00 D1 volenick amandun      - - 

我需要創建兩個變量,一個包含文本的第一位,文件名B072L8FX9H和含有最後一位一個變量,用戶名amandun

請注意文件名將始終爲10位數字,但用戶名長度會有所不同。此外,- -之前的末端空間有所不同。這些不一致使我不願意使用修剪,但我不反對。

假設我能得到這兩個變量,我相信我可以再管他們進入一個foreach聲明標記的實際文件

報告手續的其他例子:

B075XR6ZR1 2017-11-17 15:19:22 -05:00 2017-11-17 15:19:22 -05:00 D1 volenick pascalec      - - 

B01C5AVSBW 2017-11-17 15:21:40 -05:00 2017-11-17 15:21:40 -05:00 D1 volenick Gunthorp      - - 

B076FHS4CZ 2017-11-17 15:23:36 -05:00 2017-11-17 15:23:36 -05:00 D1 volenick amandun      - - 

我還沒有能構建一個適用於所有不一致情況的修剪命令。也許有更好的方法來提取這些變量。

感謝

編輯 - 這是我們最後使用的解決方案:

+0

我懷疑人們正在向下投票這個問題的一個明顯缺乏的努力,自己解決問題。你提到你嘗試過修飾的變體 - 詳細說明你嘗試過的可能會解決問題。也就是說,我可以想象你可能會嘗試什麼,並且知道Trim是這個特定工作的錯誤工具 - 所以你不能解決它。你給出了很好的有用輸入示例,並明確了你想要輸出的內容。就個人而言,我對這個問題沒問題。 –

+0

感謝馬特,我同意。我已經添加了我們最終要做的一點。再次感謝大家的幫助。 – Garrett

+0

不要忘記接受一個答案 - 也許是最接近你的解決方案。這將阻止人們重新回顧這個問題來嘗試回答它。 –

回答

1

這是檢索你想要的信息的方式。

$Parse = 'B072L8FX9H 2017-11-17 14:49:17 -05:00 2017-11-17 14:49:17 -05:00 D1 volenick amandun      - - ' 
$Parse = $Parse.Trim() 

$Parse -match '\w+\s+-\s+-$' >$Null #returns $True 

$Username = $Matches[0] -replace '\s+-\s+-' 
$FileName = ($Parse -split '\s')[0] 
+0

我也是從直線上的比賽開始,希望得到的領域也是如此,但是接下來要問的問題是「我怎麼也得到時間?」好的答案,但。 –

1

下面是另一種方法,即將所有字段拆分。

$test = @" 
B075XR6ZR1 2017-11-17 15:19:22 -05:00 2017-11-17 15:19:22 -05:00 D1 volenick pascalec      - - 
B075XR6ZR1 2017-11-17 15:19:22 -05:00 2017-11-17 15:19:22 -05:00 D1 volenick pascalec      - - 
B01C5AVSBW 2017-11-17 15:21:40 -05:00 2017-11-17 15:21:40 -05:00 D1 volenick Gunthorp      - - 
B076FHS4CZ 2017-11-17 15:23:36 -05:00 2017-11-17 15:23:36 -05:00 D1 volenick amandun      - - 
"@ 

# Depending on how you take your input, splitting the lines can be more straight forward. 
# This just splits lines by the - - at the end of each line, ignoring how 
# much whitespace is at the end of the line. 
# Get-Content from a file would automatically split the lines. 
$lines = $test -split "-\s*-\s*" 

foreach($line in $lines) 
{ 
    # split each field of the data based on contiguous whitespace. 
    # this will fail if you have whitespace in a name or file, for example. 
    $fields = $line -split "\s+" 
    Write-Output "$($fields[0]) $($fields[9])" 
} 

隨着輸出:

B075XR6ZR1 pascalec 
B075XR6ZR1 pascalec 
B01C5AVSBW Gunthorp 
B076FHS4CZ amandun 
相關問題