web-dev-qa-db-ja.com

Windowsで名前付きフォルダーのリストを自動的に作成するにはどうすればよいですか?

だから、私は数百のサブレクチャーがあるオンラインコースを勉強しています。各講義のソースコードを対応するサブフォルダーにダウンロードする必要があります。 120以上の講義があるため、サブフォルダを1つずつ作成するのは骨の折れるプロセスです。

これが私の現在のフォルダ構造です:

enter image description here

これらすべてのサブフォルダーを、適切な名前と共に、バッチファイルまたは類似のものを使用して一度に作成できる方法はありますか?.

13
Manish Giri

自分の名前付けスキームを使用して、これらすべてのサブフォルダーを一度に作成するにはどうすればよいですか?

C:\ Dropbox\Developmentなどの特定のディレクトリにサブフォルダを作成する場合、最初にそのディレクトリにcdする必要がありますか?私がcmdシェルを使用していると思いますか?

特定のディレクトリ(現在のディレクトリではない)にサブフォルダ(サブディレクトリ)を作成するには、次のいずれかを実行します。

  • cd C:\Dropbox\Development最初または
  • md Lec-%%iコマンドをmd C:\Dropbox\Development\Lec-%%iに変更します。

注意:

  • mkdirmdの同義語であり、代わりに使用できます。

以下に、最初にcmdシェル(コマンドライン)から、次にバッチファイルを使用して、両方の選択肢を示します。

ボーナスとして(元の質問では要求されませんでしたが)bashシェルの代替案もあります。


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端末からMac OSXに対して同様のことを行う方法はありますか?

bashシェルから:

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

または(よりポータブルなバージョンの場合)

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

参考文献

29
DavidPostill

フォルダの数が限られている場合は、別の簡単な方法があります。ここまたは他の誰かのために役立つかもしれません。

Windowsでは、「lec(1)」というフォルダを作成し、必要な回数だけコピーして貼り付けることで、番号付きのフォルダ名を作成できます。10回貼り付けると、「lect(1)」から「lec( 10)-コピー」

ここでの唯一のトリックは、最初のフォルダーに括弧(n)を含める必要があることです。ここで、nは番号付けを開始する番号です。

Windowsには、「-コピー」が含まれ、貼り付けられたフォルダ名「lec(1)-コピー」:(

気に入らない場合は、すべてを選択して、最初にlec(1)-> lec 1)などの名前を変更してください。

すべてのフォルダの名前が調整され、「-コピー」が削除されます;)

---(enter image description here

22
shahid

これは特定のシナリオのスクリプトよりも優れているわけではありませんが、フォルダー名が無関係である場合に知っておくと便利です。スペースで区切ることにより、コマンドラインから複数のディレクトリを作成できます。

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

このような名前の付いた番号付きフォルダを作成した場合、それらは適切な(予期される)ソート順で表示されないことがあります。

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

問題は、フォルダー名の数字部分が可変幅であるため、フォルダーの並べ替え方法に影響することです。

フォルダーが適切に並べ替えられていることが重要な場合は、以下のバッチファイルを使用して、次のように、すべての番号が同じ長さになるように、フォルダー名の番号部分に「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
1
Kevin Fegan

このバッチファイルは、ファイルと同じフォルダーで実行できます。各ファイルは同じ名前のフォルダーに移動されます。

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"
)
)
0
Terence