2015-12-01 1 views
0

J'essaie d'ajouter des fonctionnalités à un fichier batch existant, l'extrait de code ci-dessous copie mes données d'un emplacement à un autre, puis supprime le fichier zip qui a été créé, tout fonctionne bien . Ce que je veux faire est si le fichier existe déjà sur le lecteur USB pour ajouter un nombre incrémental à la fin du fichier par exemple. FileName-FileDate (1) ou FileName-FileDate (2) Je pourrais ajouter du temps au FileStamp qui ajoute actuellement la date mais cela pourrait rendre le nom du fichier un peu long. Je copie le fichier sur une clé USB en tant que sauvegarde, c'est pourquoi j'utilise les lecteurs E, F, G, H, en fonction de ce que Windows voit le lecteur comme, il est également important que le fichier créé sur le lecteur C: est supprimé en raison de l'espace. J'utilise le/y pour réduire la saisie de l'utilisateur car cela sera fait par des personnes ayant des compétences technologiques limitées, donc je ne veux pas vraiment utiliser /yy. La machine n'a pas de clavier, seulement un écran tactile, donc renommer le fichier n'est pas une chose facile à faire.Ajout s'il existe à un fichier batch existant

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 
+3

double possible de [Comment copier (et incrément) plusieurs instances d'un fichier en utilisant le fichier batch] (http://stackoverflow.com/questions/28697436/how-to-copy-and-increment-multiple -instances-of-a-file-using-batch-file) – JosefZ

+0

La réponse ci-dessus ne fonctionne pas sur le système Windows XP Embedded que j'utilise – user396581

Répondre

1

IF EXIST ne fonctionne pas sur les lettres de lecteur et des répertoires, mais heureusement, il y a une solution obscure:

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

Il se trouve que des constructions de support comme annexant >NUL sur les instructions de commande, il y a une sorte de fichier virtuel nommé "NUL" dans chaque répertoire incluant le répertoire racine d'un lecteur. La vérification de son existence équivaut à une vérification de l'existence du répertoire ou du lecteur.

Ce comportement est documenté dans un article de la base de connaissances Microsoft (https://support.microsoft.com/en-us/kb/65994) et j'ai confirmé son comportement sur FreeDOS 1.1 et dans un shell de commande Windows 7.

Bien que l'article de la BC traite de la vérification de l'existence d'un annuaire, il indique également que la technique peut être utilisée pour voir si un lecteur est présent. Dans le cas de vérifier l'existence d'entraînement, cependant, mises en garde existent:

  • Une erreur Abort, Retry, Fail? se produit si le lecteur n'est pas formaté.

  • L'utilisation de cette technique pour vérifier l'existence d'un lecteur dépend de l'implémentation du pilote de périphérique et peut ne pas toujours fonctionner.