バッチスクリプト

バッチスクリプト

Windows で特定のサイズに達するまでファイルをフォルダーに移動するにはどうすればよいですか?

答え1

バッチスクリプト

まさにそれを実行するスクリプトがこれです。このスクリプトには 4 つのパラメータがあり、最後のパラメータはオプションです。ソース フォルダ、宛先フォルダ、ターゲット サイズ (バイト単位)、一致させるファイル拡張子です。サイズ以外のすべてのパラメータには引用符が必要です。

@echo off
setlocal
setlocal enabledelayedexpansion

if "%~3" == "" exit /b 3
if "%~2" == "" exit /b 2
pushd "%~1" 2>nul || exit /b 4
pushd "%~2" 2>nul && popd || exit /b 5

set target=%~3
set /a target=%target:~0,-3% 2>nul || exit /b 6
set /a min=%target% / 1000

for /r "%~2" %%G in (*) do (
set size=%%~zG
set /a size=!size:~0,-3! 2>nul
if !errorlevel! equ 0 (
if !size! gtr !target! exit /b 7
set /a target -= !size!
))

if %target% leq %min% goto :end
set exts=* & if not "%~4" == "" set exts=%~4

for /f "delims=" %%G in ('dir %exts% /a:-d-h-s /b /o:-s 2^>nul') do (
if !target! leq %min% goto :end
set size=%%~zG
set /a size=!size:~0,-3! 2>nul
if !errorlevel! equ 0 if !size! leq !target! (
echo n 2>nul|move /-y "%%~fG" "%~2" >nul 2>&1 && set /a target -= !size!
))
:end
popd
endlocal & exit /b 0

使い方

最初の行は、パラメータの数が正しいことを確認します。各パラメータは、存在しないフォルダや不正なサイズ値を拒否するために検証されます。整数オーバーフローを回避するために、ターゲット サイズの最後の 3 桁は切り捨てられます。許容範囲を確保するために、しきい値はターゲットの 1/1000 に設定されています。

既存のファイルを考慮するために、宛先フォルダーの内容がスキャンされ、その合計サイズが計算されます。結果の値はターゲット サイズから差し引かれます。

この時点で実際の作業が始まります。ソースフォルダの内容が列挙され、ファイルサイズによって最大から最小の順に並べ替えられます。ファイルは、サイズが現在のターゲット以下である場合にのみ移動され、その後更新されます。貪欲な検索ファイルがなくなるか、最小しきい値に達するまで、いずれか早い方まで続行します。

備考

  • コマンドインタープリタは32ビット符号付き整数算術演算を実行するため、最大の正の値は です2^31 - 1 = 2147483647

  • ターゲット サイズは 1 KB から 2 TB までの任意の値 (バイト単位) にすることができます。

  • 隠し属性またはシステム属性が設定されているファイルは無視されます。

  • ソース フォルダーに、宛先フォルダーにすでに存在する 1 つ以上のファイルが含まれている場合、潜在的なデータ損失を回避するために移動操作はスキップされます。

  • パフォーマンス上の理由から、スクリプトは、宛先フォルダーのサイズを見つけるために、各ステップでファイルを列挙するのではなく、キャッシュされた値を使用しました。同じ名前を共有しているためにスキップされたファイルも合計に加算され、結果のサイズが歪む可能性があります。

  • サブフォルダーは処理されません。必要な場合は、コマンド/sにパラメーターを追加してくださいdir。ソース構造がフラット化されるため、宛先に移動されない同一の名前のファイルが残る可能性があります。

参考文献

答え2

Powershell を使用。

する (フォルダから別のフォルダへのファイルの移動) その間 (フォルダのサイズが適切ではない

使用do whileループの使い方についてのデモ必要に応じて、上記のスクリプトを使用して echo スクリプトを変更します。

関連情報