2014-07-09 175 views
1

我有一個文件名列表&文本文件中的一個單獨的文件位置,我想讀入Powershell。輸入文件中有2列用逗號分隔。第一列給出文件共享的全名,包括文件名&第二列在其中包含圖像文件的部分路徑。例如:Powershell - 在兩個不同分隔符上分割字符串

\\myshare\backup\work\folder1\file1.txt,..\image\image1.tif 
\\myshare\backup\work\folder2\file2.txt,..\image\image2.tif 
\\myshare\backup\work\folder2\file2a.txt,\image\image3.tif 

不同的是,與..圖像文件夾之前的項是相對於其中file_.txt位於。在上面的例子 -

\\myshare\backup\work\image 

將是對同一水平folder1 & folder2的文件夾。 image1.tif & image2.tif將位於上述文件夾中。沒有前面..的人會是該文件的文件夾的子文件夾中的文件image3.tif將在此文件夾中:

\\myshare\backup\work\folder2\image\image3.tif 

我閱讀的文本文件,如下所示:

Get-Content "C:\Users\username\Documents\workfile.txt" | foreach { 
$fn, $location = $_.Split(',') 
} 

它分裂它沒關係,但我需要再次在斜槓上分割$location變量(\)。如果它有..,我想要做一件事,如果沒有,我會做一件事情。

如何在foreach循環中第二次(在另一個字符上)再次拆分字符串,並且已經拆分了字符串?我已經嘗試了幾個不同的東西,但每個都給出了錯誤消息,並且不運行。一條消息是「表達式只被允許作爲管道的第一個元素。」如果我嘗試再次分割它(在另一個foreach循環內),則會丟失兩個變量中的值($fn &,$location變量)。

+0

它被稱爲'Import-CSV'和'Split-Path' ..你也在做許多 – Cole9350

回答

0

您應該可以再次使用'split'運算符,這次在foreach循環中的$ location字符串中,將$ location字符串的每個「部分」拆分爲一個數組。然後,您可以檢查數組中的元素0以查看其是否包含「..」,如下所示:

Get-Content "C:\Users\username\Documents\workfile.txt" | foreach { 
    $fn, $location = $_.Split(',') 
    $locationparts= $location -split "\" 
    #$locationparts[0] is now the first part of the location string, e.g. ".." 
}