Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 5
Aller à la page: 1, 2, 3, 4, 5  >
Detecter si un sous dossier existe
Auteur Message
Répondre en citant
Message Detecter si un sous dossier existe 
Bonsoir,

J'ai un petit soucis suite a la décompression d'archives.

Je me retrouve avec des centaines de dossiers qui parfois contiennent un sous dossier, parfois plusieurs sous dossiers et enfin parfois pas de sous dossier.

Ce que j'aimerais faire c'est un Batch pour scanner tout dossiers et si ils contiennent un seul sous dossier transférer tout les fichiers de ce sous dossier dans le dossier parent.

Exemple :
Code:

MasterFolder

Cas 01
    Folder
       Sub FolderA
             File01.xxx
             File02.xxx
             File03.xxx

Cas 02
     Folder
         File01.xxx
         File01.xxx
         Sub FolderA
             File01.xxx
             File02.xxx
             File03.xxx
         Sub FolderB
             File01.xxx
             File02.xxx
             File03.xxx

Cas 03
     Folder
         File01.xxx
         File02.xxx
         File03.xxx


Résultat espéré
Code:

MasterFolder

Cas 01
    Folder
        File01.xxx
        File02.xxx
        File03.xxx

Cas 02
     Folder
         File01.xxx
         File01.xxx
         Sub FolderA
             File01.xxx
             File02.xxx
             File03.xxx
         Sub FolderB
             File01.xxx
             File02.xxx
             File03.xxx

Cas 03
     Folder
         File01.xxx
         File02.xxx
         File03.xxx


Seul le Cas 01 à été modifier, tout les fichiers qui étaient dans " Sub FolderA" sont désormais dans "Folder". Les autres dossier n'ont pas changé.
Petite précision qui a son importance je ne connais pas le nom de sous dossiers.

Et la j'ai besoin de vous car en MS Dos je sais pas faire ça. Embarassed




______________________________________________________
A bientôt
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Detecter si un sous dossier existe 
Bonjour,

J'ai respecté ton cahier des charges, dis-moi ce que tu en penses :

Code:
@echo off
mode con: cols=120 lines=40
color 0f
Setlocal enableextensions enabledelayedexpansion

if exist %userprofile%\log0123456.txt (del %userprofile%\log0123456.txt)

:debut
cls

rem on définit le répertoire racine
echo. & set /p root="Emplacement et nom du dossier racine : "
if A%root%==A goto debut
if not exist %root% goto debut

rem on se positionne dans le répertoire racine
if %root:~0,2% EQU %CD:~0,2% (cd %root% || goto :eof) else (cd /d %root% || goto :eof)

rem on liste les dossiers du répertoire racine
for /f "tokens=*" %%B in ('dir /b /ad "*.*"') do (
set folder=%%B
cd %%B
call :action
cd %root%
)

rem on supprime les sous-dossiers concernés
for /f "tokens=* delims=" %%A in (%userprofile%\log0123456.txt) do (rd /S /Q "%%A")

Endlocal
exit

rem on comptabilise les sous-dossiers de chaque dossier
:action
set /a nb=0
for /f "tokens=*" %%C in ('dir /b /ad "*.*"') do (set subfolder=%%C & set /a nbdossier+=1)
if !nbdossier! EQU 1 (call :deplacement)
goto :eof

rem on copie les fichiers du sous-dossier vers le dossier parent
rem puis on nettoie le sous-dossier (suppression des fichiers)
:deplacement
cd %subfolder%
set /a files=0
for /f "tokens=*" %%D in ('dir /b /a-d "*.*"') do (set /a nbfiles+=1)
if !nbfiles! GEQ 1 (
copy "*.*" "%root%\%folder%"
echo %cd% >> %userprofile%\log0123456.txt
del /F /S /Q "*.*"
call :effacer
)
goto :eof

