Mover a pasta zip de um local para outro usando o arquivo de lote

0

Estou trabalhando no seguinte cenário usando um arquivo em lotes:

  1. Copie determinadas subpastas de uma pasta e compacte-as em um novo local.

    Zip %Output_Path%\ Apps_backup_%today%.zip \%Server%\QlikViewfolder\Common\apps\*.qvw
    
    Zip %Output_Path%\_Gen_backup_%today%.zip \%Server%\QlikViewfolder\Common\generators\*.* 
    
  2. zipar todas as pastas compactadas em uma única pasta

    Zip %Output_Path%\Daily_backup_%today%.zip %Output_Path%
    

    Estou fazendo este passo porque quero que todos os arquivos estejam em uma única pasta. Não encontrei uma maneira de copiar subpastas específicas de uma pasta e copiá-las diretamente em um zip.

  3. Mova as pastas zip para um novo local.

  4. Uma vez movida, exclua a pasta zip do dia anterior

Consegui fazer o passo 1 e 2. Mas não consegui fazer o passo 3. Por favor, avise nos dois passos 3 e 4?

    
por Vindhya Giri 12.05.2017 / 19:37

2 respostas

0

Você já tem as informações importantes no lugar. Você conhece os nomes / nomes de arquivos de origem e de destino e tem uma variável %today que contém a data atual.

Para mover o arquivo, você pode usar o comando move ou algum copy . A parte importante é que você tem o nome do arquivo do seu backup zip ( %Output_Path%\Daily_backup_%today%.zip ). Se você usar um comando de cópia, precisará usar del posteriormente para remover o arquivo original.

Embora tenha explicado em um de seus comentários que você está usando o código a seguir para atribuir a variável hoje, isso não explica muito. As variáveis que você usa para criar %today não são padrão. Então você já executou algum comando para construí-los.

set today=%Month%-%Day%-%Year% 

Se você olhar para Como obter e exibir a data de ontem? e Como obter a data de ontem no arquivo de lote? [duplicado] você descobrirá que aparentemente não há uma maneira fácil de obter a data de ontem em um lote. Mas você provavelmente poderia usar essas soluções.

Como seu comentário aponta, você está usando a abordagem mais fácil para excluir "todos" os arquivos antigos (que devem ser apenas um) e, em seguida, apenas mover o novo arquivo.

O que você quer fazer agora é verificar sempre que uma operação foi bem-sucedida antes de prosseguir. O valor de %errorlevel% depende do aplicativo com o qual você está lidando. Como um exemplo fácil, o seguinte retornará 0, o que indicaria que não houve erro. Que tipo de verdade é verdade, mas provavelmente não é o que você realmente quer.

del C:\Temp\ThisFileDoesn'tExist.txt
echo %errorlevel%

Uma boa pergunta com informações sobre isso parece ser check se o comando foi bem sucedido em um arquivo de lote .

Eu não sei qual programa zip você usa e você terá que verificar a documentação para obter informações sobre quais valores esperar, etc. Entretanto, em vez de verificar o valor de retorno, você pode verificar sempre que o arquivo que você espera existir. Um bom exemplo disso é Como verifique se existe um arquivo dentro de um arquivo de lote [duplicado] .

Então, o que seria uma solução possível?

  1. Crie seus arquivos como você fez antes
  2. Verifique se o seu arquivo de backup existe. Isso não testa se foram encontrados erros, mas pelo menos você sabe que algo foi gravado em um arquivo que atende ao nome desejado
  3. Excluir os backups antigos
  4. Mova o novo arquivo de backup
por 17.05.2017 / 07:58
0

Você está procurando o comando xcopy . Definir as localizações inicial e final ex. como xcopy "from" "to"

@echo off
xcopy "download.zip" "D:\Games"
pause

se não funcionar, tente xcopy "" "D:\Games" download.zip

    
por 13.05.2017 / 12:08