批量将文件读入变量不起作用

Batch Reading File into Variable not working

我正在尝试使用文件作为中介将命令输出重定向到变量。我能够将命令输出重定向到文件,但无法将文件内容读入变量。

批处理文件脚本

echo off

pushd C:\Software
set TEMP_DIR=C:\Users\prade\Softwares

for /D %%i in (*) do (
    pushd "%%i"
    echo %TIME% > %TEMP_DIR%\a.log
    type %TEMP_DIR%\a.log
    for /f "delims=" %%x in (%TEMP_DIR%\a.log) do set duration=%%x
    echo %%i  %duration%
    popd
)
popd
echo on

我给出以下输出

C:\Users\prade>echo off
 7:36:47.86
AutoHotKey
 7:36:47.86
cygwin64
 7:36:47.86
ffmpeg-20150518-git-451be67-win64-static
 7:36:47.86
mtn-200808a-win32
 7:36:47.86
ProcessExplorer
 7:36:47.86
tools

如您所见,目录名称后没有任何内容,但 type 给出了文件内容。

如果我 echo %duration% 在同一个 cmd window 中终止批处理文件后,它会返回上次。

我做错了什么?

@echo off

pushd C:\Software
set "TEMP_DIR=C:\Users\prade\Softwares"

setlocal enableDelayedExpansion
for /D %%i in (*) do (
    pushd "%%i"
    echo %TIME% > "%TEMP_DIR%\a.log"
    type %TEMP_DIR%\a.log
    for /f "usebackq delims=" %%x in ("%TEMP_DIR%\a.log") do set "duration=%%x"
    echo %%i  !duration!
    popd
)
popd
echo on

ECHO OFF 下方添加 SETLOCAL EnableDelayedExpansion 并使用 !duration! 而不是 %duration%.

访问 duration