Tenho em mãos uma planilha excel de 300 linhas com caminho de origem e caminho de destino para robocopy, para evitar copiar e colar todo o caminho em um arquivo .bat tento fazer este script powershell:
# Import the Excel module
Import-Module ImportExcel
# Path to the Excel file
$excelPath = 'classeur.xlsx'
# Import data from the Excel file and check for null values
$data = Import-Excel -Path $excelPath
if ($data -eq $null) {
Write-Host "No data was imported from the file. Please check if the file is empty."
return
}
# Display imported data for verification
Write-Host "Imported data preview:"
$data | Format-Table -AutoSize
# File to store the source and destination paths
$outputFile = 'robocopy.txt'
if (Test-Path $outputFile) {
Remove-Item $outputFile
}
# Iterate over each row of data
foreach ($row in $data) {
$source = $row.Source
$destination = $row.Destination
# Check if either source or destination is empty
if ([string]::IsNullOrWhiteSpace($source) -or [string]::IsNullOrWhiteSpace($destination)) {
Write-Host "Empty source or destination found, skipping..."
} else {
# Format the line to write to the file
$lineToWrite = "Source: `"$source`" - Destination: `"$destination`""
Write-Host "Writing to file: $lineToWrite"
$lineToWrite | Out-File -FilePath $outputFile -Append -Encoding UTF8
}
}
Write-Host "All lines processed. Paths are stored in $outputFile"
É claro que faço uma cópia do arquivo Excel e o reconstruo para simplificar a leitura do script
Um exemplo de construção
Fonte | Destino |
---|---|
Caminho do arquivo de origem | Filapata de destino |
Caminho do arquivo de origem | Filapata de destino |
O resultado que espero é o seguinte
SET _source1="Filepath to source"
SET _destsge1="Filepath to destination"
SET _source2="Filepath to source"
SET _destsge2="Filepath to destination"
ETC...
O resultado que estou tendo atualmente
Empty source or destination found, skipping...
Empty source or destination found, skipping...
Empty source or destination found, skipping...
Empty source or destination found, skipping...
O que eu verifiquei:
- Que o excel foi lido corretamente pelo powershell, que é o caso.
- Minha PSVersion que é 5.1.22621.2506
- Execute o script como administrador.
- Versão Excel: Versão 2403 (Compilação 17425.20146)
Quero ressaltar que o arquivo txt e o arquivo excel estão na mesma pasta que contém o script.
Alguém pode saber por que o script não consegue ler os dados. Não consigo encontrar nada específico para esse problema:
https://www.it-connect.fr/comment-manipuler-des-fichiers-excel-avec-powershell/
Com a ajuda do @MT1, o problema era o uso do elseif.
Em vez disso, é melhor usar dois if para esta configuração.
Aqui está o script atualizado que permite obter dados do Excel e preparar o comando robocopy de acordo. observe que você deve inserir manualmente o arquivo de log no Robocopy.txt
A primeira linha do seu arquivo Excel deve ter origem e destino tem cabeçalho para que o script obtenha as informações