Вот в одну сторону , чтобы выполнить то, что вы просите.Есть и другие способы.Секрет здесь заключается в использовании «for / F» и отправке каждого результата в другую функцию.Другая функция будет записывать каждую строку в файл.Затем он будет искать строку «Файл (ы)», скопированную в xcopy, и направлять ее пользователю, если он ее увидит.
Также ... обратите внимание на операторы «goto: EOF».Они сообщают пакетному интерпретатору вернуть вызывающей стороне так же, как и любому другому языку программирования.
Я надеюсь, что это делает то, что вы просите.:)
:: Backup script with logging
@echo off
net use \\SERVER\Shared_Folder userPassword /USER:userName
set SRC="C:\Program Files (x86)\ApplicationName\TargetFolder"
set DST=\\SERVER\Shared_Folder\Backups
set LOG=%DST%\Backup_LogFile.log
echo:>>%LOG%
echo Backup from computer %COMPUTERNAME% >>%LOG%
echo Starts -- %DATE% %TIME% >>%LOG%
echo Wait please: backup is running...
for /f "delims=" %%f in ('xcopy %SRC% %DST%\%COMPUTERNAME%\ /A /D /E /J /Y /Z') do call :log_items "%%f"
echo Ends -- %DATE% %TIME% >>%LOG%
echo:>>%LOG%
goto :EOF
:log_items
Set InputLine=%~1
:: Log everything
echo %InputLine%>>%LOG%
:: Check if the line coming in contains "File(s) copied" if it doesn't, return
if "%InputLine:File(s) copied=%"=="%InputLine%" goto :EOF
:: If it does, show it to the user and return
echo %InputLine%
goto :EOF
Сравнение, выполненное для скопированных файлов, выглядит следующим образом:
Для строки с именем вашего файла: (здесь они совпадают, поэтому возвращается)
C:\git\ps>if "test\targetver.h" == "test\targetver.h" goto :EOF
Для строки с вашим количеством файлов: (здесь они не совпадают, не возвращается)
C:\git\ps>if "205 " == "205 File(s) copied" goto :EOF