Saya hanya tidak suka sintaks:
if (Test-Path $path) { ... }
dan
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
terutama ada terlalu banyak tanda kurung dan tidak terlalu bisa dibaca saat memeriksa "tidak ada" untuk penggunaan yang umum. Apa cara yang lebih baik untuk melakukan ini?
Pembaruan: Solusi saya saat ini adalah menggunakan alias untuk exist
dan not-exist
seperti yang dijelaskan di sini .
Masalah terkait di penyimpanan PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
sumber
sumber
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Jawaban:
Jika Anda hanya ingin alternatif sintaks cmdlet, khusus untuk file, gunakan
File.Exists()
metode .NET:Jika, di sisi lain, Anda menginginkan alias negasi untuk tujuan umum
Test-Path
, berikut adalah cara melakukannya:notexists
sekarang akan berperilaku persis sepertiTest-Path
, tetapi selalu mengembalikan hasil yang berlawanan:Seperti yang sudah Anda tunjukkan pada diri Anda sendiri, sebaliknya cukup mudah, alias hanya
exists
untukTest-Path
:sumber
$path
"spesial", seperti pada Powershell Provider (pikirkan HKLM: \ SOFTWARE \ ...) maka ini akan gagal total.if(Test-Path $path){}else{ # do your thing }
Solusi alias yang Anda posting pintar, tetapi saya akan membantah penggunaannya dalam skrip, karena alasan yang sama saya tidak suka menggunakan alias apa pun dalam skrip; itu cenderung merusak keterbacaan.
Jika ini adalah sesuatu yang ingin Anda tambahkan ke profil Anda sehingga Anda dapat mengetikkan perintah cepat atau menggunakannya sebagai shell, maka saya bisa melihat itu masuk akal.
Anda dapat mempertimbangkan pemipaan sebagai gantinya:
Atau, untuk pendekatan negatif, jika sesuai untuk kode Anda, Anda dapat membuatnya sebagai tanda centang positif lalu gunakan
else
untuk yang negatif:sumber
False
. Anda perlu melakukannya sepertiif (-not ($path | Test-Path)) { ... }
.Tambahkan alias berikut. Saya pikir ini harus tersedia di PowerShell secara default:
Dengan itu, pernyataan kondisional akan berubah menjadi:
dan
sumber
Opsi lain adalah menggunakan
IO.FileInfo
yang memberi Anda begitu banyak info file sehingga membuat hidup lebih mudah hanya dengan menggunakan jenis ini:Lebih detail di blog saya.
sumber
Untuk memeriksa apakah Path ada ke direktori, gunakan yang ini:
Untuk memeriksa apakah Path ke file ada, gunakan apa yang disarankan @Mathias :
sumber
Ini adalah cara pemula saya yang bertenaga untuk melakukan ini
sumber