2017-07-25 61 views
0

一个蝙蝠脚本我做了一个简单的脚本来备份我的数据库,现在我有一个问题,我的每个服务器的变量存储在.txt我试图加载它们在脚本多次。运行具有多个配置

眼下这个配置它覆盖的configs,而不是运行它为每个文件。

有没有一种方法,使脚本文件xxx执行接档yyy等等

for /F "tokens=*" %%a in (servers\xxx.txt servers\yyy.txt etc) do (
    %%a 
) 

:: Backup folder 
set backupfldr="C:\Backup\files\" 
:: MySQL EXE Path 
set mysqldumpexe="C:\Backup\mysqldump-5_6.exe" 
:: zip 
set zipper="C:\Backup\zip\7za.exe" 

:: date 
set datetimef=%date:~-4%%date:~3,2%%date:~0,2% 
:: final 
set bkupfilename=%datetimef%-%dbname%.sql 


:: start 
echo Backing up to file: %bkupfilename% 

%mysqldumpexe% --set-gtid-purged=OFF -h %server% -u %dbuser% -p%dbpass% 
%dbname% > %backupfldr%"%bkupfilename%" 

.txt文件都是这样

set server=100.100.100.100 
set dbname=nameofdatabase 
set dbuser=userofdatabase 
set dbpass=passofdatabase 
+0

将是很好的知道,如何'xxx.txt'等被格式化。你就可以显示这些文件中的一个(与模糊的密码,当然...)? – Stephan

+0

是的,我只设置中的.txt的变量,然后执行脚本的其余部分。现在,因为所有文件都具有相同的变量,文件2将覆盖文件1.我期待,使运行文件1接档2脚本等 – Adrian

回答

0

我没有验证你的逻辑,但是对于字符串列表(文件名在这里)使用一个普通的for(没有/f):

REM for every of those files call a subroutine: 
for %%a in ("servers\xxx.txt" "servers\yyy.txt" etc) do call :process %%a 
goto :eof 

:process 
copy "%~1" "%~dp0\temp.bat" 
call "%~dp0\temp.bat" 
:: Backup folder 
set backupfldr="C:\Backup\files\" 
:: MySQL EXE Path 
set mysqldumpexe="C:\Backup\mysqldump-5_6.exe" 
:: zip 
set zipper="C:\Backup\zip\7za.exe" 

:: date 
set datetimef=%date:~-4%%date:~3,2%%date:~0,2% 
:: final 
set bkupfilename=%datetimef%-%dbname%.sql 

:: start 
echo Backing up to file: %bkupfilename% 

%mysqldumpexe% --set-gtid-purged=OFF -h %server% -u %dbuser% -p%dbpass% 
%dbname% > %backupfldr%"%bkupfilename%" 

(给,你的.txt文件看起来像:

set server=100.100.100.100 
set dbname=nameofdatabase 
set dbuser=userofdatabase 
set dbpass=passofdatabase 

+0

非常感谢它添加了调用子程序后完美。 – Adrian

相关问题