o lote 7zip cria pastas em vez de nome de arquivo

1

Eu tenho um script de lote simples do Windows, que é executado pelo software de backup como ação de pré-backup. Ele simplesmente procura por despejos SQL mais recentes, compacta-os em um arquivo 7zip 10 vezes menor e, em seguida, o backup em nuvem o coleta e envia para armazenamento em nuvem para arquivamento.

BATCH cria nome de arquivo com DATE na frente: 07-10-2018-bak.7z

Mas eu tenho problema com o arquivo BATCH:

  • quando eu o executo manualmente, ele executa muito bem e cria nome de arquivo 07-10-2018-bak.7z na pasta fornecida
  • mas quando eu o executo via software de backup (como usuário SYSTEM) como ação de pré-backup, ele cria SUBFOLDERS para cada DASH, assim: 18-bak.7z

Eu fiz ECHO de cada linha de comando e ela renderiza muito bem. Mesmo que eu corra linhas ecoadas manualmente, elas NÃO criam pastas, mas como deveriam, nome completo do arquivo com a data incluída:

"c:\Program Files-Zipz.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\**07-10-2018-bkp.7z**" "D:\SQL\Backup\SklSistem_FULL_sob.BAK"

Alguma ideia de onde eu perdi o ponto?

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:.=-!
  "c:\Program Files-Zipz.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)
    
por Labsy 07.10.2018 / 22:07

1 resposta

0

Esse problema provavelmente é causado por uma diferença no " formato de data " e a saída da variável ambiental %DATE% que o script gera ao usar " a conta você o executa de manuall y "versus o formato que é definido com" a conta de usuário que o software de backup executa ".

Você só precisa usar set archdate=!archdate:/=-! em vez de set archdate=!archdate:.=-! para substituir " / with - " em vez de " . with - " devido à diferença no formato de data de acordo com o problema experimentando que você explica com sua lógica atual.

Além disso, você deve considerar usar algo um pouco mais universal como wmic os get LocalDateTime para definir a variável que não depende do formato de data / localidade definido por cada perfil de conta de usuário - consulte Desconhecido de local% DATE% e% TIME% em arquivos em lote para algum detalhe.

Script

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:/=-!
  "c:\Program Files-Zipz.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

Mais recursos

por 08.10.2018 / 14:43