2017-06-12 1 views
0

Je suis en train d'écrire un script batch Windows, dans lequel je voudrais accéder .\build\whatetherthenameis\debug. Cependant, je reçois une erreur disant ce qui suit:Windows: Accès répertoire sans connaître son nom

The system can not find the given path 

Il ne peut y avoir un répertoire à cet endroit et rien d'autre. C'est un chemin généré, et malheureusement le nom au milieu varie.

Jusqu'à présent, j'ai essayé les commandes suivantes:

  • cd build\*\debug
  • build\~1\debug

Répondre

2

Si vous savez que le répertoire n'a qu'une profondeur d'un niveau, il peut être plus rapide de le rechercher directement au lieu d'effectuer une recherche arborescente entièrement récursive.

@For /D %%A In (*) Do @If Exist "%%A\debug\" CD "%%A\debug" 
+0

Il convient plus à mes besoins que l'autre réponse. Merci monsieur! –

+0

Un bel avantage à propos de cette réponse est 'for/d' supporte l'Unicode natif du système de fichiers, contrairement à' for/f'. Vous n'avez donc pas besoin de bricoler la page de codes de la console pour prendre en charge les noms internationaux. – eryksun

2
for /f "delims=" %%a in ('dir /s/b/ad ".\debug"') do cd "%%a" 

devrait vous déplacer dans le répertoire requis.

effectuer une liste de répertoires de /ad répertoires seulement /s/b sous forme de base avec des sous-répertoires, en recherchant debug. Assignez chaque répertoire trouvé à %%a (vous prétendez qu'il n'y en aura qu'un) et utilisez "delims=" pour vous assurer que le jeton entier est assigné.

+0

Merci, avec quelques adaptations, il fonctionne parfaitement –

+0

En général, si le nom du répertoire ne peut pas être représenté dans le courant codepage (parce que 'pour/f' est un cas d'angle dans cmd.exe qui était jamais mis à jour pour prendre en charge l'UTF-16 Unicode natif), vous pouvez alors faire précéder cette commande de 'chcp 65001' (UTF-8). Cependant, un grand nombre de programmes échouent avec l'implémentation buggée de l'UTF-8 de l'API de la console. Vous pouvez donc sauvegarder et restaurer la page de codes actuelle après avoir exécuté cette commande. – eryksun