× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 [BATCH] for imbriqué recherche dossier
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Pierre Goudat
  Posté le 27/07/2017 @ 15:09 
Aller en bas de la page 
Nouvel astucien

Bonjour à tous,

j'ai besoin pour un projet d'écrire un code batch avec une imbrication de boucle for. j'ai du mal à trouver une solution concernant la première boucle. Voila ce que je souhaite faire :

Rechercher dans un workspace tous les dossiers appelés (sources ou source ou Source ou Sources) (dossier ou sous dossier) puis pour chaque dossier sources trouvés, copier tous les *.c et les copier dans un autre dossier. Pour la seconde partie c'est déja mis en place et ça fonctionne, mais je bloque sur la première partie, le "trouver tous les dossiers sources"

voici le code jusqu'a présent :

for /r "%WORKSPACE%" %%a in (Sources, sources, Source, source) do (

	for /r "%%a" %%m in (*.c) do (

	        xcopy "%%m" "%WORKSPACE%\KW_TMP\"  /D /Y >> "%WORKSPACE%\KW_LOG.txt"
        )
)

Merci d'avance pour votre aide.

Bonne journée,

Publicité
nomisam
 Posté le 27/07/2017 à 19:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir Pierre Goudat,

Ci-dessous un exemple de ce que je ferais, j'utilise une fonction.

if /I => permet d'ignorer la casse des caractères


for /f %%a in ('dir "%WORKSPACE%" /a:d /b') do call :FCT %%a
goto FIN
:: FONCTION
:FCT
if /I "%1"=="source" goto :CMDE
if /I "%1"=="sources" goto :CMDE
goto :EOF
:CMDE
set REP=%WORKSPACE%\%1
for /f %%m in ('dir "%REP%\*.c" /b') do xcopy "%REP%\%%m" "%WORKSPACE%\KW_TMP\" /D /Y >> "%WORKSPACE%\KW_LOG.txt"
goto :EOF
:FIN


J'espère que çà te sera utile.

Cordialement

nomisam

Pierre Goudat
 Posté le 28/07/2017 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Bonjour,

merci de votre aide, j'ai finalement utilisé une autre méthode :

@echo off
set WORKSPACE=C:\chemin\de\ton\WORKSPACE
cd /D "%WORKSPACE%"
for /r "%WORKSPACE%" %%a in (sources, source) do (
if exist "%%a" call :CopyC %%a
)
pause
exit
:CopyC
for /r "%*" %%m in (*.c) do (
xcopy "%%m" "%WORKSPACE%\KW_TMP\" /D /Y >> "%WORKSPACE%\KW_LOG.txt"
)
GOTO:EOF
Cependant je recherche désormais un moyen de rechercher pas plus loin que 2 ou 3 sous dossiers. avez vous une idée ?
Bonne journée.
Pierre Goudat
 Posté le 31/07/2017 à 11:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvel astucien

Bonjour,

Pour expliquer totalement mon problème:

J'ai un workspace pouvant contenir soit un seul projet (un dossier source, des dossiers librairies et instruments) soit plusieurs projets (même chose avec un dossier à la racine du workspace par projet). Je souhaite récupérer tous les *.c et *.h des fichiers sources pour ensuite les placer dans le dossier KW_TMP. Cependant dans l'arborescence du workspace on retrouve également des dossiers librairies et instruments contenant également des *.c et *.h et contenant également parfois des dossiers sources.

Voila tout mon problème. J'ai dans un premier temps récupéré tous les *.c et *.h sans exception, cependant je récupérais tous les fichiers d'instruments et de librairies. j'ai ensuite ciblé seulement les *.c et *.h contenus dans les dossiers appelés "sources" cependant il y a également des fichiers de ce genre dans le dossiers de librairies et instruments. Désormais j'essaie de limiter à quelques sous niveau du workspace, car les sources sont généralement un niveau au dessus des dossiers instruments..

