各サブフォルダーがバッチファイルまたはコマンドラインで指定された最大量のファイルを受け取る限り、単一の親フォルダーから必要な数のサブフォルダーにすべてのファイルを移動するためのバッチファイルスクリプトが必要です。言い換えれば、スクリプトは親フォルダからその下の複数のサブフォルダ(スクリプトが自動的に作成しなければならない)にすべてのファイルを配布しなければなりません。 バツ ファイル(ここで " バツ msgstr "" "各サブフォルダが受け取るファイルの量です)。
追加の要件
サブフォルダー名は、以下に従って作成する必要があります。 命名法:001、002、003など。
すべての種類のファイル名(スペースを含む、 特殊文字または英語以外のアクセント記号など)
何万ものファイルの移動をサポートする必要があります。
ローカル管理者の下でWindows 10 Professionalで動作する必要があります 権利
たとえば、 "D:\ Downloads"フォルダに2400個のファイルがあり、それぞれ最大1000個のファイルを含むサブフォルダにそれらを配布するとします。スクリプトを実行すると、次のような構造が作成されます。
D:\Downloads
|__001
|__002
|__003
どこで:
D:\Downloads --> Will have no files inside it anymore
|__001 --> Will have 1000 files inside it
|__002 --> Will have 1000 files inside it
|__003 --> Will have the last 400 files inside it
ファイルの順序(どのファイルがどのサブフォルダーに移動するか)は重要ではありません。つまり、移動では特定の基準(ファイル名、サイズ、ファイルタイプなど)を考慮する必要はありません。ただし、この点に関する改善は歓迎されます(たとえば、最後に作成したファイルを最初のサブフォルダに移動するオプションなど)。
何か案は?
更新
これは私のために働いた解決策です:
@echo off
setlocal enableextensions
setlocal enabledelayedexpansion
if not %3.==. goto syntax
if %2.==. goto syntax
:: Checks if %2 is a number:
SET "var="&for /f "delims=0123456789" %%i in ("%2") do set var=%%i
if defined var (goto syntax)
if /i %1.==. goto syntax
if /i not exist %1 echo. & echo The folder %1 does not exist... && echo Folder paths must be typed between "quotes" if there's any empty space. && echo. && goto end
setlocal enableextensions
setlocal enabledelayedexpansion
:: Maximum amount of files per subfolder:
SET limit=%2
:: Initial counter (everytime counter is 1, a new subfolder is created):
SET n=1
:: Subfolder counter:
SET nf=0
::Retrieves the amount of files in the specified folder:
set count=0
for %%A in (%1%\*.*) do set /a count+=1
echo.
echo Distributing %count% files in subfolders of up to %2 files...
FOR %%f IN (%1%\*.*) DO (
:: If counter is 1, create a new subfolder with name starting with "00...":
IF !n!==1 (
SET /A nf+=1
MD %1%\00!nf!
)
:: Move files into subfolders with names starting with "00...":
MOVE /-Y "%%f" %1%\00!nf! > NUL
:: Reset counter when a subfolder reaches the maximum file limit:
IF !n!==!limit! (
SET n=1
) ELSE (
SET /A n+=1
)
)
SET limit=
SET n=
SET nf=
SET count=
echo Move finished successfully.
goto end
:syntax
echo.
echo YOU TYPED: movedown %*
echo SYNTAX: movedown ["full path"] (between quotes if there's any space) [n] (maximum number of files per subfolder)
echo.
:end
ENDLOCAL
いいえ、無料の仕事をするのは魔法のサイトではありません。間違った場所ここであなたが何かをしたがある問題に固執したときあなたはある特定の質問をするかもしれません。今のところ、あなたの質問はフリーランサーの仕事の割り当てのように見えます。 質問
—
Alex
私は何度も試してみましたが、成功しませんでした。私の質問では、大きすぎないようにするためのすべての試みについては説明しませんでした。
—
Rodrigo Faustini
あなたの試みを見せなさい、躊躇しないでください、さもなければあなたに解決策を与えるだろう人々は軽蔑されるでしょう、そしてそれは公平ではありません。アイデアとして:2つの変数を作ります。1つは移動するディレクトリの名前を保持するものです(例えば
—
Alex
dir=001
)ファイルをカウントする別のファイル move
commandが1000のときは1にリセットし、ディレクトリ名を保持している別の変数(dir)をインクリメントして、すべてのファイルが移動するまで実行します。
アレックス、ありがとう!あなたの先端は解決のための基盤でした。
—
Rodrigo Faustini
できたね !私はあなたの質問から保留を解除することにしました。将来的にいくつかの質問がある場合は、それらを質問として作成し、何らかの問題があっても試したことを示すと、手助けをする人にとって問題を理解しやすくなります。あなたは答えとしてあなた自身の解決策を投稿し、解決されたものとしてそれを受け入れることができます、それは皆を助ける知識データベースに貢献することは完全に合法的な方法です。
—
Alex