2016-03-11 1 views
0

J'ai un dossier nommé "Photos" qui est un sous-dossier du répertoire courant. Dans ce dossier, il y a quatre sous-dossiers avec les noms "Order1", "Order2", "Order3", "Order4". J'essaie d'ouvrir ces sous-dossiers en utilisant une boucle.Ouvrir plusieurs sous-dossiers dans une boucle

Le code suivant ne fonctionne pas.

for i=1:4 
    current_path=pwd; 
    cd(current_path'); 
    cd('Photos\Order%d',i); 
end 
+2

Je pense qu'il y a une faute de frappe dans cd (current_path '); –

+0

Merci, oui. Je l'ai enlevé. le problème avec cd ('Photos \ Order% d', i) .Il ne fonctionne toujours pas – user6052232

+0

Lisez le message d'erreur, il vous dit quel est le problème. – Daniel

Répondre

2

Il y a beaucoup de problèmes qui se passent ici en même temps.

  1. Le principal problème est que vous modifiez les répertoires à chaque fois dans la boucle, mais vous êtes aussi obtenir la valeur du répertoire courant (pwd) chaque fois. Le répertoire ne se réinitialise pas automatiquement à l'endroit où vous étiez lorsqu'il revient en haut de la boucle. Je pense vous attendez current_path à être le dossier que vous a commencé et être le même pour toutes les itérations.

  2. Vous devez utiliser sprintf ou quelque chose de similaire pour créer vos noms de dossier "OrderN". cd ne sait pas quoi faire avec le format specifier que vous essayez d'utiliser.

  3. Vous devez toujours utiliser fullfile lors de la concaténation de chemins de fichier. Période.

  4. Vous devez utiliser absolus chemins si possible pour supprimer la dépendance sur le répertoire en cours.

  5. Avez-vous vraiment besoin de changer le répertoire de travail? Si vous essayez de charger des fichiers dans ces dossiers, veuillez utiliser chemins de fichier absolus pour les fichiers eux-mêmes plutôt que de changer de dossier.

  6. Si correspond à, assurez-vous de réinitialiser le chemin à l'endroit où il se trouvait à la fin de la boucle. Il n'y a rien de pire que d'exécuter du code et de se retrouver dans un répertoire différent de celui où vous étiez lorsque vous l'avez appelé.

Pour réellement faire fonctionner votre code, nous pourrions faire quelque chose comme ça. Mais compte tenu de tous mes points ci-dessus (spécifiquement, 4-5), je considérerais fortement une approche différente.

startpath = pwd; 

for k = 1:4 
    folder = fullfile(startpath, 'Photos', sprintf('Order%d', k)); 
    cd(folder) 
end 

% Set the current directory to what it was before we started 
cd(startpath) 
+0

Très bonne réponse. –

+0

Merci, son travail – user6052232

+1

@ user6052232 S'il vous plaît prendre le temps de lire et * comprendre * tous les points que j'ai fait ci-dessus. Ne pas simplement copier/coller du code. – Suever