1

だから、これは私を少し苛立たせてきました。ファイルサイズに基づいて独自のフォルダーに移動するバッチファイルを作成しようとしています。私は手動でこれを始めましたが、30 分後に、数時間の作業を削減するために .bat ファイルを作成する方法を学ぼうとしました。ただし、Google.com でヘルプが見つかりませんでした。通常、私はコードを見て動作するように少し編集しますが、バッチは依然として非常に混乱しており、探しているものに似たものは見つかりませんでした。

これまでのところ、859 個の 32kb ファイルをフォルダー タイトル「32」に移動しました。431 個の 64kb ファイルすべて、91 個の 96kb ファイルすべて、30 個の 128kb ファイル、14 個の 160kb ファイル、17 個の 192kb ファイル、9 個の 224kb ファイルで同じことを行いました。ファイル、次に258kb-1376kbはすべて、912mbまで再び指数関数的に成長する前に、それぞれ約4〜5個あり、640kbで停止しました.

したがって、パターンがあります。これらのファイルをファイルサイズにちなんで名付けられたフォルダーに移動するには、.bat コードが必要です。別のコーディング言語で、私がやりたいことを実行するループは次のようになると想像します。

dim strFS as String
strFS = "file".filesize
move "file" to /"strFS"
4

1 に答える 1

0

このようなファイルの移動は、次のコメント付きバッチで実行できます。

@echo off
setlocal EnableDelayedExpansion
for %%F in (*) do (

    rem Divide file size by 32768
    set /A "BlockSize=%%~zF/32768"
    rem Calculate remainder of above division.
    set /A "Remainder=!BlockSize!*32678-%%~zF"
    rem Multiply result with 32 and round up to 32, 64, 96, 128, ...
    if "!Remainder!"=="0" ( set "Add=0" ) else ( set "Add=32" )
    set /A "FolderName=BlockSize*32+Add"

    rem Move the file to appropriate directory which fails if the
    rem directory does not already exist. In this case create the
    rem directory and execute move command once again.
    move "%%~nxF" !FolderName!\ 2>nul
    if errorlevel 1 (
        md !FolderName!
        if not errorlevel 1 (
            move "%%~nxF" !FolderName!
        ) else (
            echo Could not create directory !FolderName! for file %%~nxF
        )
    )
)
endlocal

バッチファイルは現在の作業ディレクトリに置くことはできません。もちろん、それ自体が移動するのは良い考えではありません。

ifmdmoveset、およびsetlocalのコマンドヘルプは、コマンド プロンプトを開き、これらのコマンドにパラメータを追加して入力するか、またはコマンド help の後にパラメータとして入力することで読むことができます。/?for /?help for

于 2014-12-13T22:04:56.697 に答える