サードパーティのアプリケーションをインストールせずに、CMDのディスクまたはフォルダーの空きディスク容量を取得する方法はありますか?
特定のディレクトリに大きなファイルをコピーするCMDがあり、もちろんcopyコマンドからのerrorlevel returnを使用できますが、ファイルをコピーするのにかかる時間を待つ必要があります(たとえば...ディスクがいっぱいで、コピー操作が失敗します)。
コピーを開始する前に、何かアイデアがあるかどうかを知りたいです。 SysinternalsからDU.EXEユーティリティを試しましたが、それは占有スペースのみを示しています。
「dir c:\
」を実行すると、最後の行に空きディスク容量が表示されます。
編集:より良い解決策: "fsutil volume diskfree c:
"
可能な解決策:
dir|find "bytes free"
より多くの " advanced solution "、Windows XP以降の場合:
wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"
Windows Management Instrumentationコマンドライン (WMIC)ツール(Wmic.exe)は、Windows XPまたはVistaだけでなく、Windows Server 2003に関する膨大な量の情報を収集できます。このツールは、Windows Management Instrumentation(WMI)を使用して、基盤となるハードウェアにアクセスします。 Windows 2000用ではありません。
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%
このコマンドを使用すると、すべてのパーティション、サイズ、空き容量を見つけることができます:wmic logicaldisk get size, freespace, caption
次のスクリプトは、ドライブ上の空きバイトを提供します。
@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
ループを変更して明示的に行を検出できます)。tokens=
ビットを変更して別のWordを取得できます)。,
文字です(または、コンマから他の文字に置換を変更できます)。環境の名前空間は汚染されず、終了時にbytesfree
変数のみが設定されます。 dir
出力が異なる場合(たとえば、異なるロケールまたは言語設定)、スクリプトを調整する必要があります。
すべてのディスクを表示します。合計、使用済み、および空き容量。さまざまなコマンドラインオプションで出力を変更できます。
http://www.paulsadowski.com/WSH/cmdprogs.htm 、 http://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で使用可能なスペースだけを取得するには(ウィンドウで共有ドライブにマップされる)、次のように入力できます。
M:\>df -h | grep M: | awk '{print $4}'
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として保存しました(使用方法を参照)
Cscriptはサードパーティのアプリですか? Microsoft Scripting を試してみることをお勧めします。プログラミング言語(JScript、VBS)を使用して List Available Disk Space のようなものをチェックできます。
スクリプトインフラストラクチャは、現在のすべてのWindowsバージョン(2008を含む)に存在します。
Windows 10では、コピー先のディレクトリに対して大きすぎるファイルがコピーされた場合、コピーおよびxcopy操作はすぐに失敗します。したがって、コピー操作を開始する前に、使用可能な空きディスク容量を確認する必要はありません。