You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:59:12