0

我正在尝试向现有批处理文件添加其他功能,下面的代码片段将我的数据从一个位置复制到另一个位置,然后删除创建的 zip 文件,一切正常。

我想要做的是如果文件已经存在于 USB 驱动器上,则在文件末尾添加一个增量数字,例如。FileName-FileDate(1) 或 FileName-FileDate(2) 我可以向 FileStamp 添加时间,此时它会添加日期,但这可能会使文件名有点长。

我将文件复制到 USB 驱动器作为备份,这就是我使用驱动器 E、F、G、H 的原因,这取决于 Windows 将驱动器视为什么,在 C: 驱动器上创建的文件也很重要因空间问题被删除。

我正在使用 /y 来减少用户输入,因为它将由技术技能有限的人完成,所以我真的不想使用 /-y。而且机器没有键盘,只有触摸屏,所以重命名文件不是一件容易的事。

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
4

1 回答 1

2

IF EXIST 不适用于驱动器号和目录,但幸运的是,有一个模糊的解决方法:

C:\> IF NOT EXIST D:\NUL ECHO D:\ not present.
D:\ not present.
C:\> IF EXIST C:\NUL ECHO C:\ exists.
C:\ exists.

事实证明,为了支持附加>NUL命令语句等结构,每个目录(包括驱动器的根目录)中都有一种名为“NUL”的虚拟文件。检查它的存在等同于检查目录或驱动器的存在。

此行为记录在 Microsoft 知识库文章 ( https://support.microsoft.com/en-us/kb/65994 ) 中,我已确认其在 FreeDOS 1.1 和 Windows 7 命令 shell 中的行为。

虽然知识库文章解决了检查目录存在的问题,但它也表明该技术可用于查看驱动器是否存在。但是,在检查驱动器是否存在的情况下,存在一些警告:

  • Abort, Retry, Fail?如果驱动器未格式化,则会发生错误。

  • 使用此技术检查驱动器是否存在取决于设备驱动程序的实现,并且可能并不总是有效。

于 2016-04-27T17:31:50.967 回答