Объединить URL-адрес файла и проверить наличие ошибки Powershell path

#powershell #powershell-core

#powershell #powershell-ядро

Вопрос:

Я пытаюсь получить путь к файлу от пользователя и объединить имя файла и создать этот файл в папке, а затем проверить, существует ли файл. Файл создан, и путь выглядит для меня правильным, но когда я пытаюсь проверить, существует ли путь к файлу с помощью test-path, он продолжает отказывать, что он не существует

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

 $fileName = Read-Host -Prompt 'Enter file Name :'     #user entered Test123
$filePath = Read-Host -Prompt 'Enter Path:'   #user entered C:Documents

$File = ($filePath   ""   $fileName   ".json")

 If (!(test-path $File)) {
    Write-Host "File does not exist"
    Exit 
    }
  

Что я делаю не так? Я пытаюсь получить путь от пользователя и объединить имя файла и создать этот файл в папке, а затем проверить, существует ли файл

Комментарии:

1. Показанный код ничего не создает. В нем также отсутствуют важные части, такие как где $filepath и $filename создаются и как. Вы должны отредактировать свой пост в соответствии с рекомендациями stackoverflow. Вы здесь не новичок, поэтому вы уже должны знать, где их найти, если вам нужно обновление. Наконец, избавьте себя от проблем, используя Join-Path

2. @DougMaurer только что сделал. Можете ли вы проверить сейчас!

Ответ №1:

Ваша конкатенация недопустима.

Основываясь на нашем обмене ниже, удалили исходный ответ, теперь, когда вы прояснили свой вариант использования.

 Clear-Host
$filePath = Read-Host -Prompt 'Enter Path'
$fileName = Read-Host -Prompt 'Enter file Name'


# Debug - check variable content
($File = "$filePath$fileName.json")

If (!(test-path $File)) 
{Write-Warning -Message 'File does not exist'}

# Results - Using a bad name
<#
Enter Path: D:Temp
Enter file Name: NoFile
WARNING: File does not exist
#>

# Results - using a good file
<#
D:tempNewJsonFile.json
#>
  

Или

 Clear-Host
$filePath = Read-Host -Prompt 'Enter Path'
$fileName = Read-Host -Prompt 'Enter file Name'
Try 
{
    Get-ChildItem -Path "$filePath$fileName.json" -ErrorAction Stop
    Write-Verbose 'Success' -Verbose
}
Catch 
{
    Write-Warning -Message "Error using $fileName"
    $PSitem.Exception.Message
}

# Results
<#
Enter Path: D:temp
Enter file Name: BadFileName
WARNING: Error using BadFileName
Cannot find path 'D:tempBadFileName.json' because it does not exist.
#>

# Results
<#
Enter Path: D:temp
Enter file Name: NewJsonFile

    Directory: D:temp


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         05-Oct-20     13:06              0 NewJsonFile.json                                                                                                               
VERBOSE: Success
#>
  

Комментарии:

1. Здесь нет https. Я создаю файл, используя этот объединенный параметр file path in -outFile, и он создает файл правильно, но теперь, когда я пытаюсь проверить, существует ли файл, используя тот же путь к файлу, он не работает, и когда я навожу курсор на путь к файлу, у него правильный URL, поэтому я не понимаю

2. Тогда почему вы запрашиваете URL-адрес? Если просто UNC, то это должно быть вашим запросом. Смотрите Мое обновление для вас.

3. Я обновил свой вопрос, запросив путь к файлу с примером пользователя, указывающего его как C:Documents

4. Это не меняет того, что я предоставил. подход тот же.

5. Извините, я новичок в powershell, я не понимаю, что вы подразумеваете под параметром erroraction и stop. Не могли бы вы удалить часть URL-адреса и добавить дополнительные комментарии, чтобы я понял

Ответ №2:

Если каталог не существует, его также необходимо создать.

 $fileName = Read-Host -Prompt 'Enter file Name :'     #user entered Test123
$filePath = Read-Host -Prompt 'Enter Path:'   #user entered C:Documents

$File = (Join-Path $filePath "$fileName.json")

If (test-path $filePath)
{
    Write-Host Folder exists! -ForegroundColor Cyan
}
else
{
    Write-Host Folder does not exist! -ForegroundColor Yellow
    $result = New-Item $filePath -ItemType Directory

    if($result)
    {
        Write-Host Folder created successfully! -ForegroundColor Green
    }
}

If (test-path $File)
{
    Write-Host File exists! -ForegroundColor Cyan
}
else
{
    Write-Host File does not exist! -ForegroundColor Yellow
    $result = New-Item $file -ItemType File

    if($result)
    {
        Write-Host File created successfully! -ForegroundColor Green
    }
}