添加(如果存在)现有批处理文件

时间:2015-12-01 08:49:40

标签: batch-file windows-xp windows-embedded

我正在尝试向现有批处理文件添加其他功能,下面的代码片段将我的数据从一个位置复制到另一个位置,然后删除创建的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

1 个答案:

答案 0 :(得分:2)

如果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中确认了其行为。

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

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

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