2

これは特定のケースかもしれませんが、適切なコードがあれば、多くの人がそれを利用できると確信しています。

1つのフォルダーに何千ものファイルがあり、複数のフォルダーに分割する必要があります。各フォルダには、前のフォルダより1つ多いファイルが必要であり、そのように名前を付ける必要があります。各フォルダには、少なくともX一定量のファイルが必要です。たとえば、各フォルダに少なくとも1つのファイルが必要な場合、最終結果は次のようになります。

U:\Batch\Original\ -->
    file1.xml
    file2.xml
    file3.xml
    file4.xml
    file5.xml
    file6.xml

U:\Batch\Processed\ -->
    folder1.1 -->
        file1.xml
    folder2.2 -->
        file2.xml
        file3.xml
    folder3.3 -->
        file4.xml
        file5.xml
        file6.xml

私は自分でこれを試み始めましたが、私はかなり離れていると感じています。各フォルダに少なくとも1000個のファイルが必要だとします。.batプログラムでこれを行うにはどうすればよいでしょうか。

4

2 に答える 2

1

どうぞ。これで処理できるはずです。

@echo off
setlocal enabledelayedexpansion
set /a "minimum=1000, outer=minimum, inner=1"
set folder_prefix=folder
call :mkfolder

:: dir list, order by name, exclude directories, exclude this batch script
for /f "delims=" %%I in ('dir /b /o:n /a:-d ^| findstr /v "%~nx0"') do (
    if !inner! GTR !outer! (
        set /a "inner=1, outer+=1"
        call :mkfolder
    )
    copy "%%I" "!folder!" >NUL
    set /a "inner+=1"
)

:: rename final directory to reflect the number of files contained within
for /f "delims=" %%I in ("%folder%") do set "to=%%~dpnI"
set /a "inner-=1"
ren "%folder%" "%to%.%inner%"


goto :EOF

:mkfolder
set folder=%folder_prefix%!outer!.!outer!
if not exist "!folder!" mkdir "!folder!"
goto :EOF
于 2013-03-18T15:57:04.827 に答える
1

あなたは正しい方向に進んでいます。実例を示すために、最初に、使用するいくつかのファイルを作成する必要があります。

md c:\y
cd /d c:\y
for %i in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30) do echo.>%i.txt

これで、から次のバッチファイルを実行して、c:\yサブフォルダーを作成し、指定したとおりにファイルをコピーできます(ただし、この例では3が最小ファイルです)。

@echo off

setlocal EnableDelayedExpansion

set cnt=1
set fldr=1
set min=3

for %%i in (*.txt) do (
  if !cnt! GTR !min! (
    set /a cnt-=1
    ren folder!fldr! folder!fldr!.!cnt!
    set cnt=1
    set /a fldr+=1
    set /a min+=1
  )

  md folder!fldr! > nul 2>&1

  copy "%%i" folder!fldr!

  set /a cnt+=1
)

set /a cnt-=1
ren folder!fldr! folder!fldr!.!cnt!
于 2013-03-18T15:59:24.913 に答える