将命令输出结果复制到变量批处理

时间:2015-10-23 18:10:13

标签: windows batch-file

所以我正在尝试使用批处理脚本将本地文件复制到我的网络,并希望能够得到一个结果,以了解该过程是否正确完成。

我的代码如下:

@echo off
set locatie_folder=G:\Info\instructiuni.mht
for /f "tokens=1,2 delims= " %%a in (IP.txt) do (
    copy %locatie_folder% "\\%%a\vsr">> temp.tmp
    set /p VAR=<temp.tmp
    echo %%b %VAR%
    del temp.tmp
)
pause
exit

我的IP.txt文件如下所示:

10.117.14.10 100-01
10.117.14.11 100-02
10.117.14.12 100-03

首先是IP,第二个是网络中该IP的专用名称。

我需要输出类似

的内容
100-01 1 file(s) copied.
100-02 0 file(s) copied.
100-03 1 file(s) copied.

现在我的问题是,由于某种原因,变量VAR没有让我获得“0个文件被复制”的状态。或“复制了1个文件”。即使它在temp.tmp文件中正确写入也会读取。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要启用delayed expansion才能获取VAR的新值,因为您要在代码块中设置读取它for环)。当解析整个代码块时,立即%VAR%扩展始终返回值;延迟!VAR!扩展后,您将获得更新的值。

试试这个:

@echo off
setlocal EnableDelayedExpansion

set "locatie_folder=G:\Info\instructiuni.mht"

for /F "usebackq tokens=1,2 delims= " %%A in ("IP.txt") do (
    > "temp.tmp" copy "%locatie_folder%" "\\%%~A\vsr"
    < "temp.tmp" set /P VAR=
    echo "%%~B" !VAR!
    del "temp.tmp"
)
pause
endlocal
exit /B

当你让另一个for /F循环捕获复制命令的输出时,你可以更简单地使用它,而不使用临时文件:

@echo off

set "locatie_folder=G:\Info\instructiuni.mht"

for /F "usebackq tokens=1,2 delims= " %%A in ("IP.txt") do (
    for /F "delims=" %%X in ('copy "%locatie_folder%" "\\%%~A\vsr"') do (
        echo "%%~B" %%X
    )
)
pause
exit /B

答案 1 :(得分:1)

将COPY命令放在FOR / F命令中以捕获到变量的详细输出。 这样的事情。

for /F "tokens=* delims= " %%G in ('copy temp.txt C:\temp\') do echo %%b %%G

编辑:使用您的确切代码。

@echo off

set locatie_folder=G:\Info\instructiuni.mht

for /f "tokens=1,2 delims= " %%a in (IP.txt) do (
    for /F "tokens=* delims= " %%G in ('copy %locatie_folder% "\\%%a\vsr"') do echo %%b %%G
)
pause
exit