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

从U盘运行.bat调用.ps1时,脚本误获取C盘盘符问题排查

问题原因与解决方案

核心原因

通过批处理调用PowerShell时,PowerShell的初始工作目录并非U盘上的脚本所在目录,而是批处理文件的启动工作目录(通常是C:\Windows\System32或用户默认目录),因此Get-Location会返回C盘盘符。

解决方案

方案1:修改批处理文件,先切换到脚本所在目录

在调用PowerShell的命令前,添加切换目录的指令,确保PowerShell启动时工作目录在U盘上:

powershell.exe -noprofile -command "Set-ExecutionPolicy Bypass LocalMachine" -force

cd /d "%~dp0"
powershell.exe -noprofile -file "%~dpn0.ps1" %*

powershell.exe -noprofile -command "Set-ExecutionPolicy AllSigned LocalMachine" -force

%~dp0代表批处理文件所在的目录路径,cd /d会同时切换盘符和目录。

方案2:修改PowerShell脚本,直接获取脚本自身所在盘符

不依赖当前工作目录,改用PowerShell内置变量$PSScriptRoot(代表当前脚本文件所在的目录)来获取盘符,这种方法更健壮,不受启动方式影响:

$DriveLetter = (Get-Item $PSScriptRoot).Drive.Name
mkdir "${DriveLetter}:\Script Folder\Subfolder\Subfolder${env:computername}"

或者更简洁的写法:

$ScriptDrive = (Get-Item $PSScriptRoot).Drive
mkdir "$($ScriptDrive.Name):\Script Folder\Subfolder\Subfolder${env:computername}"

额外说明

  • 单独运行.ps1时,PowerShell会默认将工作目录设置为脚本所在目录,所以Get-Location能正确获取U盘盘符;但通过批处理调用时,批处理的工作目录会被继承给PowerShell,导致路径错误。
  • 方案2是更推荐的做法,因为脚本自身具备了获取正确路径的能力,无论通过哪种方式启动都能正常工作。

内容的提问来源于stack exchange,提问作者Joe R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:06:20