Сравнение и поиск недостающего результата - PullRequest
0 голосов
/ 24 октября 2019

У меня есть программа, которая читает мой лист Excel и загружает вложение с веб-сайта. Затем он сохраняется в определенную папку с конкретным именем, которое у меня есть имя в листе Excel. Например,

Column A - Column B
G135 - image01
G135 - image 02
G241 - document01
G748 - document01

Столбец A относится к имени папки, где программа создаст новую папку с именем, указанным выше. Столбец B относится к имени файла, сохраняемого программой в определенную папку.

Моя программа не идеальна, и когда я подсчитываю количество файлов во всех папках через правый клик> свойства,отсутствует один файл.

Как сравнить лист Excel с папками файлов, чтобы найти отсутствующий файл?

Ответы [ 3 ]

0 голосов
/ 24 октября 2019
# Sample CSV data that simulates the contents of the Excel sheet.
$csvData = @'
ColumnA,ColumnB
G135,image01
G135,image02
G241,document01
G748,document01
'@

# Set the dir. in which to look for the files.
$refDir = '.'

# Process each CSV row.
# With a real CSV file as input, you'd use something like
#    Import-Csv c:\user\excel.csv
# instead of 
#    $csvData | ConvertFrom-Csv
$csvData | ConvertFrom-Csv | 
  ForEach-Object { 
    # Construct the path to look for...
    $path = '{0}\{1}' -f $_.ColumnA, $_.ColumnB
    # ... and test its existence:
    if (-not (Test-Path -LiteralPath $refDir\$path)) {
      # Output the missing path.
      [pscustomobject] @{ Missing = $path }
    }
  }

Приведенный выше выводит один или несколько пользовательских объектов с отсутствующими путями;например:

Missing
-------
G241\document01
0 голосов
/ 24 октября 2019

Если вы сравниваете имена файлов (а не полные пути). Вы должны сравнить что-то вроде этого:

$MyFolderFiles = (Get-ChildItem -path "c:").Name
$MyExcelList = Some code here to generate the file names list

Compare-Object -ReferenceObject $MyFolderFiles -DifferenceObject $MyExcelList

Конечно, вам нужно настроить это для вашей реальной ситуации

0 голосов
/ 24 октября 2019

Чтобы избежать необходимости устанавливать модуль, который работает с Excel или использовать COMObjects, сохраните копию вашей электронной таблицы как CSV, мы назовем ее mydata.csv. Я собираюсь вызвать каталог, где все эти другие каталоги - c: \ basedir. Я также собираюсь предположить, что у каждого столбца есть строка заголовка (вы можете добавить один, если он не только для CSV), и что столбец A - это папка, а столбец B - имя_файла. Это должно дать вам общее представление о том, когда файл находится не в нужном месте.

$MyData = Import-Csv -Path mydata.csv

Foreach ($File in $MyData) {
  $Location = Split-Path (Get-ChildItem -Path C:\basedir -Include $File.FileName -Recurse).DirectoryName -Leaf
  if ($File.Folder -ne $Location) {
    Write-Host "$($File.FileName) is in the wrong folder!"
    Write-Host "It should be in $($File.Folder) but it was found in $Location"
    Write-Host "----------------------------------------" # Just a visual separator
  }
  elseif ($null -eq $Location)  {
    Write-Host "$($File.FileName) was not found!"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...