だから、私は何百ものサブ講義があるオンラインコースを勉強しています。対応するサブフォルダーの各講義のソースコードをダウンロードする必要があります。120以上の講義があるため、サブフォルダーを1つずつ作成するのは骨の折れるプロセスです。
現在のフォルダー構造は次のとおりです。
これらすべてのサブフォルダーを、適切な名前とともに、バッチファイルなどで一度に作成する方法はありますか。
だから、私は何百ものサブ講義があるオンラインコースを勉強しています。対応するサブフォルダーの各講義のソースコードをダウンロードする必要があります。120以上の講義があるため、サブフォルダーを1つずつ作成するのは骨の折れるプロセスです。
現在のフォルダー構造は次のとおりです。
これらすべてのサブフォルダーを、適切な名前とともに、バッチファイルなどで一度に作成する方法はありますか。
回答:
C:\ Dropbox \ Developmentなどの特定のディレクトリにサブフォルダを作成する場合、最初にそのディレクトリにcdする必要がありますか?私はcmdシェルを使用していると仮定しますか?
特定のディレクトリ(現在のディレクトリではない)にサブフォルダ(サブディレクトリ)を作成するには、次のいずれかを実行できます。
cd C:\Dropbox\Development
最初または md Lec-%%i
コマンドをに変更しmd C:\Dropbox\Development\Lec-%%i
ます。注意:
mkdir
は同義語でmd
あり、代わりに使用できます。以下に両方の選択肢を示します。1つ目はcmd
シェル(コマンドライン)から、2つ目はバッチファイルを使用する方法です。
ボーナスとして(元の質問では求められていませんが)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
ます。bash
シェルから:
for i in {9..120}; do mkdir Lec-$i; done;
または(よりポータブルなバージョンの場合)
for i in `seq 9 120`; do mkdir Lec-$i; done;
C:\Dropbox\Development
に移動する必要がありcd
ますか?cmd
シェルを使用していると仮定しますか?そして、どうもありがとう!
cd
最初にフォルダに移動する必要があります。
md Lec-%%i
にmd C:\Dropbox\Development\Lec-%%i
md
使用しないで、なぜmkdir
Windows上で?そうすれば、* nixと一貫性があり、覚えておくべき違いが1つ少なくなります。
限られた数のフォルダーに対して、別の簡単な方法があります。ここで、または他の誰かのために役に立つかもしれません。
Windowsでは、「lec(1)」というフォルダーを作成して、必要な回数だけ貼り付けて番号付きのフォルダー名を作成できます。10回貼り付けると、「lect(1)」という名前の11個のフォルダーが「lec( 10)-コピー」
ここでの唯一のトリックは、最初のフォルダーに括弧(n)を含める必要があることです。ここで、nは番号付けが始まる番号です。
Windowsには、貼り付けられたフォルダ名「lec(1)-コピー」に「-コピー」が含まれます:(
気に入らない場合は、すべてを選択して、最初にlec(1)-> lec-(1)などの名前を変更してください。
すべてのフォルダの名前が調整され、「-コピー」が削除されます;)
これは特定のシナリオのスクリプトよりも優れているわけではありませんが、フォルダー名が無関係の場合はこれを知っておくと便利です。コマンドラインからスペースで区切って複数のディレクトリを作成できます。
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
このような名前の番号付きフォルダーを作成すると、適切な(予想される)並べ替え順序で表示されないことがあります。
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
Lec-10
後に来ますLec-9
。
2
に前に配置10
されます(OPのスクリーンショットを見ると9も10の前にソートされます)。dir
その問題に苦しむだけで、0
パディングが必要ですが、OPはコマンドラインについてあまり知らなかったので、問題になるとは思わない
dir
。Windowsあなたとafrazierが述べたように、Windows Explorerはフォルダーを正しくソート/リストしますが、OPはbatch
(おそらく)から動作するソリューションを探していましたcommand prompt
。
このバッチファイルは、ファイルと同じフォルダーで実行できます。各ファイルは同じ名前のフォルダーに移動されます。
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"
)
)
最初にすべての問題を読みませんでした...しかし、私はそれを理解できる限り...リストに基づいてフォルダの名前を変更したい...まあ2つの方法があります
方法1- フォルダーリストがない場合...回避策があります...このフォルダーツリーでmacOSに移動する必要があります...フォルダーツリー全体をコピーするだけです... macOSはコンテンツをコピーしますリストのすべてのフォルダのリストも同様に... TextEditまたはメモ帳に似たソフトウェアに貼り付けます。
-今、私はあなたがそのフォルダリストを持っていると仮定しています...あなたは仕事をするために1つのサードパーティのソフトウェアが必要です(今ではすべてのステップはWindows用です) https: //www.rename-expert.com-用語でこのソフトウェアを使用するには、必要なだけ新しいフォルダ、新しいフォルダ-2、新しいフォルダ-4を作成する必要がありました。
-Rename Expertには、リストの基底からフォルダの名前を変更するオプションがあります。
-ブームは完了です。
方法2- ファイルを含まないフォルダーツリー全体のミラーコピーを作成する場合。
-Beyond Compareは必要なソフトウェアです。 https://www.scootersoftware.com/support.php?zz=kb_copyfolderstructure