2014-07-09 117 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. ".." 
}