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
)