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:
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.
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 oumd 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.
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
@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 oumd
par md C:\Dropbox\Development\Lec-%%i
.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;
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é;)
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
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
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"
)
)