Rename files in PowerShell based on the destination folder

1

I have the path A and the destination B . This destination is repeated for multiple clients as the structure below shows:

A
-->app.exe
-->server.ini
-->js.png.

B-Cliente 01 
-->app_cliente01.exe
-->server.ini
-->js.png.

B-Cliente 02 
-->app_cliente02.exe
-->server.ini
-->js.png

B-Cliente 03 
-->app_cliente03.exe
-->server.ini
-->js.png.

I need to copy all files from the A directory to the B paths, however when doing this copy I need to rename the files with part of the target name.

Example: app.exe would be app_cliente01.exe when copied to B-Cliente 01 folder.

    
asked by anonymous 09.12.2015 / 18:17

2 answers

0

You can do the following (the explanation is in the form of comments):

# Primeiro defina a pasta onde estao os ficheiros a copiar
$caminhoFonteFicheiros = Resolve-Path ".\A"

# Depois defina uma mascara para usar quando for necessario encontrar as pastas de destino
$mascaraDestino = "B-*"

# E defina o caminho onde se encontram as pastas
$caminhoFonteDestino = Get-Location

# Por cada pasta de destino encontrada
foreach($destino in $(Get-ChildItem -Path $caminhoFonteDestino -Filter $mascaraDestino -Directory)) {

    # Crie o nome que vai adicionado aos ficheiros copiados 
    $marcador = ($destino.Name -replace $mascaraDestino).Replace(" ", "").ToLowerInvariant();

    # Agora por cada ficheiro que exista no directorio fonte
    foreach($origem in $(Get-ChildItem -Path $caminhoFonteFicheiros -File)) {

        # Separe a extensao e o nome original
        $extensao = [System.IO.Path]::GetExtension($origem.FullName);
        $nomeAntigo = [System.IO.Path]::GetFileNameWithoutExtension(($origem.FullName))

        # E por fim junte-os de novo com o marcador do directorio actual
        $novoNome = "$nomeAntigo'_$marcador$extensao"

        # Crie o novo caminho do ficheiro juntando o caminho da pasta de destino e o novo nome
        $novoCaminho = Join-Path $destino.FullName $novoNome

        # E por fim copie os ficheiros
        Write-Host "A copiar o ficheiro '$($origem.FullName)' para '$novoCaminho'"
        Copy-Item -Path $origem.FullName -Destination $novoCaminho
    }
}
    
03.02.2016 / 14:21
0

Ok, if your goal is to better understand what is being done, I suggest you roll up your sleeves and practice. The answer given by Omni user will help you. But there is no free lunch, most of the materials are in English. See the links:
Windows PowerShell Basics
about_Comparison_Operators
#
Create Custom Windows PowerShell Profiles .ps1
Various help information

    
03.02.2016 / 15:47