আপনি যদি কেবলমাত্র বিশেষত ফাইলগুলির জন্য সেমিডলেট সিনট্যাক্সের বিকল্প চান তবে। File.Exists()
নেট পদ্ধতিটি ব্যবহার করুন :
if(![System.IO.File]::Exists($path)){
# file with path $path doesn't exist
}
অন্যদিকে, আপনি যদি একটি সাধারণ উদ্দেশ্যে অবহেলিত উপন্যাস চান Test-Path
তবে আপনার কীভাবে এটি করা উচিত তা এখানে:
# Gather command meta data from the original Cmdlet (in this case, Test-Path)
$TestPathCmd = Get-Command Test-Path
$TestPathCmdMetaData = New-Object System.Management.Automation.CommandMetadata $TestPathCmd
# Use the static ProxyCommand.GetParamBlock method to copy
# Test-Path's param block and CmdletBinding attribute
$Binding = [System.Management.Automation.ProxyCommand]::GetCmdletBindingAttribute($TestPathCmdMetaData)
$Params = [System.Management.Automation.ProxyCommand]::GetParamBlock($TestPathCmdMetaData)
# Create wrapper for the command that proxies the parameters to Test-Path
# using @PSBoundParameters, and negates any output with -not
$WrappedCommand = {
try { -not (Test-Path @PSBoundParameters) } catch { throw $_ }
}
# define your new function using the details above
$Function:notexists = '{0}param({1}) {2}' -f $Binding,$Params,$WrappedCommand
notexists
এখন ঠিক মত আচরণ করবে Test-Path
, কিন্তু সর্বদা বিপরীত ফলাফল ফিরে আসবে:
PS C:\> Test-Path -Path "C:\Windows"
True
PS C:\> notexists -Path "C:\Windows"
False
PS C:\> notexists "C:\Windows" # positional parameter binding exactly like Test-Path
False
যেমন আপনি ইতিমধ্যে নিজেকে দেখিয়েছেন, বিপরীতটি বেশ সহজ, কেবলমাত্র উপনামের exists
জন্য Test-Path
:
PS C:\> New-Alias exists Test-Path
PS C:\> exists -Path "C:\Windows"
True
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }