113

サードパーティのアプリケーションをインストールせずに、CMD 内のディスクまたはフォルダの空きディスク容量を取得する方法はありますか?

大きなファイルを特定のディレクトリにコピーするCMDがあり、もちろんcopyコマンドからのエラーレベルの戻り値を使用できますが、ファイルをコピーするのにかかる時間を待つ必要があります(たとえば...そこにディスクがいっぱいになり、コピー操作が失敗します)。

コピーを開始する前に、何かアイデアがあるかどうかを知りたいです。Sysinternals の DU.EXE ユーティリティを試しましたが、占有スペースしか表示されません。

4

9 に答える 9

138

" " を実行するdir c:\と、最後の行でディスクの空き容量が表示されます。

編集: より良い解決策: " fsutil volume diskfree c:"

于 2008-11-16T11:09:19.440 に答える
57

考えられる解決策:

dir|find "bytes free"

Windows XP 以降向けのより高度なソリューション:

wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"

Windows Management Instrumentation コマンド ライン(WMIC) ツール (Wmic.exe)は、Windows Server 2003 および Windows XP または Vista に関する膨大な量の情報を収集できます。このツールは、Windows Management Instrumentation (WMI) を使用して、基になるハードウェアにアクセスします。Windows 2000 には対応していません。


コメントでAlexander Stohr が指摘したように:

  • WMIC は、ポリシー ベースの制限も確認できます。(たとえ ' dir' が機能しても)、
  • ' dir' はロケール依存です。
于 2008-11-16T11:11:54.553 に答える
9

DIR コマンドで /-C を使用すると、カンマを避けることができます。

FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
ECHO FREE_SPACE is %FREE_SPACE%

利用可能なスペースと必要なスペースを比較したい場合は、次のようにすることができます。桁区切り記号で数字を指定してから、それらを削除しました。カンマ無しで数を把握するのは難しい。SET /A は便利ですが、数が多いと機能しなくなります。

SET EXITCODE=0
SET NEEDED=100,000,000
SET NEEDED=%NEEDED:,=%

IF %FREE_SPACE% LSS %NEEDED% (
    ECHO Not enough.
    SET EXITCODE=1
)
EXIT /B %EXITCODE%

アップデート:

2014年以降、多くのことが変わりました。より良い答えがあります。現在サポートされているすべての Microsoft Windows システムで利用できる PowerShell を使用します。

以下のコードは、スクリプトが cmd.exe をラッパーとして使用せずに PowerShell で記述されている場合、より明確で理解しやすくなります。PowerShell Core を使用している場合は、に変更powershellpwshます。

SET "NEEDED=100,000,000"
SET "NEEDED=%NEEDED:,=%"

powershell -NoLogo -NoProfile -Command ^
    $Free = (Get-PSDrive -Name 'C').Free; ^
    if ($Free -lt [int64]%NEEDED%) { exit $true } else { exit $false }
IF ERRORLEVEL 1 (
    ECHO "Not enough disk space available."
) else (
    ECHO "Available disk space is adequate."
)
于 2013-06-06T23:10:28.737 に答える
8

df.exe

すべてのディスクを表示します。合計容量、使用済み容量、空き容量。さまざまなコマンド ライン オプションを使用して、出力を変更できます。

http://www.paulsadowski.com/WSH/cmdprogs.htmhttp://unxutils.sourceforge.net/などから入手できます。du のような標準の unix-util です。

df -hドライブの使用済みおよび使用可能なディスク容量がすべて表示されます。例えば:

M:\>df -h
Filesystem      Size  Used Avail Use% Mounted on
C:/cygwin/bin   932G   78G  855G   9% /usr/bin
C:/cygwin/lib   932G   78G  855G   9% /usr/lib
C:/cygwin       932G   78G  855G   9% /
C:              932G   78G  855G   9% /cygdrive/c
E:              1.9T  1.3T  621G  67% /cygdrive/e
F:              1.9T  201G  1.7T  11% /cygdrive/f
H:              1.5T  524G  938G  36% /cygdrive/h
M:              1.5T  524G  938G  36% /cygdrive/m
P:               98G   67G   31G  69% /cygdrive/p
R:               98G   14G   84G  15% /cygdrive/r

Cygwin は、 https ://www.cygwin.com/ から無料で入手でき ます。コマンド プロンプトに多くの強力なツールが追加されます。ドライブ M (Windows で共有ドライブにマップされている) の使用可能なスペースだけを取得するには、次のように入力できます。

M:\>df -h | grep M: | awk '{print $4}'
于 2008-11-16T13:02:52.643 に答える
6

次のスクリプトは、ドライブに空きバイトを提供します。

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=3" %%a in ('dir c:\') do (
    set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree%
endlocal && set bytesfree=%bytesfree%

これはコマンドの出力に依存することに注意してください。dirコマンドの出力には、フォーマットの空き領域を含む最後の行が必要です24 Dir(s) 34,071,691,264 bytes free。具体的には:

  • これは最後の行である必要があります(または、すべての行のfor設定に依存するのではなく、ループを変更して行を明示的に検出することができますbytesfree)。
  • 空き領域は3番目の「単語」である必要があります(または、tokens=ビットを変更して別の単語を取得できます)。
  • 千の区切り文字は,文字です(または、置換をコンマから別の文字に変更できます)。

環境の名前空間を汚染することはなく、bytesfree終了時に変数のみを設定します。dir出力が異なる場合(たとえば、ロケールや言語の設定が異なる場合)、スクリプトを調整する必要があります。

于 2011-09-05T07:26:08.690 に答える
1

paxdiabloの優れたソリューションを使用して、もう少し洗練されたバッチスクリプトを作成しました。これは、入力引数としてドライブ文字を使用し、ドライブがトリッキーな(ただし美しさではない)方法で存在するかどうかをチェックします。

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree% byte(s) free on volume %drive%:
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

注1:引数にドライブ文字として単純な文字(例:x)を入力するか、x:またはx:\形式を使用できます

注2:サイズが0より大きい場合にのみ、スクリプトは%chkfile%からstderrを表示します

注3:このスクリプトをfreedisk.cmdとして保存しました(使用法を参照)

于 2012-02-03T13:47:04.550 に答える
0

cscript はサードパーティのアプリですか? Microsoft Scriptingを試すことをお勧めします。ここでは、プログラミング言語 (JScript、VBS) を使用して、List Available Disk Spaceなどを確認できます。

スクリプト インフラストラクチャは、現在のすべての Windows バージョン (2008 を含む) に存在します。

于 2008-11-16T11:19:24.740 に答える