Cependant peut être que vous avez une idée pour me simplifier la vie ? récupérer tous les fichiers *.c et *.h des dossiers sources, cependant si le dossier sources est présent dans un dossier appelé "librairies" ou "instrument" on l'ignore ?

exemple de workspace

WORKSPACE
     => projet1
          => Sources
               => dossiers source1
                   =>fichiers *.c/*.h que je veux récupérer
               => dossier source2
                   =>fichiers *.c/*.h que je veux récupérer
          => librairies
               =>lib1
                    =>sources
                         => fichiers *.c/*.h que je veux ignorer
          => Instruments
               =>instru1
                    =>sources
                         => fichiers *.c/*.h que je veux ignorer



Merci d'avance et bonne journée.



Modifié par Pierre Goudat le 31/07/2017 11:05
Labougie
 Posté le 16/02/2018 à 21:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Groupe Sécurité

Il y a longtemps que je n'ai pas fait de batch.

Te voici une idée afin de pouvoir faire une sélection de recherche. Je n'ai proposé que le cadre pour projet1 avec 2 sous choix. Tu peux continuer ainsi avec en + Instruments etc...

Cela se présente ainsi

Pour tes transferts de fichiers regarde de ce cote => setlocal enabledelayedexpansion <=

Le batch est ici.

Lectures 1 & 2.

Labougie

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
147,99 €Disque dur externe Western Digital My Book 8 To USB 3.0 à 147,99 €
Valable jusqu'au 26 Novembre

Amazon propose actuellement le disque dur externe Western Digital My Book 8 To USB 3.0 à 147,99 € livré gratuitement. On le trouve ailleurs à partir de 190 €. Grâce à la connectique USB 3.0 (compatible USB 2.0), ce disque dur vous offrira d'excellents débits pour vos transferts et vos sauvegardes. Pour info, le disque dur n'est pas soudé et vous pouvez le récupérer pour le mettre dans un PC.


> Voir l'offre
199,99 €Ecran PC LED 28 pouces Samsung U28E590 (4K UHD, 1 ms, Freesync) à 199,99 €
Valable jusqu'au 24 Novembre

Boulanger fait une belle promotion sur l'écran PC LED 28 pouces Samsung U28E570DS qui passe à 199,99 € alors qu'on le trouve ailleurs à partir de 249 €. Cet écran au format 16/9 offre une dalle 4K (résolution 3840x2160) avec un temps de réponse de 1 ms. Il est compatible FreeSync. Une bonne affaire !


> Voir l'offre
168,78 €Disque dur externe Western Digital Elements Desktop USB 3.0 10 To à 168,78 € livré
Valable jusqu'au 25 Novembre

Amazon Allemagne propose actuellement le disque dur externe Western Digital Elements Desktop USB 3.0 10 To à 162,35 € (avec la TVA ajustée) grâce à un code promo automatiquement appliqué au moment du paiement. Comptez 6,43 € pour la livraison en France soit un total de 168,78 € livré. On le trouve ailleurs à partir de 200 €. Ce disque dur dispose d'un grande capacité de stockage (10 To) et d'une connectique USB 3.0 qui vous offrira des transferts rapides. Il est compatible USB 2.0. Une très bonne affaire. Notez que le disque dur n'est pas soudé et que vous pouvez le récupérer pour l'utiliser dans un ordinateur ou un NAS (il s'agit d'un disque dur CMR UltraStar DC HC 510).

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre

Sujets relatifs
[Batch] Dossier a rechercher, puis coller dedans.
recherche en batch
[BATCH] for dans un seul sous répertoire
BATCH fermer les fichiers pdf contenus dans un repertoire
Script PHP, listant dossier et fichiers et se connectant a une BDD
Commande batch pour ouvrir plusieurs fichiers windows 8
Git Bash & fichier batch
Editer à la chaîne les raccourcis dans un dossier
Fichier batch : lancer 1 video sur VLC portable
Batch pour importer plusieurs CSV dans Mysql
Plus de sujets relatifs à [BATCH] for imbriqué recherche dossier
 > Tous les forums > Forum Autres langages