rem on nettoie récursivement le sous-dossier (suppression des dossiers)
:effacer
for /f "tokens=*" %%E in ('dir /b /ad "*.*"') do (rd /S /Q "%%E" || (cd %%E & call :effacer))
goto :eof
rem




Répondre en citant
Message Detecter si un sous dossier existe 
Merci beaucoup !

Je viens de tester le batch mais j'ai dû rater quelque chose parce que ça ne fonctionne pas Embarassed
Je ne sais pas si cela vient de moi ou s'il y a un bug.

Voila ce qui se passe :

Citation:
Emplacement et nom du dossier racine : G:\toto\
\My était inattendu.

G:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)>


Structure du test
Code:

g:\toto\My Folder 001 (1962)
g:\toto\My Folder 001 (1962)\File 001.txt
g:\toto\My Folder 001 (1962)\File 002.txt
g:\toto\My Folder 001 (1962)\File 003.txt

g:\toto\My Folder 002 (1962)
g:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)
g:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)\File 001.txt
g:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)\File 002.txt
g:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)\File 003.txt

g:\toto\My Folder 003 (1962)
g:\toto\My Folder 003 (1962)\My SubFolder 001 (1962)
g:\toto\My Folder 003 (1962)\My SubFolder 001 (1962)\File 001.txt
g:\toto\My Folder 003 (1962)\My SubFolder 001 (1962)\File 002.txt
g:\toto\My Folder 003 (1962)\My SubFolder 001 (1962)\File 003.txt
g:\toto\My Folder 003 (1962)\My SubFolder 002 (1962)
g:\toto\My Folder 003 (1962)\My SubFolder 002 (1962)\File 001.txt
g:\toto\My Folder 003 (1962)\My SubFolder 002 (1962)\File 002.txt
g:\toto\My Folder 003 (1962)\My SubFolder 002 (1962)\File 003.txt

g:\toto\My Folder 004 (1962)
g:\toto\My Folder 004 (1962)\My SubFolder 001 (1962)
g:\toto\My Folder 004 (1962)\My SubFolder 001 (1962)\File 001.txt
g:\toto\My Folder 004 (1962)\My SubFolder 001 (1962)\File 002.txt

g:\toto\My Folder 005 (1962)
g:\toto\My Folder 005 (1962)\My SubFolder 001 (1962)
g:\toto\My Folder 005 (1962)\My SubFolder 001 (1962)\File 001.txt
g:\toto\My Folder 005 (1962)\My SubFolder 001 (1962)\File 002.txt

g:\toto\My Folder 006 (1962)
g:\toto\My Folder 006 (1962)\My SubFolder 001 (1962)
g:\toto\My Folder 006 (1962)\My SubFolder 001 (1962)\File 001.txt
g:\toto\My Folder 006 (1962)\My SubFolder 001 (1962)\File 002.txt
g:\toto\My Folder 006 (1962)\My SubFolder 001 (1962)\File 003.txt


J'ai tester sans espaces dans les noms de dossiers et fichiers et cela ne change rien.




______________________________________________________
A bientôt
Répondre en citant
Message Detecter si un sous dossier existe 
Désolé, effectivement il y a un minuscule bug au début, on va faire plus simple :

