# set output encoding $OutputEncoding = [Text.UTF8Encoding]::UTF8 # company name placeholder $oldCompanyName="AbpCompanyName" # your company name $newCompanyName="YourCompanyName" # project name placeholder $oldProjectName="MeetingSchedule" # your project name $newProjectName="YourProjectName" # file type $fileType="FileInfo" # directory type $dirType="DirectoryInfo" # copy Write-Host 'Start copy folders...' $newRoot=$newCompanyName+"."+$newProjectName mkdir $newRoot Copy-Item -Recurse .\aspnet-core\ .\$newRoot\ Copy-Item -Recurse .\vue\ .\$newRoot\ Copy-Item .gitignore .\$newRoot\ Copy-Item LICENSE .\$newRoot\ Copy-Item README.md .\$newRoot\ # folders to deal with $slnFolder = (Get-Item -Path "./$newRoot/aspnet-core/" -Verbose).FullName $vueFolder = (Get-Item -Path "./$newRoot/vue/" -Verbose).FullName function Rename { param ( $TargetFolder, $PlaceHolderCompanyName, $PlaceHolderProjectName, $NewCompanyName, $NewProjectName ) # file extensions to deal with $include=@("*.cs","*.cshtml","*.asax","*.ps1","*.ts","*.csproj","*.sln","*.xaml","*.json","*.js","*.xml","*.config","Dockerfile") $elapsed = [System.Diagnostics.Stopwatch]::StartNew() Write-Host "[$TargetFolder]Start rename folder..." # rename folder Ls $TargetFolder -Recurse | Where { $_.GetType().Name -eq $dirType -and ($_.Name.Contains($PlaceHolderCompanyName) -or $_.Name.Contains($PlaceHolderProjectName)) } | ForEach-Object{ Write-Host 'directory ' $_.FullName $newDirectoryName=$_.Name.Replace($PlaceHolderCompanyName,$NewCompanyName).Replace($PlaceHolderProjectName,$NewProjectName) Rename-Item $_.FullName $newDirectoryName } Write-Host "[$TargetFolder]End rename folder." Write-Host '-------------------------------------------------------------' # replace file content and rename file name Write-Host "[$TargetFolder]Start replace file content and rename file name..." Ls $TargetFolder -Include $include -Recurse | Where { $_.GetType().Name -eq $fileType} | ForEach-Object{ $fileText = Get-Content $_ -Raw -Encoding UTF8 if($fileText.Length -gt 0 -and ($fileText.contains($PlaceHolderCompanyName) -or $fileText.contains($PlaceHolderProjectName))){ $fileText.Replace($PlaceHolderCompanyName,$NewCompanyName).Replace($PlaceHolderProjectName,$NewProjectName) | Set-Content $_ -Encoding UTF8 Write-Host 'file(change text) ' $_.FullName } If($_.Name.contains($PlaceHolderCompanyName) -or $_.Name.contains($PlaceHolderProjectName)){ $newFileName=$_.Name.Replace($PlaceHolderCompanyName,$NewCompanyName).Replace($PlaceHolderProjectName,$NewProjectName) Rename-Item $_.FullName $newFileName Write-Host 'file(change name) ' $_.FullName } } Write-Host "[$TargetFolder]End replace file content and rename file name." Write-Host '-------------------------------------------------------------' $elapsed.stop() write-host "[$TargetFolder]Total Time Cost: $($elapsed.Elapsed.ToString())" } Rename -TargetFolder $slnFolder -PlaceHolderCompanyName $oldCompanyName -PlaceHolderProjectName $oldProjectName -NewCompanyName $newCompanyName -NewProjectName $newProjectName Rename -TargetFolder $vueFolder -PlaceHolderCompanyName $oldCompanyName -PlaceHolderProjectName $oldProjectName -NewCompanyName $newCompanyName -NewProjectName $newProjectName