Como posso obter o espaço livre de uma unidade remota, para o SQL Server gravar um arquivo .BAK, por meio de um comando executado no SQL Server?

0

Eu preciso executar um programa que precisa descobrir quanto espaço livre eu tenho em uma unidade específica ( unc ou regular )

Eu preciso que funcione com CMD . (no ps)

Objetivo:

c:\> something e:
     1902323213 //nevermind mb /gb

por favor note: apenas números! Eu não tenho a ferramenta para lidar com strings (no meu soft)

Então o que eu tentei?

Eu tentei isso:

DIR \dsmain\ls_BackUp\*.* | find "free"

que produz:

2 Dir(s) 311,285,014,528 bytes free

Eu também tentei isso: (pior)

fsutil volume diskfree c:

que produz:

Total # of free bytes        : 54761066496
Total # of bytes             : 255953203200
Total # of avail free bytes  : 54761066496

Pergunta:

Usando cmd (no ps) - como posso executar um comando que retorne somente o espaço livre de uma unidade?

nb:

O servidor sql precisa abrir um arquivo bak em um local remoto e eu preciso verificar o espaço livre lá, assim o comando sql execute cmd e eu posso capturar o resultado. Então eu não quero começar a usar manipulações de strings para extrair o número

    
por Eris 19.03.2014 / 18:22

3 respostas

5

Você pode usar a ferramenta de linha de comando wmic para consultar Win32_LogicalDisk

wmic LOGICALDISK where name="C:" get freespace

Isso retornará duas linhas no formato

FreeSpace
2881409024

ou

wmic LOGICALDISK where name="C:" get freespace | find /v "Free"

que produz apenas o número

    
por 19.03.2014 / 18:32
2

O abaixo retorna JUST o espaço livre em bytes.

@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%
pause>nul
    
por 19.03.2014 / 18:29
0

Aqui está um comando de uma linha que você pode usar em um prompt de comando:

for /f "tokens=3" %G in ('"dir /-c "\dsmain\ls_BackUp\" "') do @set free=%G

Para exibir o valor de espaço livre, você pode echo it:

echo %free%

Como funciona

A saída do comando dir é analisada linha por linha até o final. A última linha é sempre aquela que contém a quantidade de espaço livre, a menos que o caminho seja inválido. Para evitar ter que lidar com separadores de milhares (que são compatíveis com o local e podem ser personalizados), você precisa usar o parâmetro /-c para removê-los totalmente. Cada linha obtém tokenized usando espaços como separadores, e o terceiro token é atribuído à variável %free% a cada vez.

    
por 19.03.2014 / 22:20