Как проверить дубликаты файлов с помощью Powershell? - PullRequest
0 голосов
/ 21 октября 2019

Я хочу сначала проверить, есть ли у меня файл .xml, если у меня есть файл .xml, я должен проверить, существует ли файл .xml, продублирован или нет. Например, у меня есть эти 3 файла: ABC_123.xml ABC_456.PRO ABC_123.PRO

. Из этого файла это означает, что у меня есть .xml файл (ABC_123.xml), затем файл .xml дублируется с этимфайл ABC_123.PRO. Затем я должен c ontinue to other process.

Я попробовал это, но он все равно возвращает результат У меня есть дубликат файла, даже если я изменяю имя файла .xml на DEF_123.xml или другое имя с расширением .xml.

for(;;)
{
$Path = "D:\SERVICE"
if(Test-Path -Path "$Path\*.xml")
{
    Write-Host "XML exist"
    $XML_File = Get-ChildItem -Name "$Path\*.xml"
    $PRO_File = Get-ChildItem -Name "$Path\*.PRO"
    if($XML_File.BaseName -eq $PRO_File.BaseName)
    {
        Write-Host "Duplicated"
        Write-Host "Continue other process
    }
    else{
        Write-Host "Not duplicate, process the xml file"

    }

}
else{
    Write-Host "XML not exist"
}
}

1 Ответ

1 голос
/ 21 октября 2019

Скрипт не работает, потому что

$XML_File = Get-ChildItem -Name "$Path\*.xml"
$PRO_File = Get-ChildItem -Name "$Path\*.PRO"
if($XML_File.BaseName -eq $PRO_File.BaseName)

не делает то, что задумано. Get-ChildItem возвращает массив объектов FileInfo, если существует более одного файла с соответствующим расширением. Массив не имеет BaseName, поэтому, если вы используете Set-StrictMode -Version 'latest', вы получите ошибку о несуществующем свойстве.

Что касается решения, использовать на основе набора логика. Примерно так:

# Assume that these test files exist
data.xml
data2.pro
data2.xml
data3.xml

# Two empty arrays, populate each with basenames and see results
$xbase = @()
$obase = @()
@(gci * -include *.xml) | % { $xbase += $_.basename }
$xbase
data
data2
data3

@(gci * -exclude *.xml) | % { $obase += $_.basename }
$obase
data2

Теперь есть два массива, которые содержат базовые имена для файлов XML и файлов не-XML. Чтобы создать новую коллекцию файлов, которые не имеют аналогов, отличных от XML, сравните коллекции следующим образом:

$onlyXML = Compare-Object $xbase $obase -PassThru
$onlyXML
data
data3

Теперь коллекция $onlyXML содержит базовые имена для файлов, которые не имеют аналога вне-XML коллекция. Обработка достаточно проста, просто не забудьте добавить .xml для доступа к реальному файлу.

$onlyXML | % {
    $x = gci "$_.xml" # For example, get a FileInfo about XML doc
    # TODO: do stuff with $x
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...