Я написал этот скрипт, чтобы найти все папки в каталоге и для каждой папки, проверьте внутри общего файла, если существуют какие-то строки и если они не добавлены. Мне нужно было вставлять строки в определенные места. Не зная, как это сделать, я решил упростить поиск и заменить место, где нужно было вставить строки. В любом случае этот скрипт занимает почти час, чтобы работать через 800 файлов. Я надеюсь, что некоторые опытные участники могут указать, как быстрее выполнить мою задачу, поскольку я работал с Powershell только два дня. Большое спасибо!!!Powershell - Ускорение записи в файлы
# First find and replace items.
$FindOne =
$ReplaceOneA =
$ReplaceOneB =
$ReplaceOneC =
# Second find and replace items.
$FindTwo =
$ReplaceTwo =
# Strings to test if exist.
# To avoid duplicate entries.
$PatternOne =
$PatternTwo =
$PatternThree =
$PatternFour =
# Gets window folder names.
$FilePath = "$ProjectPath\$Station\WINDOW"
$Folders = Get-ChildItem $FilePath | Where-Object {$_.mode -match "d"}
# Adds folder names to an array.
$FolderName = @()
$Folders | ForEach-Object { $FolderName += $_.name }
# Adds code to each builder file.
ForEach ($Name in $FolderName) {
$File = "$FilePath\$Name\main.xaml"
$Test = Test-Path $File
# First tests if file exists. If not, no action.
If ($Test -eq $True) {
$StringOne = Select-String -pattern $PatternOne -path $File
$StringTwo = Select-String -pattern $PatternTwo -path $File
$StringThree = Select-String -pattern $PatternThree -path $File
$StringFour = Select-String -pattern $PatternFour -path $File
$Content = Get-Content $File
# If namespaces or object don't exist, add them.
If ($StringOne -eq $null) {
$Content = $Content -Replace $FindOne, $ReplaceOneA
}
If ($StringTwo -eq $null) {
$Content = $Content -Replace $FindOne, $ReplaceOneB
}
If ($StringThree -eq $null) {
$Content = $Content -Replace $FindOne, $ReplaceOneC
}
If ($StringFour -eq $null) {
$Content = $Content -Replace $FindTwo, $ReplaceTwo
}
$Content | Set-Content $File
}
}
# End of program.
дал 800 файлов, вы на самом деле делает до 3200 поиска/замены пробегов, так как вы обрабатываете каждый файл ** FOUR ** раз в вашей петле ... –
Спасибо за ваш ответ. Любые идеи по упрощению, но достижение того же результата? – OreoRyan
загрузите файл один раз, затем выполните прогон foreach/set-content? никогда не использовались powershell, однако, так что не знаю, нужно ли каждый раз получать содержимое каждый раз, чтобы загружать только что измененные версии. –