web-dev-qa-db-fra.com

Empêcher d'écraser un fichier en utilisant cmd s'il existe

J'écris actuellement un fichier de commandes .bat qui exécute un fichier d'installation. Avant d'exécuter le fichier d'installation, je vérifie si le répertoire existe pour éviter de réinstaller l'application.

Je le fais en utilisant un If Not Exist filename déclaration. Si le fichier installé n'existe pas, j'exécute ensuite le fichier d'installation.

Pour une raison quelconque, lorsque je le teste avec l'application où il a déjà été installé, il tente toujours de réinstaller l'application par dessus.

Voici un extrait de mon code:

cd "C:\Documents and Settings\John\Start Menu\Programs\"
pause
If NOT exist "Software Folder"\ (
 start \\filer\repo\lab\"software"\"myapp"\setup.exe
 pause
) 

SoftwareFolder est un sous-répertoire de "C:\Documents and Settings\John\Start Menu\Programs\". Je vérifie s'il existe dans mon dossier Programs.

Je sais que rien ne va pas avec ma commande start. J'ai l'impression que quelque chose ne va pas avec ma commande de début CD ou l'un de ses paramètres.

Merci beaucoup les gars!

35
Johnrad

Utilisez le chemin complet du dossier dans votre code If Not Exist. Dans ce cas, vous n’avez même plus besoin de CD:

If Not Exist "C:\Documents and Settings\John\Start Menu\Programs\SoftWareFolder\"
44
Jimmy D

Comme dans la réponse de Escobar Ceaser, je suggère d'utiliser des guillemets tout au long du chemin. C'est la manière habituelle d'enrober l'intégralité du chemin dans "", pas seulement des noms de répertoires distincts dans le chemin.

J'ai eu un problème similaire, cela n'a pas fonctionné pour moi. Mais il n’était pas possible d’utiliser "" dans le chemin d’accès pour des noms de répertoires distincts, car celui-ci contenait des variables d’environnement, qui couvraient elles-mêmes plusieurs hiérarchies de répertoires. La conclusion était que je manquais l'espace entre la fermeture "et le (

La version correcte, avec l'espace avant le support, serait

If NOT exist "C:\Documents and Settings\John\Start Menu\Programs\Software Folder" (
 start "\\filer\repo\lab\software\myapp\setup.exe"
 pause
) 
3

J'ai remarqué quelques problèmes avec cela qui pourraient être utiles pour quelqu'un débutant, ou un utilisateur quelque peu inexpérimenté, à savoir. Première...

CD /D "C:\Documents and Settings\%username%\Start Menu\Programs\"

deux choses l’une est qu’un/D après le CD puisse s’avérer utile pour s’assurer que le répertoire est modifié mais ce n’est pas vraiment nécessaire, ensuite, si vous allez passer cela d’un utilisateur à l’autre, vous devez ajouter au lieu de votre name, le code% username%, cela rend le code utilisable sur n’importe quel ordinateur, à condition que votre fichier setup.exe se trouve au même emplacement que vous sur votre ordinateur. Bien sûr, s’assurer de cela est plus difficile. également...

start \\filer\repo\lab\"software"\"myapp"\setup.exe

le code de début ici, peut être configuré comme ça, mais la syntaxe correcte est

start "\\filter\repo\lab\software\myapp\" setup.exe

Cela va exécuter: setup.exe, situé dans:\filter\repo\lab ... etc. \

3
Noah Puckett