PowerShell ISE中.\路径指向映射盘P:\而非脚本目录的问题求助
解决PowerShell ISE中
.指向错误目录的问题 嘿,这个问题我太熟悉了!本质原因很简单:你用的.(当前路径)是基于PowerShell的当前工作目录,而不是你的脚本所在的目录。因为你的ISE启动时默认路径是P:\,所以.就指向了P:\,自然找不到c:\users\chris\posh下的文件了。
下面给你几个靠谱的解决方案,按推荐程度排序:
1. 用$PSScriptRoot定位脚本目录(最推荐)
PowerShell有个内置的自动变量$PSScriptRoot,它会自动返回当前运行的脚本所在的绝对目录,完全不受当前工作目录的影响。修改你的代码如下:
# 获取脚本所在的绝对路径 $scriptHome = $PSScriptRoot # 用这个路径拼接子文件夹的文件路径 $hbsFile = Join-Path $scriptHome "inputs\HBS-IP.txt" $hbslist = Get-Content $hbsFile $outputFile = Join-Path $scriptHome "Outputs\LatLong.csv" write-output "$($lat),$($long)" | Out-File $outputFile -Append
这样不管你的PowerShell当前工作目录是P:\还是其他任何地方,都能准确找到脚本同目录下的inputs和Outputs文件夹。
2. 临时切换工作目录到脚本位置
如果你不想修改太多代码,可以先切换到脚本所在目录,执行完操作再切回去:
# 保存原来的工作目录 $originalDir = Get-Location try { # 切换到脚本所在目录 Set-Location $PSScriptRoot # 这里用原来的相对路径代码就没问题了 $hbslist = Get-Content .\inputs\HBS-IP.txt write-output "$($lat),$($long)" | Out-File .\Outputs\LatLong.csv -Append } finally { # 不管执行成功还是失败,都切回原来的目录 Set-Location $originalDir }
这个方法也能解决问题,但不如第一种简洁,而且如果脚本中有其他依赖当前工作目录的操作,需要额外注意。
3. 修改PowerShell ISE的默认启动路径
如果你希望每次打开ISE时,默认工作目录就是你的脚本文件夹,可以这么做:
- 找到PowerShell ISE的快捷方式(开始菜单或桌面)
- 右键点击→属性
- 在“快捷方式”标签页的“起始位置”输入框中,填入
c:\users\chris\posh - 点击确定,下次启动ISE时默认路径就会是脚本目录了
不过这个方法只能解决启动时的情况,如果运行脚本过程中切换了工作目录,还是会出现同样的问题,所以还是第一种方法最稳妥。
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

