批处理脚本如何识别自身所在目录并赋值给变量?
解决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
相关产品推荐
相关产品推荐

