如果存在则添加到现有的批处理文件

Adding if exist to an existing batch file

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

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

我正在将文件复制到 USB 驱动器作为备份,这就是我使用驱动器 E、F、G、H 的原因,这取决于 Windows 对驱动器的看法,这也很重要由于 space.

在 C: 驱动器上创建的文件被删除

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

REM ------ Creation of the ZIP file ------

%SupervisorPath%-ZipPortable\App-Zipz 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

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? 错误。

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