新手批量脚本这里。我试图将Batch 'function'的输出捕获到一个变量(这并不完全是因为batch缺少对函数的内置支持)。这是我的代码:

@echo off
setlocal enabledelayedexpansion
goto main

:: Functions
:runps
powershell -NoProfile -ExecutionPolicy Bypass -Command "%1"
goto :eof

:appendToPath
set OLDPATHPS="[Environment]::GetEnvironmentVariable('PATH', 'User')"
for /f %%i in ('call :runps %OLDPATHPS%') do ^
    set OLDPATH=%%i
:: ...
goto :eof

:main
call :appendToPath

运行此命令时,我从控制台获得以下输出:
Invalid attempt to call batch label outside of batch script.

为什么会发生这种情况,我能做些什么来解决?

最佳答案

Call建立一个新的cmd实例,该实例无法访问旧实例中的批处理标签。
解决方案包括将结果输出到一个文件并读取该文件,或者可能

for /f %%i in ('%runps% "%OLDPATHPS%"') do (
    set OLDPATH=%%i
)

其中runps已设置为powershell -NoProfile -ExecutionPolicy Bypass -Command

10-01 08:50