Estou tentando criar um arquivo em lotes para extrair o tamanho total e o espaço livre da unidade C: \ de servidores (script executado localmente). Também preciso que a saída seja facilmente legível, para que bytes não funcione, por isso estou bem com uma linha de comando que cria um arquivo .vbs temporário.
Parece que o seguinte poderia funcionar, mas a formatação / matemática não está correta.
setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%
Os comandos acima também estão mostrando apenas espaço livre ... Gostaria também de tamanho total ... Pensando se o seguinte comando pode ser melhor para obter as informações:
WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"
Observe também que desejo que ele possa ser copiado / colado diretamente em um prompt de comando (não em um arquivo em lotes - requisitos forçados). Eu já removi os "%%" 's do código acima.
Nota: Precisa ser executado de forma nativa no Server 2003+ (para que o Powershell esteja fora, bem como quaisquer utilitários de terceiros).
fonte
Respostas:
Sob a cláusula não um arquivo em lote - requisitos forçados , a próxima linha
cmd
única pode ajudar:Saída :
fonte
Sei que você está parecendo VBS agora, mas o PowerShell pode fazer isso com muita facilidade:
A primeira linha obtém as informações do disco do WMI (apenas C: neste exemplo) e seleciona apenas os tamanhos Espaço Livre e Total.
Nas próximas duas linhas, grave os tamanhos Espaço Livre e Total no console, formatado para ser em GB, com as frações truncadas.
Exemplo de saída (como está):
fonte
Em um arquivo em lotes, você pode obter o tamanho do disco em GB de um disco especificado usando um script DiskPart. Neste exemplo, estou configurando o índice de disco específico de acordo com o nome do modelo (supondo que exista apenas um no computador). Altere a string " Disco SATA " para corresponder ao modelo da sua unidade de disco. Você pode obter o nome do modelo executando o comando " wmic diskdrive get Model, Index " no cmd.
Obviamente, você pode usar uma propriedade diferente do disco no comando wmic - digite wmic diskdrive get /? para obter uma lista de todas as propriedades do disco que você pode usar.
fonte
Se você apenas precisar verificar se a unidade possui espaço livre suficiente (para instalar ou copiar algo, por exemplo), tente a consulta wmic como esta:
wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)
isso interromperá a execução do arquivo em lote se houver menos de 10 GB livres em C:
fonte
Divida por 1024 para obter kibytes (2 ^ 10). Divida por 1024 x 1024 para obter Mibytes (2 ^ 20). Divida por 1024 x 1024 x 1024 para obter Gibytes (2 ^ 30).
O Windows chama essas unidades de kilobytes, megabytes e gigabytes por motivos históricos. Eu acho que minha caixa está certa.
Então mude suas somas.
fonte