Code:
    @echo off
    mode con: cols=120 lines=40
    color 0f
    Setlocal enableextensions enabledelayedexpansion
     
    if exist %userprofile%\log0123456.txt (del %userprofile%\log0123456.txt)
     
    :debut
    cls
     
    rem on définit le répertoire racine
    set root=G:\toto
     
    rem on se positionne dans le répertoire racine
    if %root:~0,2% EQU %CD:~0,2% (cd %root% || goto :eof) else (cd /d %root% || goto :eof)
     
    rem on liste les dossiers du répertoire racine
    for /f "tokens=*" %%B in ('dir /b /ad "*.*"') do (
    set folder=%%B
    cd %%B
    call :action
    cd %root%
    )
     
    rem on supprime les sous-dossiers concernés
    for /f "tokens=* delims=" %%A in (%userprofile%\log0123456.txt) do (rd /S /Q "%%A")
     
    Endlocal
    exit
     
    rem on comptabilise les sous-dossiers de chaque dossier
    :action
    set /a nb=0
    for /f "tokens=*" %%C in ('dir /b /ad "*.*"') do (set subfolder=%%C & set /a nbdossier+=1)
    if !nbdossier! EQU 1 (call :deplacement)
    goto :eof
     
    rem on copie les fichiers du sous-dossier vers le dossier parent
    rem puis on nettoie le sous-dossier (suppression des fichiers)
    :deplacement
    cd %subfolder%
    set /a files=0
    for /f "tokens=*" %%D in ('dir /b /a-d "*.*"') do (set /a nbfiles+=1)
    if !nbfiles! GEQ 1 (
    copy "*.*" "%root%\%folder%"
    echo %cd% >> %userprofile%\log0123456.txt
    del /F /S /Q "*.*"
    call :effacer
    )
    goto :eof
     
    rem on nettoie récursivement le sous-dossier (suppression des dossiers)
    :effacer
    for /f "tokens=*" %%E in ('dir /b /ad "*.*"') do (rd /S /Q "%%E" || (cd %%E & call :effacer))
    goto :eof
    rem
     




Répondre en citant
Message Detecter si un sous dossier existe 
Pas mieux Laughing


Code:
\My était inattendu.

G:\toto\My Folder 002 (1962)\My SubFolder 001 (1962)>


Par ailleurs ne serait il pas possible de passer le path en argument : SuperBatch_barnabe0057.bat "G:\toto\"




______________________________________________________
A bientôt
Répondre en citant
Message Detecter si un sous dossier existe 
Oui c'est possible de le passer en argument, je m'en occupe Wink



Répondre en citant
Message Detecter si un sous dossier existe 
Voilà j'ai fait pas mal de tests, ça me semble bon, par contre il ne faut pas de guillemets ou d'espace dans le nom du dossier racine, pour les dossiers et sous-dossiers les noms avec espaces sont bien gérés.

Code:
@echo off
mode con: cols=120 lines=40
color 0f
Setlocal enableextensions enabledelayedexpansion
 
if exist %userprofile%\log0123456.txt (del %userprofile%\log0123456.txt)
 
rem on définit le répertoire racine
set root=%1
if not "%root:~1,1%"==":" goto :eof

rem on se positionne dans le répertoire racine
if %root:~0,2% EQU %CD:~0,2% (cd %root% || goto :eof) else (cd /d %root% || goto :eof)

rem on liste les dossiers du répertoire racine
for /f "tokens=*" %%B in ('dir /b /ad "*.*"') do (
set folder=%%B
cd %%B
call :action
cd %root%
)
 
rem on supprime les sous-dossiers concernés
for /f "tokens=* delims=" %%A in (%userprofile%\log0123456.txt) do (rd /S /Q "%%A")
 
Endlocal
exit
 
rem on comptabilise les sous-dossiers de chaque dossier
:action
set /a nb=0
for /f "tokens=*" %%C in ('dir /b /ad "*.*"') do (set subfolder=%%C & set /a nbdossier+=1)
if !nbdossier! EQU 1 (call :deplacement)
goto :eof
 
rem on copie les fichiers du sous-dossier vers le dossier parent
rem puis on nettoie le sous-dossier (suppression des fichiers)
:deplacement
cd %subfolder%
set /a files=0
for /f "tokens=*" %%D in ('dir /b /a-d "*.*"') do (set /a nbfiles+=1)
if !nbfiles! GEQ 1 (
copy "*.*" "%root%\%folder%"
echo %cd% >> %userprofile%\log0123456.txt
del /F /S /Q "*.*"
call :effacer
)
goto :eof
 
