12

Итак, я изучаю онлайн-курс, который состоит из сотен лекций. Мне нужно скачать исходный код для каждой лекции в соответствующей подпапке. С более чем 120 лекциями создание подпапки одна за другой является кропотливым процессом.

Вот моя текущая структура папок:

Есть ли способ, которым я могу создать все эти подпапки сразу, вместе с правильным именем, через командный файл или что-то подобное.

5 ответов5

28

Как я могу создать все эти подпапки одновременно, используя мою схему именования?

Если бы я создавал подпапки в определенном каталоге, таком как C:\Dropbox\Development, мне сначала нужно было бы перейти в этот каталог? Предполагая, что я использую оболочку cmd?

Чтобы создать подпапки (подкаталоги) в определенном каталоге (который не является текущим каталогом), вы можете выполнить одно из следующих действий:

  • cd C:\Dropbox\Development сначала или
  • Измените команду md Lec-%%i на md C:\Dropbox\Development\Lec-%%i .

Замечания:

  • mkdir является синонимом md и может использоваться вместо него.

Ниже я показываю обе альтернативы: сначала из командной оболочки cmd (командная строка), а затем с помощью командного файла.

В качестве бонуса (хотя в первоначальном вопросе его не просили) также есть альтернатива bash shell.


Из оболочки cmd :

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

или же

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

Или же

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

Заметки:

  • 9 - начальный номер. Поменяй при необходимости.
  • 1 это шаг. Не меняй это.
  • 120 конечный номер. При необходимости измените номер последнего каталога, который вам требуется.
  • Чтобы создать файлы в другом каталоге, вы можете

    • cd C:\Dropbox\Development\Lec-%%i первый или
    • измените команду md на md C:\Dropbox\Development\Lec-%%i .

Есть ли способ сделать подобное для Mac OSX из терминала Mac?

Из оболочки bash :

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

Или (для более портативной версии)

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

Дальнейшее чтение

22

Есть еще один простой способ, для ограниченного количества папок. Может быть полезно здесь или для кого-то еще.

В Windows мы можем создать нумерованные имена папок, создав папку «lec (1)» и скопировав ее столько раз, сколько мы хотим, если мы вставим 10 раз, будет 11 папок с именами «lect (1)» в «lec (10) - Копировать

Единственная хитрость в том, что первая папка должна содержать скобки (n), где n - номер, с которого начинается нумерация.

Windows включает в себя «- copy» и имя вставленной папки «lec (1) - Copy» :(

Если вам это не нравится, просто выберите все и переименуйте сначала lec(1) -> lec-(1) или что-нибудь еще.

Все имена папок будут изменены, а "- копия" будет удалена;)

  • Ctrl+C - Копировать
  • Ctrl+V - Вставить
  • F2 - переименовать
  • Enter - завершить переименование.
  • ESC- отменить переименование.
  • Ctrl+A или Ctrl+UP, чтобы выбрать папки.

2

Это не будет лучше, чем сценарий для вашего конкретного сценария, но приятно знать это, когда имена ваших папок не связаны: вы можете создать несколько каталогов из командной строки, разделив их пробелом:

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
1

Вы можете обнаружить, что если вы создадите пронумерованные папки с такими именами, они не будут отображаться в правильном (ожидаемом) порядке сортировки:

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
...

Проблема в том, что числовая часть foldernames имеет переменную ширину, что влияет на порядок сортировки папок.

Если для вас важно, чтобы папки сортировались правильно, используйте пакетный файл ниже, чтобы создать папки с пронумерованной частью foldernames, дополненной нулями (0), чтобы все числа имели одинаковую длину, например так:

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
...

Вот командный файл:

@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
0

Вы можете запустить этот пакетный файл в той же папке, что и файлы. Каждый файл будет перемещен в папку с тем же именем.

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

Я использую это с предупреждением ниже, чтобы избежать случайного использования.

@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"
)
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .