2017-02-09 1 views
1

Как я могу читать массивы из файла в переменные с помощью powershell? Мой ListOfFileNames.txt имеет массивы, которые, как это:Как читать массивы в переменных из определенного файла с помощью Powershell для работы с переменными в Powershell

#Begin ArrayOneList: 
Filename4.txt 
FilenameD.png 
myone.exe 

#Begin ArrayTwo: 
myFile2.txt 
Filename1.gif 

#Begin ArrayNextOne: 
speficifFile.doc 
ExcelFile.xls 
File3.png 
AnotherFile.png 
logFile.log 

Теперь я хочу, чтобы прочитать Массивы в переменные и работать с ними в Powershell:

$ArrayOneList = Get-Content C:\Scripts\ListOfFileNames.txt 
foreach($File in $ArrayOneList) 
{ 
    $Weekday = $File.LastWriteTime.DayOfWeek 
    $Destination = "D:\Test\$Weekday" 

    Copy-Item $File.FullName -Destination $Destination -Recurse  
} 


$ArrayTwo = Get-Content C:\Scripts\ListOfFileNames.txt 
foreach($File in $ArrayTwo) 
{ 
    $Weekday = $File.LastWriteTime.DayOfWeek 
    $Destination = "E:\Dir\Dest" 

    Copy-Item $File.FullName -Destination $Destination -Recurse  
} 


$ArrayNextOne= Get-Content C:\Scripts\ListOfFileNames.txt 
foreach($File in $ArrayNextOne) 
{ 
    $Weekday = $File.LastWriteTime.DayOfWeek 
    $Destination = "E:\Dir\SpecificDirectory" 

    Copy-Item $File.FullName -Destination $Destination -Recurse  
} 

Как я могу прочитать все Массивы от одного файла в переменные?

ответ

0

Вы можете сделать так:

param(
    [parameter(Mandatory=$true)] 
    [string[]]$myarr 
) 

См THIS пример также

В вашем случае, вы можете сделать так:

param(
    [parameter(Mandatory=$False)] 
    [string[]][email protected]("ArrayOneList","ArrayTwo","ArrayNextOne") 
) 
+0

Do Я называть это так: Powershell.exe -File «MyScriptPath-ps1» «ArrayOneList, ArrayTwo, ArrayNextOne» Как использовать параметры с вызовом массивов извне и только изнутри моего скрипта? – Mailo

+0

@ Майло: Да, вы должны так называть. Ссылка, которую я привел в этом примере, вы можете увидеть некоторые примеры и для этого –

+0

Нет примера, как он может использовать его при вызове параметров снаружи. Ich просто хочет вызвать poweeshellfile.ps1 с параметрами ug – Mailo

0

Если вы можете использовать JSON как формат в ваш входной файл можно просто «десериализовать» массив. Пример:

PS C:\temp> [string[]]$array = @("1","2","3") 

PS C:\temp> ConvertTo-Json $array 
[ 
    "1", 
    "2", 
    "3" 
] 

PS C:\temp> ConvertTo-Json $array | Out-File array.json 

PS C:\temp> Get-Content .\array.json | ConvertFrom-Json 
1 
2 
3 

PS C:\temp> [string[]]$array2 = Get-Content .\array.json | ConvertFrom-Json 

PS C:\temp> $array2.GetType() 

IsPublic IsSerial Name          BaseType                               
-------- -------- ----          --------                               
True  True  String[]         System.Array 

PS C:\temp> $array2 
1 
2 
3 

Для работы с несколькими массивами вы можете создать хеш-таблицу, содержащую эти массивы. Пример:

PS C:\temp> $arr1 = @("1","2") 

PS C:\temp> $arr2 = @("3","4") 

PS C:\temp> $arrays = @{"arr1"=$arr1; "arr2"=$arr2} 

PS C:\temp> $arrays 

Name       Value                                       
----       -----                                       
arr1       {1, 2}                                       
arr2       {3, 4}                                       


PS C:\temp> $arrays | ConvertTo-Json 
{ 
    "arr1": [ 
       "1", 
       "2" 
       ], 
    "arr2": [ 
       "3", 
       "4" 
       ] 
} 

PS C:\temp> $arrays | ConvertTo-Json | Out-File hash.json 

PS C:\temp> $recreatedHash = get-content .\hash.json | ConvertFrom-Json 

PS C:\temp> $recreatedHash 

arr1 arr2 
---- ---- 
{1, 2} {3, 4} 

Надежда, что помогает

+0

Извините, это кажется понятным для экспертов, но не для меня. Где я могу назвать свой ListOfFileNames.txt? Где объявить имя моего массива «ArrayOneList, ArrayTwo, ArrayNextOne ...»? – Mailo

0

Вот решение, чтобы прочитать содержимое текстового файла (небольшой), где части отделяются друг от друга пустой строкой:

# First read the file as one string 
$a = Get-Content 'D:\temp\test.txt' -raw 

# Get your arrays (here on the fact that the separator is an empty line 
$b = $a -split '\n\r' 

# Use array One 
foreach ($file in $($b[0] -split '\n')) 
{ 
} 

# You can use $b[1] for file two etc... 
+0

Мои массивы разделены # только записи разделены линией empy – Mailo

+0

Это не то, что вы даете в примере? Можете ли вы отредактировать свой образец, я отредактирую свой ответ. – JPBlanc

Смежные вопросы