rem on nettoie récursivement le sous-dossier (suppression des dossiers)
:effacer
for /f "tokens=*" %%E in ('dir /b /ad "*.*"') do (rd /S /Q "%%E" || (cd %%E & call :effacer))
goto :eof
rem




Répondre en citant
Message Detecter si un sous dossier existe 
Doit y avoir un truc que je pige pas ou c'est mon Windows 7 x64 qui déconne ce qui ne serait pas étonnant Laughing

Code:

SuperBatch_barnabe0057.bat G:\toto\


Code:

\My_Subfolder_001_(1962) était inattendu.

g:\toto\My_Folder_002_(1962)\My_Subfolder_001_(1962)>


Est ce que tu peu me donner la structure que tu utilise pour les test ? Ya pas de raison que cela fonctionne chez toi et pas chez moi.

Encore merci de prendre du temps pour m'aider !! Laughing




______________________________________________________
A bientôt
Répondre en citant
Message Detecter si un sous dossier existe 
Voilà mon échantillon de test, il s'agit de mes sauvegardes quotidiennes de Thunderbird :

Code:
D:\Thunderbird\20170424\fichier10.png

D:\Thunderbird\20170425\Profiles\Nouveau Dossier
D:\Thunderbird\20170425\Profiles\fichier1.png
D:\Thunderbird\20170425\Profiles\fichier2.png
D:\Thunderbird\20170425\Profiles\fichier3.png
D:\Thunderbird\20170425\Profiles\fichier4.png

D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\calendar-data
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\crashes
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\...


J'obtiens bien :

Code:
D:\Thunderbird\20170424\fichier10.png

D:\Thunderbird\20170425\fichier1.png
D:\Thunderbird\20170425\fichier2.png
D:\Thunderbird\20170425\fichier3.png
D:\Thunderbird\20170425\fichier4.png

D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\calendar-data
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\crashes
D:\Thunderbird\20170426\Profiles\2s5eg5bn.default\...


Essaie de lancer comme ça :
Code:
SuperBatch_barnabe0057.bat G:\toto




Dernière édition par barnabe0057 le Mer 26 Avr 2017 - 13:24; édité 1 fois
Répondre en citant
Message Detecter si un sous dossier existe 
Comme ça :

p.s : il faut exécuter ce script avec le dossier en argument donc soit en faisant directement un glisser/déposer du dossier directement sur le fichier bat contenant ce script ou bien alors depuis un programme tiers comme cmd en faisant :
Code:
FichierContentLeScript.bat "MasterFolder"



CODE COMPLET :
Code:
::#~###### Head
 ::#~### CONFIG
    @echo off
    Setlocal enableextensions enabledelayedexpansion
    title Salut.mp4 xDD ^| By Flammrock
   color 0f
   chcp 28591>nul
 ::#~### End_CONFIG
 
  ::#~### VARIABLE
    set "$MasterFolder=%~1"
 ::#~### End_VARIABLE
 
  ::#~### CHECK
    if "%$MasterFolder%"=="" (
      echo;Veuillez indiquer un dossier en argument ^^!
     set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
    )
    if not exist "%$MasterFolder%" (
      echo;Ce dossier n'existe pas ^^!^^!
     set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
    )
   for %%a in ("%$MasterFolder%") do set "$MasterFolder=%%~nxa"
   cd "%~1"
   cd "..\"
 ::#~### End_CHECK
::#~###### Head
 
 
::#~###### Body
  call :CleanMasterFolder "%$MasterFolder%"
  cls
  echo;"%$MasterFolder%" a été nettoyé avec succes !
  set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
::#~###### End_Body
 
 
::#~###### Function
  :CleanMasterFolder <MASTERFOLDER>
    for /f "tokens=*" %%a in ('dir /b /a:d "%~dp0%~1\"') do (
      for /f "tokens=*" %%b in ('dir /s/b /a:d "%~dp0%$MasterFolder%\%%a\"') do (
        call :nbSubFolderOfParentFolder "%%b"2>nul
       if "!a!"=="1" call :moveContentToParentFolder "%%b" "%%a" "%~1"2>nul
     )
    )
  goto :eof
  :nbSubFolderOfParentFolder <FOLDER>
    set a=0
    for /f "tokens=*" %%a in ('dir /b /a:d "%~1\"') do set /a a+=1
  goto :eof
  :moveContentToParentFolder <FOLDER>
    set b=0
    for /f "tokens=*" %%a in ('dir /b /a:-d "%~1\"') do set /a b+=1
    if "!b!"=="0" (
      for /f "tokens=*" %%a in ('dir /b /a:d "%~1\"') do (
       move "%~1\%%a" "%~dp0%~3\%~2\">nul
       rmdir /s /q "%~1\">nul
       for %%b in ("%~1") do ren "%~dp0%~3\%~2\%%a"  "%%~nxb"
      )
    )
  goto :eof
::#~###### End_Function


Le résultat est correct en utilisant cette configuration :
Code:
MasterFolder
 
Cas 01
    Folder
       Sub FolderA
             File01.xxx
             File02.xxx
             File03.xxx
 
Cas 02
     Folder
         File01.xxx
         File01.xxx
         Sub FolderA
             File01.xxx
             File02.xxx
             File03.xxx
         Sub FolderB
             File01.xxx
             File02.xxx
             File03.xxx
 
Cas 03
     Folder
         File01.xxx
         File02.xxx
         File03.xxx
 


Si tu trouve une configuration qui ne semble pas fonctionner fait le moi savoir Mr. Green


EDIT : J'ai rajouté 2 lignes pour qu'il fonctionne lorsque le script ne se trouve pas dans le même dossier que le dossier à "nettoyé"




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Detecter si un sous dossier existe 
barnabe0057
Alors j'ai tester avec ta structure et cela fonctionne très bien. Laughing
Par contre des qu'il y a une parenthése ou des espaces ce ne fonctionne plus.
Ensuite le script stop après le 1er dossier traiter, si dans la liste des dossier il y a d'autres dossiers comme le "cas 01" il ne sera pas traiter.


Flammrock
Tout d'abord merci.
Cela fonctionne parfaitement sauf que je crois qu'il y a un problème de profondeur de dossier et c'est de ma faute. "Cas 01" n'est pas un dossier mais juste le nom de l'exemple lol Embarassed
Il y a donc un niveau en trop.
J'ai beau regarder le code je ne vois ou placer un petit echo pour avoir une version Verbose histoire de savoir si tout se passe bien (j'ai des centaines de dossier a traiter lol). Gné ??

Alors si je peu oser ... Serait il possible d'ajouter un suffix "__" a tout les dossiers contenant plus d'un sous-dossier.
Je sais que ces dossier faudra les traiter a la main, l'ajout du suffix"__" me permettrait de les positionner en haut de liste pour les repérer facilement.

Vraiment le PHP/Javascript c'est quand même plus clair lol
Le MS DOS pour moi cela ressemble a du BrainFuck Razz




______________________________________________________
A bientôt
Répondre en citant
Message Detecter si un sous dossier existe 
Bon ben j'ai fait de mon mieux mais il y a des choses qui m'échappent, par exemple pour supprimer un malheureux dossier non vide c'est une galère pas possible, j'ai passé 3 heures à trouver la solution (merci les fonctions) alors qu'en console un simple RD /S fonctionne bien.

Il y a encore du boulot avant de passer "grand maître batcheur" Neutral



Répondre en citant
Message Detecter si un sous dossier existe 
Encore merci beaucoup barnabe0057.

Sur Amiga le dos me semblait super simple.

Le MS Dos est vraiment obscure ou alors c'est mon vieux cerveau Razz




