Necesitaba esto por mí mismo y por debajo ligeramente mejor versión del guión.
que añade siguientes:
- Soporte para el parámetro detallado para que pueda ver realmente lo que cambia la escritura ha hecho.
- Posibilidad de especificar carpetas para que pueda limitar los cambios.
- Agregando bower.json, txt y md para incluir extensiones.
- Buscar y reemplazar contenido primero, renombrarlo más tarde.
- No reemplace el contenido si no se encuentra la cadena de búsqueda (esto evita cambios innecesarios en la fecha de modificación).
[CmdletBinding(SupportsShouldProcess=$true)]
Param()
$match = "MyProject"
$replacement = Read-Host "Please enter project name"
$searchFolders = @("MyProject.JS", "MyProject.WebApi", ".")
$extensions = @("*.cs", "*.csproj", "*.sln", "bower.json", "*.txt", "*.md")
foreach($searchFolderRelative in $searchFolders)
{
$searchFolder = join-path (get-location) $searchFolderRelative
Write-Verbose "Folder: $searchFolder"
$recurse = $searchFolderRelative -ne "."
if (test-path $searchFolder)
{
$files = Get-ChildItem (join-path $searchFolder "*") -file -include $extensions -Recurse:$recurse |
Where-Object {Select-String -Path $_.FullName $match -SimpleMatch -Quiet}
foreach($file in $files)
{
Write-Verbose "Replaced $match in $file"
((Get-Content $file.fullname) -creplace $match, $replacement) | set-content $file.fullname
}
$files = Get-ChildItem $searchFolder -filter *$match* -Recurse:$recurse
$files |
Sort-Object -Descending -Property { $_.FullName } |
% {
Write-Verbose "Renamed $_"
$newName = $_.name -replace $match, $replacement
Rename-Item $_.FullName -newname $newName -force
}
}
else
{
Write-Warning "Path not found: $searchFolder"
}
}
Tenga en cuenta que un cambio de la respuesta es que por encima de la carpeta recursivamente sólo en carpetas especificadas, no en las raíces. Si no quiere eso, simplemente configure $recurse = true
.
Así que quieres un comando/función que reemplace A con B en el contenido de los archivos, nombres de archivo y nombres de carpeta o son A y B por separado en cada uno de esos casos? –
"es un comando/función que reemplazará A con B en el contenido del archivo, nombres de archivo y nombres de carpeta" es el caso. –