所以我正在尝试使用批处理脚本将本地文件复制到我的网络,并希望能够得到一个结果,以了解该过程是否正确完成。
我的代码如下:
@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文件中正确写入也会读取。
我在这里做错了什么?
答案 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