______________________________________________________
A bientôt
Répondre en citant
Message Detecter si un sous dossier existe 
FredNexus a écrit:
Flammrock
Tout d'abord merci.
Cela fonctionne parfaitement sauf que je crois qu'il y a un problème de profondeur de dossier et c'est de ma faute. "Cas 01" n'est pas un dossier mais juste le nom de l'exemple lol Embarassed


A ok xDD



FredNexus a écrit:
J'ai beau regarder le code je ne vois ou placer un petit echo pour avoir une version Verbose histoire de savoir si tout se passe bien (j'ai des centaines de dossier a traiter lol). Gné ??


J'ajoute quelques echo en + histoire de suivre le processus de nettoyage en runtime xDD



FredNexus a écrit:
Alors si je peu oser ... Serait il possible d'ajouter un suffix "__" a tout les dossiers contenant plus d'un sous-dossier.


Demande moi ce que tu veux je sais pratiquement tout faire Mr. Green
Bon j'ai juste un peu du mal quelques fois avec l'optimisation du script car il me manque quelques astuces mais sinon c'est assez optimisé quand même Mr. Green



FredNexus a écrit:
Je sais que ces dossier faudra les traiter a la main, l'ajout du suffix"__" me permettrait de les positionner en haut de liste pour les repérer facilement.


Traiter à la main ?
C'est-à-dire ?
Je peux tout automatiser de A à Z, donc dis moi ce que tu fais à la main Okay
Bon bien sûr, si cela repose sur un traitement manuel nécessitant une conscience et un apprentissage des données afin d'effectuer cette automatisation,
il faudrai ce reposer sur une intelligence artificiel dont tu serai l'instructeur pour lui inculquer ta logique, pour faire ça j'ai pas les connaissances pour l'instant.
Le seul moyen serai de faire du deep learning je pense car cela ne nécessite seulement qu'une partie de la logique.




FredNexus a écrit:
Vraiment le PHP/Javascript c'est quand même plus clair lol
Le MS DOS pour moi cela ressemble a du BrainFuck Razz

Je pense que c'est relatif et que dans certain référentiel : le batch paraitrait moins clair et dans d'autres cas c'est le JavaScript qui paraitrait moins clair.
Cela dépend tout simplement de ce que l'on fait, comment on le fait et avec quoi on le fait.


Exemple : https://pastebin.com/ThAhdATz

_______________________



Code:
::#~###### Head
 ::#~### CONFIG
    @echo off
    Setlocal enableextensions enabledelayedexpansion
    title Salut.mp4 xDD ^| By Flammrock
   color 0f
   chcp 28591>nul
 ::#~### End_CONFIG
 
  ::#~### VARIABLE
    set "$MasterFolder=%~1"
 ::#~### End_VARIABLE
 
  ::#~### CHECK
    if "%$MasterFolder%"=="" (
      echo;Veuillez indiquer un dossier en argument ^^!
     set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
    )
    if not exist "%$MasterFolder%" (
      echo;Ce dossier n'existe pas ^^!^^!
     set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
    )
   for %%a in ("%$MasterFolder%") do set "$MasterFolder=%%~nxa"
   cd "%~1"
   cd "..\"
 ::#~### End_CHECK
::#~###### Head
 
 
::#~###### Body
  call :CleanMasterFolder "%$MasterFolder%"
  echo;"%$MasterFolder%" a été nettoyé avec succes !
  set /p .=Appuyez sur une touche de votre clavier pour quitter..<nul&pause>nul&exit
