Успешно скопирован на USB-накопитель ЕСЛИ СУЩЕСТВУЕТ
У меня есть простой пакетный файл для компьютера с Windows XP, который копирует файл на USB-накопитель на E, F, G или H, все работает как надо, но я хотел бы получить подтверждение того, что файл был передан на накопитель Что означает лучший способ сделать это с помощью текстового сообщения "Файлы успешно скопированы на USB-накопитель"?
REM ------ Creation of the ZIP file ------
%SupervisorPath%\7-ZipPortable\App\7-Zip\7z a -tzip %BackupPath%\Backup\%FileStamp%.zip %BackupPath%\Backup\
REM ------ Copy the backup file to a USB drive with File Name and Date Stamp -----
IF EXIST E: (echo copying files to USB drive E:
copy %BackupPath%\Backup\%FileStamp%.zip E: /y )
IF EXIST F: (echo copying files to USB drive F:
copy %BackupPath%\Backup\%FileStamp%.zip F: /y )
IF EXIST G: (echo copying files to USB drive G:
copy %BackupPath%\Backup\%FileStamp%.zip G: /y )
IF EXIST H: (echo copying files to USB drive H:
copy %BackupPath%\Backup\%FileStamp%.zip H: /y )
REM ------ Delete the temporary zip file from the backup folder ------
echo Deleting temporary zip file from the backup folder
Del %BackupPath%\Backup\%FileStamp%.zip
Новая часть файла выглядит следующим образом, но она не перемещает файлы
REM ------ Creation of the ZIP file ------
%SupervisorPath%\7-ZipPortable\App\7-Zip\7z a -tzip %BackupPath%\Backup\%FileStamp%.zip %BackupPath%\Backup\
REM ------ Move the backup file to a USB drive with File Name and Date Stamp ------
for %%D in (E F G H) do if exist %%D: (
echo Moving files to USB drive %%D:
move /y "%BackupPath%\Backup\%FileStamp%.zip" %%D: >nul && (
echo Files moved to USB drive successfully
goto :break
)
)
:break
1 ответ
Вы можете использовать &&
оператор условно выполнить команду в случае успеха
for %%D in (E F G H) do if exist %%D: (
echo copying files to USB drive %%D:
copy /y "%BackupPath%\Backup\%FileStamp%.zip" %%D: >nul && echo Files copied to USB drive successfully
)
echo Deleting temporary zip file from the backup folder
del "%BackupPath%\Backup\%FileStamp%.zip"
Я подозреваю, что у вас есть только один USB-накопитель, и вы не уверены, какая буква ему назначена. В этом случае вы можете использовать MOVE вместо COPY, а затем DEL, и вы можете прервать цикл в случае успеха.
for %%D in (E F G H) do if exist %%D: (
echo Moving files to USB drive %%D:
move /y "%BackupPath%\Backup\%FileStamp%.zip" %%D: >nul && (
echo Files moved to USB drive successfully
goto :break
)
)
:break
||
Оператор условно выполняет команду при неудаче. Если вы используете оба &&
а также ||
, затем ||
должен следовать &&
,
someCommand && (
commandToRunIfSuccess
) || (
commandToRunIfError
)
Если последняя команда в вашем блоке успеха потерпит неудачу, то будет запущен следующий блок ошибок. Так что, если последняя команда может потерпеть неудачу, вам следует добавить другую команду, которая гарантированно будет успешной. Самая простая (и самая быстрая) команда, гарантированно успешная: (call )
, Обратите внимание, что есть свободное место.
someCommand && (
commandToRunIfSuccess
someCommandThatMayFail
(call )
) || (
commandToRunIfError
)