0

我有一个用于 Windows XP 机器的简单批处理文件,它将文件复制到 E、F、G 或 H 上的 USB 驱动器,一切正常,但我想确认文件已通过以下方式传输到驱动器意味着“文件已成功复制到 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
4

1 回答 1

2

您可以使用&&运算符在成功时有条件地执行命令

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

操作员在||失败时有条件地执行命令。如果你同时使用&&and ||,那么||应该遵循&&

someCommand && (
  commandToRunIfSuccess
) || (
  commandToRunIfError
)

如果成功块中的最后一个命令失败,那么它将触发后续的错误块。因此,如果最后一个命令可能失败,那么您应该添加另一个保证成功的命令。保证成功的最简单(也是最快)的命令是(call ). 请注意,有一个必需的空间。

someCommand && (
  commandToRunIfSuccess
  someCommandThatMayFail
  (call )
) || (
  commandToRunIfError
)
于 2015-02-15T15:06:48.013 回答