Как проверить, существует ли файл в PowerShell
Перед тем как пытаться читать или записывать в файл в PowerShell, важно проверить, действительно ли файл существует. Это предотвратит ошибки, которые могут привести к сбою вашего скрипта. Также важно проверить это перед созданием нового файла или когда вы пытаетесь удалить файл.
В этой статье мы рассмотрим различные методы, с помощью которых вы можете проверить, существует ли файл, и как использовать его в своих скриптах.
Проверьте, существует ли файл
Существует в основном два метода в PowerShell для проверки наличия файла. Рекомендуемый способ - использовать командлет Test-Path, а другой вариант - использовать командлет Get-ChildItem.
Лучший способ проверить, существует ли файл в PowerShell, - это использовать командлет Test-Cmdlet. Этот командлет вернет логическое значение, которое может быть $True или $False, что упрощает его использование внутри условного оператора, например.
Если вы выполните командлет напрямую в своей консоли, вы увидите, что он просто вернет True или False в виде строки:
Test-Path -Path "c:\temp\random-file.txt"
Более реалистичный пример — это проверить, существует ли файл, прежде чем создать новый. Мы сохраним путь в переменной и используем оператор -Not, чтобы выполнить код только тогда, когда результат Test-Path ложен:
$path = "C:\temp\File1.txt"
if (-not(Test-Path -path $path)) {
# File doesn't exists, create the file
New-Item -Path $path
}Вы также можете использовать подстановочные знаки в пути к файлу. Это позволяет сделать несколько вещей. Прежде всего, если вы не знаете точное имя файла, вы можете искать часть имени.
Он также позволяет вам проверить, есть ли в папке определенные типы файлов. Например, если вы хотите узнать, есть ли в папке файл журнала или файл bak.
Check for specific file type
if (Test-Path -path "c:\temp\*.bak") {
Write-Host "Bak file(s) found in the folder"
}
Check on part of the file name
if (Test-Path -path "c:\temp\la-*.txt") {
Write-Host "Found one or more files that start with la-"
}Используя Get-ChildItem
Еще один способ проверить, существует ли файл в PowerShell, — это использование cmdlet Get-ChildItem. Этот cmdlet используется для получения заданных элементов из указанного каталога. Но мы также можем использовать этот cmdlet, чтобы проверить, существует ли файл.
Разница между командлетами Get-ChildItem и Test-Path заключается в том, что последний возвращает только True или False, тогда как первый также возвращает информацию о файле.
При использовании командлета Get-ChildItem вы не можете просто указать полный путь и имя файла. Причина в том, что если файл не существует, вы получите ошибку, которая остановит ваш скрипт:
This won't work if the file doesn't exist
$path = "c:\temp\non-existing-file.txt"
$file = Get-ChildItem -Path $path
if ($file) {
# Do something with the file information
}else{
Write-Host "File doesn't exist"
}Чтобы использовать командлет Get-ChildItem для этого, нам нужно будет указать путь и имя файла, который мы ищем, отдельно.
Мы используем свойство Filter для фильтрации файлов в пути, которые соответствуют файлу, который мы ищем:
$path = "c:\temp\"
$fileName = "non-existing-file.txt"
Get all the files in the path and filter on filename
$file = Get-ChildItem -Path $path -Filter $fileName
if ($file) {
# Do something with the file information
}else{
Write-Host "File doesn't exist"
}Искать в подпапках
Преимуществом командлета Get-ChildItem является то, что мы также можем искать файл в подпапках. Мы можем добавить параметр -recurse, чтобы он также искал во всех вложенных папках:
$path = "c:\temp\"
$fileName = "file1.txt"
$file = Get-ChildItem -Path $path -Filter $fileName -Recurse -File
if ($file) {
# Do something with the file information
Write-Host "File created on $($file.CreationTime)"
}Как вы видите в приведенном выше примере, я также добавил параметр -File. В примерах я искал по имени файла, включая расширение, тогда это действительно не обязательно. Но когда вы ищете только по имени файла, тогда могут быть включены и директории. Параметр -File ограничит результат только файлами.
Заключение
Если вы хотите проверить, существует ли файл в PowerShell, то лучший вариант - использовать командлет Test-Path. Он возвращает True или False в зависимости от результата, что делает его лучшим вариантом для использования внутри скриптов.
Когда вы не знаете точное местоположение файла или хотите проверить, есть ли один или несколько файлов с определённым именем, команда Get-ChildItem является хорошим вариантом для использования.
Надеюсь, вам понравится эта статья. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.

