簡體   English   中英

Powershell從文件列表填充數組

[英]Powershell populate array from list of files

我需要使用基於文件名存儲在目錄中的文件名來填充powershell數組。 對於每組文件(請參閱示例文件夾結構),我都需要一個不同的數組,以用作另一個過程的一部分。

我希望這是自動的並且可以動態創建數組,所以我將擁有包含所有文件名的數組,這些文件名以processor123開頭,另一個為processorabcprocessorxyz 這些數組的名稱可以存儲在另一個名為$arrynames數組中。 如果引入了新處理器,它必須是動態的,我不想依靠用戶來輸入文件名。

示例文件夾結構;

c:\directory\processor123\processor123.log.20150604
c:\directory\processor123\processor123.log.20150603
c:\directory\processor123\processor123.log.20150602
c:\directory\processor123\processor123.log.20150601
c:\directory\processor123\processor123.log.20150531
c:\directory\processorabc.log.20150604
c:\directory\processorabc.log.20150603
c:\directory\processorabc.log.20150602
c:\directory\processorabc.log.20150601
c:\directory\processorabc.log.20150531
c:\directory\processorxyz.log.20150604
c:\directory\processorxyz.log.20150603
c:\directory\processorxyz.log.20150602
c:\directory\processorxyz.log.20150601
c:\directory\processorxyz.log.20150531

$ ArryNames

processor123
processorabc
processorxyz

$ processor123

c:\directory\processor123\processor123.log.20150604
c:\directory\processor123\processor123.log.20150603
c:\directory\processor123\processor123.log.20150602
c:\directory\processor123\processor123.log.20150601
c:\directory\processor123\processor123.log.20150531

$ processorabc

c:\directory\processorabc.log.20150604
c:\directory\processorabc.log.20150603
c:\directory\processorabc.log.20150602
c:\directory\processorabc.log.20150601
c:\directory\processorabc.log.20150531

因此,您想要對每個字符串執行以下操作:

  1. 提取文件名的第一部分
  2. 將整個字符串放入與第一部分匹配的數組中

正如注釋中已經提到的,您可以使用哈希表來保存數組,文件前綴是關鍵:

# Set up a hashtable
$HashTable = @{}

# Pipe your list of file paths to ForEach-Object
Get-Content C:\filenames.txt |ForEach-Object {
    # Extract the filename with [System.IO.Path]::GetFileName(), split it by dots and grab only the part before the first dot
    $Prefix = [System.IO.Path]::GetFileName($_) -split "\." |Select-Object -First 1
    # Use the extracted prefix to place the string in the correct hashtable entry
    $HashTable[$Prefix] += $_
}

現在,您可以使用以下命令引用前5個路徑: $HashTable["processor123"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM