Precisa copiar arquivos em que os arquivos de origem estão nos diretórios, mas deseja que os arquivos de destino sejam colocados em um único diretório

1

Fui solicitado a ver se posso copiar muitos arquivos de uma fonte que tenha diretórios e sub-diretórios e que o taget seja um único diretório. Todos os arquivos para um diretório. Se houver um arquivo duplicado, basta copiar com um nome de arquivo diferente como ... (1). Eu tentei ROBOCOPY mas até agora não encontrei um switch que me ajude com a tarefa.

Obrigado!

    
por mebermudez 05.05.2017 / 22:10

1 resposta

2

Isso pode ser feito facilmente com o powershell.

# Set the source and destination paths (No trailing slash)
$source = "C:\subtree"
$dest = "C:\consolidated"

# Get a list of all files recursively
$files = Get-ChildItem -Path $source -Recurse

# Process each file
$files | ForEach-Object {
    # Basename is filename w/o ext
    $baseName = $_.BaseName
    $ext = $_.Extension
    # Build initial new file path
    $newName = "$dest\$($_.Name)"

    # Check for duplicate file
    If (Test-Path $newName) {
        $i = 0
        # While the file exists, increment the number that will be appended
        While (Test-Path $newName) {
            $i++
            $newName = "$dest\$baseName($i)$ext"
        }
    } 
    # If the file is not a duplicate, write the (placeholder) file.
    Else {
        New-Item -ItemType File -Path $newName -Force
    }

    # Copy the file contents to the destination
    Copy-Item $_.FullName -Destination $newName -Force
}

Como você é novo no PowerShell, sugiro usar o Powershell ISE incluído. Ele permitirá que você cole este script e trabalhe mais facilmente.

    
por 05.05.2017 / 22:16