Veracrypt with batchfile: как остановить выполнение, если диск не смонтирован? - PullRequest
1 голос
/ 15 февраля 2020

У меня есть простой пакетный файл, который запускает первый veracrypt и после монтирования другого пакетного файла:

C:
cd C:\Program2\VeraCrypt
veracrypt /v \Device\Harddisk2\Partition1 /l L /a /p 123xyz /q 

cd /D D:\backup
start_backup.bat

start_backup.bat запускает резервное копирование с помощью robocopy (Windows 10), который обновляет / копирует файлы с одного диска C на внешний зашифрованный жесткий диск D соответственно L (имя монтирования).

Если veracrypt не может смонтировать диск по какой-либо причине (например, нет диска), пакет start_backup.bat будет запущен без резервного копирования, поскольку зашифрованный диск недоступен. Как можно избежать запуска start_backup.bat в случае, если привод не может быть смонтирован?

Пакетный файл записывается с помощью команд cmd.exe.

1 Ответ

1 голос
/ 16 февраля 2020

Простой способ сделать это с помощью оператора: && и || ...


@echo off && setlocal EnableDelayedExpansion

cd /d "C:\Program2\VeraCrypt"
(
.\veracrypt.exe /v \Device\Harddisk2\Partition1 /l L /a /p 123xyz /q 
) && (
cd /D "D:\backup" & call start_backup.bat
) || (
echo/ something really wrong is going on here....
%__APPDIR__%timeout.exe -1
goto :EOF
) 

rem ::  continue with more task here.... or goto :EOF

  • Или ...
@echo off && setlocal EnableDelayedExpansion

cd /d "C:\Program2\VeraCrypt"

.\veracrypt.exe /v \Device\Harddisk2\Partition1 /l L /a /p 123xyz /q  && (
cd /D "D:\backup" & call start_backup.bat ) || (
echo/ Something really wrong is going on here....
%__APPDIR__%timeout.exe -1 & goto :EOF ) 

rem ::  continue with more task here.... or goto :EOF

  • Опция go с тремя попытками и с таймаутом 30 секунд
@echo off && setlocal EnableDelayedExpansion

cd /d "C:\Program2\VeraCrypt"
:loop
set /a "_cnt+=1+0"
(
.\veracrypt.exe /v \Device\Harddisk2\Partition1 /l L /a /p 123xyz /q 
) && (
cd /D "D:\backup" & call start_backup.bat
) || (
echo/ something really wrong is going on here....
if "!_cnt!"=="3" (
     echo/ Some is really wrong here....
     %__APPDIR__%timeout.exe -1 & goto :EOF 
    ) else (
     echo/ Let's try +1 times until 3 [!_cnt!/10]
     %__APPDIR__%timeout.exe 30 
     goto :loop
   )
) 

  • Возможность go с помощью трех попыток и с таймаутом в 30 секунд с использованием if !errorlevel! 0/1 else, как предложено @ Stephan ...
@echo off && setlocal EnableDelayedExpansion

cd /d "C:\Program2\VeraCrypt"

:loop
set /a "_cnt+=1+0" && type nul>nul

.\veracrypt.exe /v \Device\Harddisk2\Partition1 /l L /a /p 123xyz /q 

if !errorlevel! == 0 (
       cd /D "D:\backup" & call start_backup.bat
     ) else (
       echo/ Something really wrong is going on here....
       if "!_cnt!"=="4" (
            echo/ Some is really wrong here....
            %__APPDIR__%timeout.exe -1 & goto :EOF 
           ) else (
             echo/ Let's try +1 times until 03 [0!_cnt!/03]
             %__APPDIR__%timeout.exe 30 
             goto :loop
          )
     ) 

Где происходит возврат к

Оператор / перенаправление синтаксиса in /

...