
取得する方法全体の大きさディスクまたはパーティション (1 つの NTFS パーティションを持つ USB ハード ドライブ) をバッチ ファイルで実行するにはどうすればよいですか?
1 TB のドライブなので、サイズを決定するのに時間がかかる可能性があるため、ファイルを再帰的に調べるロジック (for /f を使用するもの) は使用しないことをお勧めします。
バッチ ファイルにサイズを返す小さなサードパーティ ツールを使用することもできます。
PS: 私はWindows 7 x64 Ultimateを使用しています
答え1
おそらくもっと簡単な方法があると思いますが、私が使っているのは次の方法です
必要なのがバイトだけなら、このコマンドを実行して、Tを外部のドライブ文字に変更するだけです(コマンドプロンプトで1行%%
で と%
をset space=
変更しますecho
)。
for /f "tokens=3 delims= " %%a in ('dir /-c T: ^| find "bytes free"') do set space=%%a
それを簡素化したい場合は、まず各サイズのガイドラインを設定します
set divide=1073741824&&set size=gigabytes
if %space% lss 1073741824 set divide=1048576&&set size=megabytes
if %space% lss 1048576 set divide=1024&&set size=kilobytes
if %space% lss 1024 set divide=1&&set size=bytes
バッチでは計算を処理できないので、一時的なVBSスクリプトを作成します。
echo wsh.echo cdbl(%space%)/%divide% > %temp%\tmp.vbs
実行し、結果をキャプチャして削除します
for /f %%a in ('cscript //nologo %temp%\tmp.vbs') do set space=%%a
del %temp%.\tmp.vbs
次に、結果を小数点2桁に切り捨てます。
for /f "tokens=1,2 delims=." %%a in ("%space%") do (
set s1=%%a
set s2=%%b
)
if not "%s2%"=="" (set space=%s1%.%s2:~0,2%) else (set space=%s1%)
エコー結果
echo Drive has %space% %size% free.
[編集]
のために合計"%%a"=="T"
サイズを変更するには、diskpart list volume(に変更"%%a"=="driveletterhere"
)を使用できます。
for /f "tokens=3,6,7 delims= " %%a in ('echo list volume ^| diskpart') do if "%%a"=="T" set size=%%b && set size2=%%c
そして、それをどのように計算するかというボーナス:
if [%size2%]==[TB] (
set isBigEnough=1
) else if [%size2%]==[GB] (
if %size% GTR 31 set isBigEnough=1
)
if not defined isBigEnough set isBigEnough=0
答え2
おそらく、df.exe
以下から入手可能なものを試してみてください出典: unxutilsおよびその他の場所。これは UNIX コマンドライン ツールのコピーです。
Windows 管理インターフェイス (WMI) から直接値を取得することもできますが、その分野での私のスキルは直接回答できるほど十分ではありません。
fsutil volume diskfree c:
3 行の出力が得られ、これを使用してfind
必要な結果を得ることができます。
出力例:
Total # of free bytes : 466333454336
Total # of bytes : 972999880704
Total # of avail free bytes : 466333454336
fsutil volume diskfree c: | find "Total # of bytes"
特定の行を表示します。
for /F "tokens=2 delims=:" %i in ('fsutil volume diskfree c: ^| find "Total # of bytes"') do @set USED=%i
先頭にスペースが付いた数字が表示されます。
比較すると:
@REM 32MB = 32*1024*1024 bytes
@set COMP=33554432
@REM Pull out the line containing the number of bytes USED
for /F "tokens=2 delims=:" %i in ('fsutil volume diskfree c: ^| find "Total # of bytes"') do @set USED=%i
@REM Drop the leading space character to just get the number so a numeric comparison is done
for /F "tokens=1 delims= " %i in ('echo %USED%') do @set USED=%i
@REM Tell me something useful
if %USED% lss %COMP% @echo "Used is less than 32MB"
if %USED% gtr %COMP% @echo "Used is greater than 32MB"
注意: fsutil には管理者権限が必要なので、ロックダウンされたコンピューターでは機能しない可能性があります。