2015-02-15 4 views
0

У меня есть простой пакетный файл для компьютера под управлением Windows XP, который копирует файл на USB-накопитель на E, F, G или H, все работает так, как должно, но я хотел бы получить подтверждение что файл был перенесен на диск с помощью текстового сообщения «Файлы, скопированные на USB-накопитель», что лучший способ сделать это?успешно совпадал с USB-накопителем IF EXIST

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 
) 
+0

Спасибо за быстрый ответ, Да у меня есть только 1 USB диска, но если у меня есть клавиатура и мышь подключила я не знаю букву диска, опция движения было бы хорошо, я дам это попробовать завтра, спасибо – user396581

+0

Я установил командный файл с измененной командой Move, но он не перемещает файл, он его создает, но никакого перемещения, я еще не добавил строку Delete, чтобы увидеть, что происходит, поэтому Я знаю, что он создается. – user396581

+0

Кажется, для меня работает на моем компьютере с Windows 7, но он не работает на компьютере, на котором я написал это, для которого стоит Windows XP? Я не уверен, нужна ли другая команда для запуска в старых версиях Windows? – user396581

Смежные вопросы