批量读取文件到变量不起作用

时间:2015-05-20 11:46:25

标签: windows batch-file command-line

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

批处理文件脚本

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为我提供了文件内容。

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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

@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

答案 1 :(得分:1)

SETLOCAL EnableDelayedExpansion下方添加ECHO OFF并使用duration访问!duration!,而不是%{%}。