如何仅在PowerShell脚本处于指定目录及其子目录时执行代码块?
解决PowerShell判断脚本是否在指定目录子文件夹的问题
嘿,我懂你的困扰了——你想用通配符匹配T:\Content\WORK及其所有子目录,但直接用-ne和带通配符的字符串比较根本行不通,因为PowerShell里-ne是严格的字符串相等比较,它不会把*当作通配符解析,只会把它当成普通字符来处理。
下面给你两种靠谱的解决方案:
方法1:使用-like运算符(推荐,简单直观)
-like是PowerShell专门用来处理通配符匹配的运算符,它能正确解析*这类通配符。修改后的代码如下:
if (-not (Get-Location).Path -like "T:\Content\WORK*") { [System.Windows.MessageBox]::Show( "You are attempting to run the file outside a subfolder of the T: drive. This will result in errors. Are you sure you wish to continue?", "Confirm Execution", "YesNoCancel", "Warning" ) }
(Get-Location).Path:获取当前脚本运行的绝对路径,避免相对路径的干扰-like "T:\Content\WORK*":匹配所有以T:\Content\WORK开头的路径,包括WORK文件夹本身,以及它下面的所有子文件夹-not:取反逻辑,也就是当路径不匹配这个规则时,弹出提示框
方法2:使用正则表达式(更灵活,适合复杂匹配)
如果之后需要更复杂的路径匹配规则,可以用-match结合正则表达式:
if (-not (Get-Location).Path -match "^T:\\Content\\WORK") { [System.Windows.MessageBox]::Show( "You are attempting to run the file outside a subfolder of the T: drive. This will result in errors. Are you sure you wish to continue?", "Confirm Execution", "YesNoCancel", "Warning" ) }
^T:\\Content\\WORK:正则表达式的意思是“路径必须以T:\Content\WORK开头”,^表示字符串起始位置,\\是正则里对反斜杠的转义写法
额外小提示
- 如果需要严格区分大小写的匹配,可以把
-like换成-clike,-match换成-cmatch - 确保
Get-Location返回的是绝对路径(默认就是),避免相对路径导致匹配失败
内容的提问来源于stack exchange,提问作者A. Eakins
相关产品推荐
相关产品推荐

