2014-06-19 101 views
0

這是現在我的腳本:如何在PowerShell中將相同的變量寫入x次?

[int]$NumberOfProfiles = Read-Host "Enter the number of profiles You need" 
$WhereToWrite = Read-Host "Enter the full path where You'd like to install the profiles" 

$Source = Get-Location 
$FolderName = "Fish" 
$SourceDirectory = "$Source\$Foldername" 

$Variable1 = "Plane" 
$Variable2 = "Car" 
... 
$Variable100 = "Boat" 

while ($NumberOfProfiles -gt 0) { 
    $DestinationDirectory = Join-Path $WhereToWrite "$Foldername$NumberOfProfiles" 
    $PrefsDirectory = "$DestinationDirectory\Data\profile\prefs.js" 
$Changer = Get-Variable -Name "Variable$NumberOfProfiles" -ValueOnly 
    Copy-Item $SourceDirectory $DestinationDirectory -Recurse -Container 
    Write-Host "Made a new profile to" $DestinationDirectory 
     (Get-Content $PrefsDirectory) | %{$_.Replace("SomeInfo", "Changer")} | Set-Content $PrefsDirectory 
$NumberOfProfiles-- 
} 

我想實現的事情是,我會寫$變量1至五個第一複製文件夾等。

E.g.它看起來像這樣:在Fish1,Fish2,Fish3,Fish4,Fish5中的prefs.js中的「Plane」。 「Car」在Prefs.js中的Fish6,Fish7,Fish8,Fish9,Fish10等等。

+0

請退後一步並描述實際問題正在努力解決,而不是你認爲的解決方案。你想通過這樣做來達到什麼目的? –

+3

如果您必須使用100個變量,請使用[array](http://technet.microsoft.com/zh-cn/library/hh847882.aspx)。 – vonPryz

回答

2

將值放入一個數組中,並使用數組索引來選擇要寫入的數據。

我不知道你是怎麼得到的文件夾列舉,但是這會增加數值數組索引($ ValIdx)一次,每5度文件夾的增量($ I),通過500個文件夾增量:

$values = ("15","45"..."72") 
$ValIdx = 0 

for ($i = 1;$i -le 500;$i++) 
{ 
    '{0} {1}' -f $i,$ValIdx #Write $Values[$ValIdx] to $folders[$i] here 
    $valIdx += -not ($i % 5) 
} 

說明 - 模運算符(%)返回除法運算的其餘部分。 ($ i%5)將$ i除以5,並返回餘數。 -not正在評估它爲布爾(真/假)並返回相反的值。 $ ValIdx是一個[int],所以布爾值被強制爲[int]用於+ =操作。

當$ i是5的倍數時,($ i%5)爲零,它會以$ false的形式投射到[bool]。 -not會將其翻轉爲$ true。如果它不是5的倍數,($ i%5)將返回一個非零值,該值將轉換爲$ true,並翻轉爲$ false。

對於+ =操作,當布爾型轉換爲[int]時,它對於$ true變爲1或對於$ false變爲0。最終的結果是,每當$ i達到5的倍數,$ ValIdx就會增加1.如果它不是5的倍數,$ ValIdx會增加0.

+0

感謝您的回答!這些文件夾是用$ DestinationDirectory枚舉的。但是沒有辦法用變量來做到這一點,因爲實際上我的變量的長度非常長,所以PITA將它們全部放入數組中。 (爲了說明一個變量的長度 - 「Mozilla/5.0(Windows NT 6.1; Avant TriCore)AppleWebKit/537.36(KHTML,像Gecko)Chrome/31.0.1650.63 Safari/537.36」 – JohannesTK

+1

這是可能的,但會產生大量的開銷如果他們這麼長時間,我會認爲你會把他們存儲在一個文件中,並且只會做一個$ values = get-content 。 – mjolinor

+0

Okey。詳細說明你的答案中的代碼?我似乎無法完全理解它,因爲我還是一個初學者。 – JohannesTK