#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
}
}