Use um arquivo .Properties para passar valores para um arquivo de lote

1

O que gostaríamos de fazer é eliminar a necessidade de inserir os nomes User_ID, User Password, Host Server Name e Specific Database em nosso arquivo em lotes ao automatizar um backup de nosso servidor MySQL.

Este é o arquivo em lote que eu uso agora:

:: Properties File for Batch

@echo off

cls

c:

cd\

cd program files\MySQL\MySQL Workbench 6.3 CE

mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr1 > c:\MySQLBackup\DB_Nbr1_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL


mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr2 > c:\MySQLBackup\DB_Nbr2_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL


mysqldump -uroot -pRoot_Password -hHost_Server_Name DB_Nbr3 > c:\MySQLBackup\DB_Nbr3_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL


mysqldump -uroot -pRoot_Password -hHost_Server_Name test > c:\MySQLBackup\test_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL

O que queremos fazer é ter um arquivo “.properties” separado que armazene o User ID; Senha; Nome do servidor host; etc.

Além disso, se pudéssemos obter uma listagem dos diretórios abaixo de um determinado caminho, o que daria um loop no número apropriado de vezes, isso seria ideal.

    
por Skibear99 19.07.2016 / 18:33

1 resposta

0

Você pode fazer isso assim ...

Crie sua lista de arquivos (ou arquivo .properties) contendo o username , senha , hostname e databasename no mesmo arquivo com os valores de cada um deles na primeira linha, e cada um separado por uma vírgula (ou seja, <Username>,<Password>,<Hostname>,<DatabaseName> ).

Exemplo de conteúdo da lista de arquivos - Linha 1

MyUserName,MyP@ssw0rd!,MyHostName,MyDatabaseName

Em seguida, use um script em lote usando FOR / F e defina o delimitador como uma vírgula que usa a lista de arquivos correlacionados para em seguida, chame o outro script em lote (backup do MySQL) passando os argumentos de acordo.

Script em lote usando os valores da lista de arquivos e chamando o script de backup do MySQL

FOR /F "TOKENS=1-4 DELIMS=," %%F IN (C:\MyFileList.properties) DO CALL "C:\Path\BatchScript.cmd" %%F %%G %%H %%I

Você precisaria alterar o script de backup do MySQL para manipular os argumentos que são passados pelo script de chamada, como no exemplo abaixo.

Lidar com script em lote passou argumentos

@ECHO OFF

CLS

SET User=%1
SET Pass=%2
SET Host=%3
SET DBName=%4

CD /D "C:\program files\MySQL\MySQL Workbench 6.3 CE"

mysqldump -u%User% -p%Pass% -h%Host% %DBName% > C:\MySQLBackup\%DBName%_BU_%date:~10,4%%date:~4,2%%date:~7,2%.SQL

GOTO EOF

Outro método seria apenas usar o script acima, que lida com os argumentos passados, e depois passar esses argumentos para o nível em que você pode ter esses scripts agendados para passar os valores de acordo.

Por exemplo, seu software de agendamento pode ter a capacidade de transmitir argumentos, então você usaria os exemplos de sintaxe abaixo com esse método e o script alteraria a variável com base no valor do argumento para você passar para o script.

  1. "C:\Path\MySQLDBBackup.cmd" <Username> <Password> <Hostname> <DatabaseName>
  2. "C:\Path\MySQLDBBackup.cmd" "<Username>" "<Password>" "<Hostname>" "<DatabaseName>"

Mais recursos

por 19.07.2016 / 19:24