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

批处理脚本如何识别自身所在目录并赋值给变量?

解决BAT自动识别自身目录并传递给内嵌PowerShell的问题

直接在PowerShell代码块里用BAT的%~dp0行不通,因为PowerShell无法识别BAT的环境变量。正确做法是在调用PowerShell时把%~dp0作为参数传递进去,再在PowerShell代码中接收使用。

修改后的完整代码如下:

@PowerShell.exe -ExecutionPolicy RemoteSigned -Command "Invoke-Expression -Command ((Get-Content -Path '%~f0' | Select-Object -Skip 2) -join [environment]::NewLine) '%~dp0'"
@exit /b %Errorlevel%

Write-Host "OPERATION: Purge BMPs from Specified Folders";
  
$sourceDir = $args[0]

Get-ChildItem -Recurse -LiteralPath $sourceDir -Filter Clear_BMPs.ps1 |
  ForEach-Object { & $_.FullName }

关键改动说明

  • 在调用PowerShell的命令末尾添加'%~dp0',将BAT自身所在的绝对目录路径作为参数传递给PowerShell
  • PowerShell代码中用$args[0]接收该参数,赋值给$sourceDir替代原硬编码路径
  • %~dp0会自动获取BAT文件所在路径且末尾自带反斜杠,无需额外处理

修改后,无论将BAT文件迁移到哪台电脑的任意目录,都能自动识别自身位置,递归搜索子文件夹内的Clear_BMPs.ps1并执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:35:17