Comment puis-je aplatir un dossier dans Windows 7, en supposant que tous les noms de fichiers sont différents?


19

Par exemple, disons que j'ai la hiérarchie de dossiers suivante:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Je veux exécuter une commande qui se traduit par:

Folder1
   File1
   File2
   File3
   File4

ou quelque chose de similaire. Je ne connais pas très bien Windows, j'apprécierais donc autant de détails que possible dans la réponse.


Cherchez-vous un programme existant pour le faire pour vous, ou un morceau de code (quel langage de programmation) qui fait cela?
Matt Ball

@MattBall: Je cherche le moyen le plus simple de le faire. Idéalement, cela ouvrirait un terminal et entrerait une commande. Encore une fois, je ne suis pas très expérimenté avec Windows, alors faites-moi savoir s'il existe un meilleur moyen. Merci.

Réponses:


32

Le moyen le plus simple absolu consiste à entrer dans le dossier racine commun et à rechercher tous les fichiers (c'est-à-dire rechercher *). Lorsque tous les fichiers sont trouvés, marquez tous les fichiers, appuyez sur Ctrl + X et accédez à nouveau au dossier racine commun. Appuyez maintenant sur Ctrl + V pour coller tous les fichiers dans le dossier racine. Une fois terminé, supprimez tous les sous-répertoires.

Je ne sais pas si cela peut être fait en tant que travail par lots.


1
J'aime la simplicité de cela, mais je l'ai essayé avec des fichiers 40k et il a planté le processus d'exploration.
UpTheCreek

La réponse totale du commandant me semble plus facile.
Ev0oD

13

J'ai finalement utilisé cette approche PowerShell lorsque j'ai eu besoin d'aplatir une grande structure hiérarchique (dans mon cas, PNGS):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\

Pour l'aplatissement, Move-Item est peut-être mieux adapté?
geisterfurz007 Arrêtez ce chaos

4

Windows exe: http://en.sourceforge.jp/projects/sfnet_flatfolder/

ou AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

ou utilisez Directory Opus

ou Powershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

ou Lot (comme mentionné ci-dessus)

ou la recherche manuelle, couper et coller comme mentionné ci-dessus

Il existe de nombreuses façons, en fonction de vos compétences et de vos envies, vous pouvez choisir l'une d'entre elles et affiner en fonction de vos besoins.

Vous pourriez avoir besoin de ceci Supprimer les répertoires vides après l'opération ci-dessus


1
la commande powershell est courte et fonctionne bien
Maxim Yefremov

3

Si vous avez seulement besoin d'aplatir manuellement de temps en temps, Total Commander est parfait.

Dans Total Commander: accédez au répertoire que vous souhaitez aplatir. Dans le menu, cliquez sur Commandes> Vue de branche . Et vous voyez tout cela aplati, vous pouvez le déplacer / copier dans un autre dossier.

Si vous avez besoin de bricoler un peu avec les noms de fichiers: Sélectionnez tous les fichiers en vue aplatie, dans le menu, allez dans Fichiers> Outil multi-renommage . Ici, vous pouvez ajouter des informations sur le chemin d'accès aux noms de fichiers réels à l'aide de "Renommer le masque", il vous suffit d'utiliser la balise / le bouton du plugin, la fonction de recherche et de remplacement et le petit bouton foolder, qui vous permet de faire quelques dernières modifications des noms de fichiers dans éditeur de texte. Cela peut sembler compliqué, mais vraiment le moyen le plus simple IMO :)


Qu'est-ce que Windows Commander? Vous voulez dire Total Commander?
UpTheCreek

Exactement :) Je l'utilise depuis 10 ans, le nom était Windows Commander à l'époque. Modifié
teejay

Merci. Je viens de l'essayer. Ne fonctionnerait pas pour les petits fichiers de
40 000

L'utilisation du processeur et la lenteur implicite sont regrettables mais compréhensibles :) L'erreur est autre chose .. pourrait être un mauvais nom, un bug de commandant total ou simplement l'incapacité de TC à gérer autant de fichiers. J'essayerais de renommer un plus petit nombre de fichiers en premier ou d'utiliser une version plus récente de TC
teejay

@teejay, j'ai dû chercher les détails de votre suggestion, mais j'ai finalement réussi à le faire. J'ai utilisé le plugin expander2 pour extraire des parties du chemin et en faire le préfixe du nom de fichier. Vous voudrez peut-être ajouter quelques détails pour le prochain gars. Tx.
killogre

3

Assez simple avec une option de ligne de commande pour ceux qui ne sont pas super techniquement enclins.

  1. Créez un fichier quelque part appelé "flatten.cmd"
  2. Ouvrez ce fichier dans le Bloc-notes
  3. Dans le fichier, placez les éléments suivants:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Remplacez "{SourcePath}" par le dossier que vous souhaitez aplatir. Dans votre cas "c: \ Folder1"

  5. Remplacez "{Destination"} par le dossier dans lequel vous souhaitez déplacer les fichiers. Dans votre cas, également "c: \ Folder1". Le code devrait maintenant ressembler à:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Ouvrez une fenêtre de ligne de commande. Peut le faire de plusieurs façons, mais c'est rapide:

    • Cliquez sur le bouton Démarrer
    • Cliquez sur Tous les programmes
    • Cliquez sur Accessoires
    • Cliquez sur Invite de commandes
  7. Dans la fenêtre de ligne de commande, tapez:

    cd {folder where you put the flatten.cmd file}
    flatten
    

Et cela le fera (Windows 8+) Je viens de le faire pour aplatir un dossier de 10 000 fichiers musicaux. Fonctionne comme un charme.

Vous pouvez trouver les options de l'utilitaire de ligne de commande FOR sur https://technet.microsoft.com/en-us/library/bb490909.aspx .


1

en utilisant un script batch (du haut de ma tête):

Recherchez la commande FOR

La première ligne déplace tous les fichiers des sous-répertoires vers la racine La seconde supprime les sous-dossiers

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 

donc je dois ouvrir un terminal et entrer ces commandes, en m'assurant que je remplace «dossier» par le chemin approprié? Merci.

Si vous ne voulez pas l'écrire dans un script, oui. OTOH .....
Preet Sangha

Peut-il être généralisé et attaché à une action du menu contextuel? J'adorerais pouvoir cliquer avec le bouton droit sur un fichier, cliquer sur "Aplatir le fichier", puis déplacer tous les fichiers qu'il contient au niveau du dossier. La suppression du dossier après serait également une bonne chose.
MAW74656

oui, il peut le mettre dans un fichier de commandes avec% 1 comme nom de dossier. stackoverflow.com/questions/6162415/…
Preet Sangha

-Peut-être que vous pouvez aider avec ce superuser.com/q/552768/59747
MAW74656

1

Salut, vous pouvez également utiliser l'outil xxcopy (www.xxcopy.com), son xcopy sur les périodes (tri). Avec cet outil, vous pouvez "aplatir" les fichiers des dossiers en un seul dossier.

c:> xxcopy / source-folder / flatten / SG

Lisez simplement ce lien: http://www.xxcopy.com/xxcopy16.htm

À votre santé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.