2009-08-29 7 views
1

je veux rechercher un programme, comme celui-ci:CMD: Recherche du programme et de répertoire variables

cd "C:\" 
for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
) 

Premier problème: je veux laisser la recherche cuvette tous les disques durs (comme « cd Poste de travail » ou quelque chose comme ça?)

Après cela, il devrait faire une variable du répertoire dans lequel ce programme est.

Comment faire cela en batch/cmd?

Répondre

1

Ce script permet d'imprimer les chemins complets où un fichier se trouve:

@echo OFF 

for %%D in (c,d,e) do ( 
    If exist %%D:\ (  
     for /f "delims=" %%f in ('dir /b /s %%D:\%1 2^> NUL') do (
      @echo %1 found: %%~dpf 
     ) 
    ) 
) 

%%~dpf aura le chemin vers le fichier pour chaque occurrence trouvée (il peut y avoir plus d'un). Si vous avez besoin d'agir sur ces chemins que vous avez plusieurs options:

  1. Ajouter vos commandes de traitement de fichiers après la ligne @echo %1 found: %%~dpf, en utilisant %%~dpf comme la variable qui contient le chemin complet du fichier.

  2. Ecrivez le chemin d'accès à un fichier texte temporaire (@echo %%~dpf >> temp.out), puis relisez-le dans une autre boucle for à traiter.

  3. Concatène le chemin vers une variable d'environnement local (set FILE_PATHS=!FILE_PATHS!;%%~dpf), puis analyse cette variable dans une autre boucle for à traiter.

+0

Donc pour la 2ème je fais juste ça et ensuite plus tard en dehors du 'for' en ajoutant 'set /p=

+0

Pour le 2ne one you aurait besoin d'une autre boucle 'for/f' opérant sur le fichier' temp.out'. –

1

Il y a un problème avec "cd C: \", cela ne fonctionne que lorsque vous êtes sur le lecteur C :, mais pas si vous êtes sur un autre lecteur. La solution qui est d'écrire la première lettre La façon du lecteur plus simple serait de le faire de cette façon:

for %%D in (c,d,e,f,g,h,i,j,k,l,m,o) do (
    %%D: 
    cd %%D:\ 
     for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
     ) 
) 

il recherche tous les lecteurs. Vous pouvez également utiliser

for %%D in (c,d,e,f,g,h,i,j,k,l,m,o) do (
    If exist %%D:\ do (
     %%D: 
     cd %%D:\ 
     for /f "delims=" %%f in ('dir /b /s myprogram.exe') do (
     ) 
    ) 
) 

Espérons que cela aide.

+0

Vous pouvez essayer 'cd/d %% D:'; le commutateur '/ d' changera pour le lecteur spécifié, en plus du répertoire. Entrez 'cd /?' Depuis une ligne de commande pour voir si le commutateur '/ d' est supporté par votre système d'exploitation. –

+0

mais, comment faire une variable du répertoire où se trouve myprogram? –

+0

Dans cette seconde pour le code, %% f sera remplacé par le chemin de "myprogram.exe", tel que "D: \ folder \ myprogram.exe". Puisque vous demandez le dossier, utiliser "% ~ pf" (avec des guillemets, puisque ~ les supprime, et les espaces non-cités dans les chemins peuvent gâcher le code) retournera le dossier, pas le fichier (comme "E: \ Path \ To \ MyProgFolder " Le vrai problème est ici, vous ne pouvez pas assigner de variables normalement dans un code for.il existe un code" setlocal enabledelayedexpansion "pour cela, mais je ne le recommande vraiment pas, ma solution est soit d'écrire/lire les fichiers temporaires, ou rediriger en tant qu'argument vers un autre fichier bat –

Questions connexes