web-dev-qa-db-fra.com

Comment créer automatiquement une liste de dossiers nommés dans Windows?

Donc, j'étudie un cours en ligne qui comporte des centaines de conférences. Je dois télécharger le code source de chaque conférence dans un sous-dossier correspondant. Avec plus de 120 conférences, créer un sous-dossier un par un est un processus fastidieux.

Voici ma structure de dossier actuelle:

enter image description here

Est-il possible de créer tous ces sous-dossiers à la fois, avec le nom propre, via un fichier de commandes ou quelque chose de similaire.

12
Manish Giri

Comment puis-je créer tous ces sous-dossiers en même temps, en utilisant mon schéma de nommage?

Si je devais créer les sous-dossiers dans un répertoire spécifique, tel que C:\Dropbox\Development, aurais-je besoin de me connecter à ce répertoire en premier? En supposant que j'utilise le shell cmd?

Pour créer les sous-dossiers (sous-répertoires) dans un répertoire spécifique (qui n'est pas le répertoire actuel), vous pouvez effectuer l'une des opérations suivantes:

  • cd C:\Dropbox\Development premier ou
  • Modifiez la commande md Lec-%%i en md C:\Dropbox\Development\Lec-%%i.

Remarque:

  • mkdir est un synonyme de md et peut être utilisé à sa place.

Ci-dessous, je montre les deux alternatives, d’abord à partir d’un shell cmd (ligne de commande), et ensuite à l’aide d’un fichier de commandes.

En prime (bien que ce ne soit pas demandé dans la question initiale), il existe également une alternative bash Shell.


Depuis un shell cmd:

cd C:\Dropbox\Development
for /l %i in (9,1,120) do md Lec-%i

ou

for /l %i in (9,1,120) do md C:\Dropbox\Development\Lec-%i

A partir d'un fichier batch:

@echo off
cd C:\Dropbox\Development
for /l %%i in (9,1,120) do md Lec-%%i

Ou

@echo off
for /l %%i in (9,1,120) do md C:\Dropbox\Development\Lec-%%i

Remarques:

  • 9 est le numéro de départ. Changer si nécessaire.
  • 1 est l'étape. Ne changez pas cela.
  • 120 le numéro de fin. Modifiez si nécessaire le numéro du dernier répertoire souhaité.
  • Pour créer des fichiers dans un autre répertoire, vous pouvez soit

    • cd C:\Dropbox\Development\Lec-%%i premier ou
    • remplacez la commande md par md C:\Dropbox\Development\Lec-%%i.

Y at-il un moyen de faire la même chose pour Mac OSX à partir du terminal Mac?

Depuis un shell bash:

for i in {9..120}; do mkdir Lec-$i; done; 

Ou (pour une version plus portable)

for i in `seq 9 120`; do mkdir Lec-$i; done;

Lectures complémentaires

  • Index A-Z de la ligne de commande Windows CMD - Une excellente référence pour tout ce qui concerne la ligne de commande cmd de Windows.
  • pour - Exécuter conditionnellement une commande plusieurs fois.
  • md - Créer un répertoire - Crée un nouveau dossier.
28
DavidPostill

Il existe un autre moyen simple, pour un nombre limité de dossiers. Peut être utile ici ou pour quelqu'un d'autre.

Sous Windows, nous pouvons créer des noms de dossier numérotés en créant un dossier "lec (1)" et en le collant combien de fois nous voulons. Si nous collons 10 fois, il y aura 11 dossiers avec les noms "lect (1)" dans "lec ( 10) - Copier "

Seule astuce: le premier dossier doit inclure des parenthèses (n), où n est le numéro à partir duquel la numérotation commence.

Windows inclut "- copy" au nom du dossier collé "lec (1) - Copy" :(

Si vous ne l'aimez pas, il suffit de tout sélectionner et de renommer d'abord lec (1) -> lec- (1) ou autre.

Tous les noms de dossier seront ajustés et "- copy" sera supprimé;)

  • Ctrl + C - Copier
  • Ctrl + V - Coller
  • F2 - renommer
  • Entrez - pour finir de renommer.
  • ESC- pour annuler le changement de nom.
  • Ctrl + A ou Ctrl + HAUT pour sélectionner des dossiers.

enter image description here

22
shahid

Ce ne sera pas mieux qu'un script pour votre scénario particulier, mais il est plutôt agréable de le savoir lorsque vos noms de dossier ne sont pas liés: vous pouvez créer plusieurs répertoires à partir de la ligne de commande en les séparant par un espace:

C:\temp\animals>dir
 Volume in drive C is Windows
 Volume Serial Number is 82CB-BB0F

 Directory of C:\temp\animals

11/16/2015  03:55 PM    <DIR>          .
11/16/2015  03:55 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  1,636,846,243,840 bytes free

C:\temp\animals>mkdir cats dogs penguins

C:\temp\animals>dir
 Volume in drive C is Windows
 Volume Serial Number is 82CB-BB0F

 Directory of C:\temp\animals

11/16/2015  03:55 PM    <DIR>          .
11/16/2015  03:55 PM    <DIR>          ..
11/16/2015  03:55 PM    <DIR>          cats
11/16/2015  03:55 PM    <DIR>          dogs
11/16/2015  03:55 PM    <DIR>          penguins
               0 File(s)              0 bytes
               5 Dir(s)  1,636,846,178,304 bytes free
2
TTT

Vous constaterez peut-être que si vous créez des dossiers numérotés nommés ainsi, ils ne s'afficheront pas dans le bon ordre de tri (attendu):

C:\Dropbox\Development> dir /b
Lec-10
Lec-100
Lec-101
Lec-102
Lec-103
Lec-104
Lec-105
Lec-106
Lec-107
Lec-108
Lec-109
Lec-11
Lec-110
Lec-111
Lec-112
Lec-113
Lec-114
Lec-115
Lec-116
Lec-117
Lec-118
Lec-119
Lec-12
Lec-120
Lec-13
Lec-14
Lec-15
Lec-16
Lec-17
Lec-18
Lec-19
Lec-20
Lec-21
...
Lec-89
Lec-9
Lec-90
Lec-91
...

Le problème est que la partie numérique des noms de dossier est une largeur variable, ce qui affecte la façon dont les dossiers sont triés.

S'il est important pour vous que les dossiers soient correctement triés, utilisez le fichier de commandes ci-dessous pour créer des dossiers avec la partie numérotée des noms de dossier complétée par des "0" (zéros) afin que tous les nombres aient la même longueur, comme ceci:

C:\Dropbox\Development> dir /b
Lec-009
Lec-010
Lec-011
Lec-012
Lec-013
Lec-014
Lec-015
Lec-016
Lec-017
Lec-018
Lec-019
Lec-020
Lec-021
...

Voici le fichier batch:

@echo off

for /L %%f in (9,1,120) do call :work 000%%f
goto :EOF


:work

set "dx=%~1"
set "dx=%dx:~-3%"

md "C:\Dropbox\Development\Lec-%dx%" >nul 2>&1

set "dx="
goto :EOF
1
Kevin Fegan

Vous pouvez exécuter ce fichier de commandes dans le même dossier que les fichiers. Chaque fichier sera déplacé dans un dossier du même nom.

for /f "delims=" %%a in ('dir /b') do (
if not "%%~fa"=="%~f0" (
md "%%~na" 2>nul
if exist "%%a" move "%%~na.*" "%%~na"
)
)

Je l'utilise avec un avertissement ci-dessous pour éviter toute utilisation accidentelle.

@echo off
echo.
set sure=
set /p sure=you want to put each file in this folder into their own folders? 
if /i "%sure%"=="" exit
if /i "%sure:~0,1%"=="n" exit
if /i not "%sure:~0,1%"=="y" (exit) else (echo.&echo are you sure? Close window to cancel or..)
echo.&pause 
for /f "delims=" %%a in ('dir /b') do (
if not "%%~fa"=="%~f0" (
md "%%~na" 2>nul
if exist "%%a" move "%%~na.*" "%%~na"
)
)
0
Terence