我正在BAT文件上编写脚本,以在必要时使用,以在多台计算机上备份应用程序的文件夹。
此脚本可在Windows 7上运行:它也可在Windows 10上运行吗?
:: Backup script with logging
@echo off
net use \\SERVER\Shared_Folder userPassword /USER:userName
set PATH=c:\WINDOWS\system32;
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...
xcopy %SRC% %DST%\%COMPUTERNAME%\ /A /D /E /J /Y /Z>>%LOG%
echo Ends -- %DATE% %TIME% >>%LOG%
echo:>>%LOG%
我的脚本工作正常,但我希望用户在终端上比执行脚本更好的响应。 该脚本可以在日志文件上正确添加操作,但是我希望用户只能看到复制的文件数,而不是复制的所有文件的列表。
答案 0 :(得分:1)
这是一种方法,可以完成您的要求。还有其他方法。这里的秘密是使用“ 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