Подсчет каталогов Сообщение об ошибке - PullRequest
1 голос
/ 09 августа 2011

всякий раз, когда я запускаю это ниже, он выдает результат, но также выдает ошибку, если я не входил в директорию. Любая идея, как я могу "скрыть" сообщение об ошибке, которое приходит?

Проверка количества каталогов Хост чтения: произошла ошибка типа «System.Management.Automation.Host.PromptingException». В C: \ Users \ lara \ AppData \ Local \ Temp \ 5820c1b7-ee6c-47f1-9a6c-06de6dc9e68f.ps1: 2 char: 20 + $ Source = Read-Host <<<< "Пожалуйста, введите первый каталог, чтобы проверить" + CategoryInfo: ResourceUnavailable: (:) [Read-Host], PromptingException + FullyQualifiedErrorId: System.Management.Automation.Host.PromptingException, Microsoft.PowerShell.Commands.ReadHostCommand </em>

Write-Host "Checking Directory Count" -ErrorAction SilentlyContinue
$Source = Read-Host "Please enter first directory to check" 

If($Source)
{
    Write-host "There are " (Get-ChildItem $Source).Count "items in the ""$Source"" directory"  
}
Else
{
    Write-Host "Please enter a directory"
}

Обновление:

Спасибо за помощь. Я хочу объединить то, что у меня есть ниже, в другой скрипт, который выполняет сравнение папок. Мне нужно знать, сколько файлов в каталоге я хочу проверить, а также файлы, которые не существуют. У меня есть код ниже - я знаю, что он действительно плохо написан! Я просто не был уверен, как получить $ source и $ target в одну и ту же оценку IF, поэтому в итоге сделал основную ошибку, получив два утверждения IF!

Также - есть ли способ вместо того, чтобы показывать => и <=, которые я показываю, «не существует в $ source» или «не существует в $ target» - я отправлю этот код другой команде и сделаю не хочу их слишком сильно путать: </p>

Write-Host "Checking Directory Count and Folder comparision" -ErrorAction SilentlyContinue

$Source = Read-Host "Please enter Source directory to check" 
$Target = Read-Host "Please enter Target directory to check"

$child1 = Get-ChildItem -Path $Source
$child2 = Get-ChildItem -Path $Target

Compare-Object $child1 -DifferenceObject $child2 

Write-Host ""
If($source -and (Test-Path -Path $source -PathType Container))
{
    "There are $(@(Get-ChildItem $Source).Count) items in the '$Source' directory"  
}
Else
{
    Write-Host "Please enter a directory"
}
If($source -and (Test-Path -Path $Target -PathType Container))
{
    "There are $(@(Get-ChildItem $Target).Count) items in the '$Target' directory"  
}
Else
{
    Write-Host "Please enter a directory"
}


Write-Host ""
Write-Host "Any symbols with '<=' mean that the file Does NOT exist in TARGET"
Write-Host "Any symbols with '=>' mean that the file Does NOT exist in SOURCE"

1 Ответ

1 голос
/ 09 августа 2011

Я предлагаю вам сначала проверить, существует ли введенный путь, прежде чем пытаться перечислить его содержимое.Я также приведу результат к массиву, если результатом использования Get-ChildItem является скаляр (только один объект), у него не будет свойства count:

$Source = Read-Host "Please enter first directory to check" 

If($source -and (Test-Path -Path $source -PathType Container))
{
    "There are $(@(Get-ChildItem $Source).Count) items in the '$Source' directory"  
}
Else
{
    Write-Host "Please enter a directory"
}

UPADTE:

Я не тестировал код, но вам нужно изменить порядок команд.Также сделайте сравнение в свойстве Name:

$Source = Read-Host "Please enter Source directory to check" 
$Target = Read-Host "Please enter Target directory to check"

If($source -and (Test-Path -Path $source -PathType Container))
{
    "There are $(@(Get-ChildItem $Source).Count) items in the '$Source' directory"  
}
Else
{
    Write-Host "Please enter a source directory"
    return
}

If($source -and (Test-Path -Path $Target -PathType Container))
{
    "There are $(@(Get-ChildItem $Target).Count) items in the '$Target' directory"  
}
Else
{
    Write-Host "Please enter a Target directory"
    return
}


$child1 = Get-ChildItem -Path $Source
$child2 = Get-ChildItem -Path $Target

Compare-Object $child1 -DifferenceObject $child2 -Property Name

Write-Host ""
Write-Host "Any symbols with '<=' mean that the file Does NOT exist in TARGET"
Write-Host "Any symbols with '=>' mean that the file Does NOT exist in SOURCE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...