Я пытаюсь скопировать содержимое нескольких изображений .iso в каталог. Для этого я создал пакетный файл, который монтирует файл .iso в Virtual Clone Drive, а затем начинает копирование. Однако Daemon.exe возвращается до завершения монтирования. Я хочу продолжить только после того, как виртуальный диск будет доступен, поэтому я вставил цикл для его ожидания, например так:

"C:\Program Files (x86)\Elaborate Bytes\VirtualCloneDrive\Daemon.exe" -mount "%imagefile%" "%drive%"
:loop
if not exist "%drive%\" (
    sleep 1
    goto :loop
    )
xcopy "%drive%\" "%tempfolder%" /e /h /i /r /y

На самом деле это не работает, потому что в строке if not Существует диалоговое окно:

cmd.exe - нет диска

В приводе нет диска. Пожалуйста, вставьте диск в дисковод V:.

Отмена Попробуйте снова Продолжить

Таким образом, пакетный файл не работает автоматически, потому что мне нужно нажать одну из кнопок.

Как я могу избежать этого диалога?

[Обновление] Как указал Appleoddity, в cmd нет команды sleep, поэтому я обновил код:

"C:\Program Files (x86)\Elaborate Bytes\VirtualCloneDrive\Daemon.exe" -mount "%imagefile%" "%drive%"
:loop
if not exist "%drive%\" (
    timeout 1 /nobreak > nul
    goto :loop
    )
xcopy "%drive%\" "%tempfolder%" /e /h /i /r /y

[Обновление] Вот две картинки: до и после нажатия клавиши ВВОД, чтобы выполнить vcd.bat.

2 ответа2

0

Может быть, кто-то еще заинтересован в проблеме, поэтому я пишу, как я наконец решил проблему:

"C:\Program Files (x86)\Elaborate Bytes\VirtualCloneDrive\Daemon.exe" -mount "%imagefile%" "%drive%"
:loop
vol "%drive%" > nul 2> nul
if not "%errorlevel%" == "0" (
    timeout 1 /nobreak > nul
    goto :loop
    )
xcopy "%drive%\" "%tempfolder%" /e /h /i /r /y

Примечание: vol обычно печатает основную информацию о диске, так как он не нужен, и вывод, и вывод отладки перенаправляются в nul. Важным фактом является то, что он не отображает диалоговое окно в случае ошибки, а устанавливает для переменной среды уровня ошибки значение 1 (или что-то отличное от 0), что можно проверить, чтобы избежать использования конструкции if Существовать.

0

Я не могу воспроизвести вашу проблему в Windows 10.

@echo off
set drive=F:
"C:\Program Files (x86)\Elaborate Bytes\VirtualCloneDrive\Daemon.exe" -mount "D:\Windows.iso" "%drive%"

:loop
if not exist "%drive%\" (
    echo Drive does not exist
    timeout 1 /nobreak >NUL
    goto :loop
    )
echo Drive Exists

Выход:

Drive does not exist
Drive does not exist
Drive Exists

Похоже, этой проблемы не существует. Сообщение, на которое вы ссылаетесь, звучит как старая ошибка Windows 98 или что-то в этом роде. Мне не удалось воспроизвести любой запрос, который требовал ввода при попытке использовать этот сценарий, независимо от состояния диска. Возможно, вы не определили %drive% как у меня, или на вашем компьютере есть что-то другое, вызывающее проблему, например какой-то антивирус или что-то, пытающееся сканировать диск, когда вы получаете к нему доступ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .