You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell移动脚本默认路径问题:如何切换至脚本所在目录

解决PowerShell脚本默认目录切换失败的问题

我来帮你搞定这个cd $PSScriptRoot失效的问题!结合你描述的情况,大概率是这几个原因导致的,给你逐个排查和解决:

1. 先排查最容易犯的拼写错误

看你提供的测试脚本片段里写了$PSScrip...,这里明显少了一个t!正确的变量名是$PSScriptRoot(注意是Script,不是Scrip),拼写错误直接会导致路径为空,切换自然失败。

2. 兼容PowerShell ISE的环境问题

如果你是在PowerShell ISE里直接运行脚本,$PSScriptRoot变量是空的——因为ISE的运行机制和普通控制台不一样,直接运行时这个变量不会被正确赋值。你可以用下面的代码替代单纯的cd $PSScriptRoot,兼容所有运行环境:

# 获取脚本所在的绝对路径,兼容ISE和普通控制台
$scriptDir = if ($PSScriptRoot) { 
    $PSScriptRoot 
} else { 
    Split-Path -Parent $MyInvocation.MyCommand.Definition 
}
# 切换到脚本目录
Set-Location -Path $scriptDir

解释一下:$MyInvocation.MyCommand.Definition会获取当前脚本的完整路径,Split-Path -Parent提取出目录部分,不管是在ISE还是普通控制台都能拿到正确的脚本所在目录。

3. 确保脚本是被直接执行的

不要把脚本内容复制到控制台执行,也不要用Invoke-Expression来运行脚本内容,一定要通过以下方式执行:

  • 在控制台里用. .\你的脚本名.ps1(点+空格+脚本路径)
  • 直接双击脚本(前提是已经设置了允许执行PowerShell脚本的权限,比如用Set-ExecutionPolicy RemoteSigned配置)

补全正确的测试辅助脚本

给你修正后的测试脚本写法,避免踩拼写和路径的坑:

# 先切换到脚本所在目录
$scriptDir = if ($PSScriptRoot) { 
    $PSScriptRoot 
} else { 
    Split-Path -Parent $MyInvocation.MyCommand.Definition 
}
Set-Location -Path $scriptDir

# 创建测试文件
New-Item -Path "File1_ProjectA.txt" -ItemType File
New-Item -Path "File2_ProjectB.txt" -ItemType File
New-Item -Path "File3_ProjectA.txt" -ItemType File

内容的提问来源于stack exchange,提问作者Dino the Dinosaur

火山引擎 最新活动