我手上有一个 300 行的 excel 表,其中包含用于 robocopy 的源路径和目标路径,为了避免将所有路径复制粘贴到 .bat 文件上,我尝试制作此 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"
当然,我复制了 excel 文件并重新构建它,以方便脚本读取
构造示例
来源 | 目的地 |
---|---|
源文件路径 | 目的地 filapath |
源文件路径 | 目的地 filapath |
我期待的结果如下
SET _source1="Filepath to source"
SET _destsge1="Filepath to destination"
SET _source2="Filepath to source"
SET _destsge2="Filepath to destination"
ETC...
我目前得到的结果
Empty source or destination found, skipping...
Empty source or destination found, skipping...
Empty source or destination found, skipping...
Empty source or destination found, skipping...
我检查了什么:
- powershell正确读取了excel,就是这样。
- 我的PS版本是5.1.22621.2506
- 以管理员身份执行脚本。
- Excel 版本:版本 2403(内部版本 17425.20146)
我想指出的是,txt 文件和 excel 文件位于具有脚本的同一文件夹中。
有人可以知道为什么脚本无法读取数据我找不到任何特定于此问题的内容:
https://www.it-connect.fr/comment-manipuler-des-fichiers-excel-avec-powershell/
在@MT1的帮助下,问题是elseif的使用。
相反,最好使用两个 if 来进行此配置。
这里更新的脚本允许从 Excel 获取数据并相应地准备 robocopy 命令。请注意,您必须手动将日志文件输入到 Robocopy.txt
Excel 文件的第一行必须有源,目标有标题,以便脚本获取信息