::#~###### End_Body
 
 
::#~###### Function
  :CleanMasterFolder <MASTERFOLDER>
    for /f "tokens=*" %%a in ('dir /s/b /a:d "%~dp0%~1\"') do (
      call :nbSubFolderOfParentFolder "%%a"2>nul
     echo;[FOLDER] : "%%a" {
     echo;      [ANALYSE]
     echo;           - Analyse en cours..
      if "!a!"=="1" (
       echo;           - Ce dossier contient uniquement un sous-dossier ^^!
      echo;      [ACTION]
      echo;           - Déplacement du contenu du sous-dossier au dossier parent [PART 1/2]
       call :moveContentToParentFolder "%%a" "%~1"2>nul
     ) else (
       echo;           - Ce dossier contient !a! sous-dossiers ^^!
       if !a! GTR 1 (
        echo;      [ACTION]
        echo;           - Ajout du suffix "__" au nom du dossier
        for %%b in ("%%a") do ren "%%a" "__%%~nxb"
      ) else (
        echo;      [ACTION]
        echo;           - Aucune
      )
     )
     echo;      [FIN]
     echo;           - Nettoyage effectué avec succès ^^!
     echo;&echo;&echo;
    )
  goto :eof
  :nbSubFolderOfParentFolder <FOLDER>
    set a=0
    for /f "tokens=*" %%a in ('dir /b /a:d "%~1\"') do set /a a+=1
  goto :eof
  :moveContentToParentFolder <FOLDER>
    set b=0
    for /f "tokens=*" %%a in ('dir /b /a:-d "%~1\"') do set /a b+=1
    if "!b!"=="0" (
     echo;           - Déplacement du contenu du sous-dossier au dossier parent [PART 2/2]
      for /f "tokens=*" %%a in ('dir /b /a:d "%~1\"') do (
       move "%~1\%%a" "%~dp0%~3\%~2\">nul
       rmdir /s /q "%~1\">nul
       for %%b in ("%~1") do ren "%~dp0%~2\%%a"  "%%~nxb"
      )
    ) else (
     echo;           - Error : le dossier parent contient !b! fichiers
   )
  goto :eof
::#~###### End_Function



J'ai testé ça sous cette configuration et tout fonctionne à merveille :
Code:
MasterFolder

     Folder01
          Sub FolderA
               File01.xxx
               File02.xxx
               File03.xxx

     Folder02
          Sub FolderA
               File01.xxx
               File02.xxx
          Sub FolderB
               File01.xxx
               File02.xxx


Résultat :

Code:
MasterFolder

     __Folder02
          Sub FolderA
               File01.xxx
               File02.xxx
          Sub FolderB
               File01.xxx
               File02.xxx

     Folder01
          File01.xxx
          File02.xxx
          File03.xxx


Si tu le souhaites, je peux te convertir ce script Batch en JavaScript car tu as l'air d'apprécier ce langage donc pourquoi pas l'utilisé Mr. Green




S'il y a un problème quelconque, fait moi s'en part Okay




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Detecter si un sous dossier existe 
Flammrock

Merci merci merci, cela fonctionne parfaitement.

Je viens de le tester sur 1000 dossiers et cela a fonctionner sans problème. Tu cartonnes !

Je me suis par contre retrouvé face a un cas que j'avais pas prévu.
C'est le cas ou le dossier contient un sous dossier et aussi des fichiers.

J'ai remarqué que le soucis semble être toujours le même.
Les fichiers du sous dossier sont les même que ceux dans le dossier plus un ou deux fichiers supplémentairement.
Peut être qu'une comparaison sur le poids afin de voir si c'est vraiment les même et si c'est le cas effacer ceux du dossier et monter d'un étage ceux du sous dossier.
Ou faire un move sur les fichiers supplémentaires present dans le sous dossier et l'effacer ensuite.

Et dans le cas ou les fichiers sont différent leur ajouter un prefix "_" histoire de les repérer.

Pour les autres cas j'aimerais bien pouvoir les traiter en auto mais ils sont en général le résultat d'un problème au moment de la création de l'archive.
Malheureusement le problème n'est pas toujours la même.
Je n'ai pas d'autre solution que de les traiter a la main. Razz

Je sais pas si je suis clair la. Je sais plus dans quel dossier je suis ... Shocked




______________________________________________________
A bientôt
Message Detecter si un sous dossier existe 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 5
Aller à la page: 1, 2, 3, 4, 5  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch