“Função” Substring dentro do Prompt de Comando

Olá a todos.

O post que inicia a semana não é especificamente sobre SQL Server, mas pode vir a ser utilizado.
Vamos entender melhor:

Ocasionalmente, precisamos efetuar backups de bancos de dados utilizando a data e hora atuais como parte do nome (como faz a “Backup Database Task”, dentro dos planos de execução).

Extrair estes dados utilizando as linguagens T-SQL ou VBScript é simples, mas o que dizer quando a execução do backup é feita através de uma tarefa agendada que invoca SQLCMD.EXE?

Há duas alternativas:

  1. Criar um arquivo com a lógica do backup, usando T-SQL, e passar como parâmetro do utilitário SQLCMD.EXE (SQLCMD -i input.sql …)
  2. Criar um arquivo BAT ou CMD e extrair os valores de dia, mês, ano, hora, minuto das variáveis de ambiente DATE e TIME.

O foco deste post é mostrar como implementar a segunda opção.

É uma funcionalidade pouco conhecida do Shell do Windows (cmd.exe) o uso do operador :~ em conjunto com outras variáveis de ambiente.
Por exemplo:

SET VAR1=HELLO
ECHO %VAR1:~2%

O resultado é “LLO”; significa que são retornados os caracteres a partir da posição 3 (sim, o primeiro valor do índice é zero) até o fim da string.
Se quisermos apenas alguns caracteres, temos que informar a quantidade ao usar o operador:

ECHO %VAR1:~2,2%

Resultado: LL

Com base nestes resultados, já podemos criar nosso arquivo batch que fará a execução do backup:

@ECHO OFF

SET DT=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%

SET TM=%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

SQLCMD -E -S . -Q “BACKUP DATABASE [DB1] TO DISK = ‘D:\Temp\Backup\DB1_FULL_%DT%_%TM%.BAK’ WITH INIT “

Agora, podemos incrementar nosso arquivo batch com parâmetros para substituição, log, etc.

Atualização:

No meu ambiente, as configurações regionais estão definidas como Português-Brasil (formato DD/MM/YYYY. Logo, se o servidor ou estação estiver em inglês ou outro idioma, será necessário fazer uma adaptação.

 

Espero que tenha contribuído.
Boa semana a todos.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s