如何通过从 SQL Server 内部运行的命令获取远程驱动器的可用空间,以便 SQL Server 写入 .BAK 文件?

如何通过从 SQL Server 内部运行的命令获取远程驱动器的可用空间,以便 SQL Server 写入 .BAK 文件?

我需要运行一个程序,该程序需要查找特定驱动器中有多少可用空间(uncregular

CMD我需要它在.( 没有 ps)下工作

目标 :

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

请注意:仅限数字!我没有处理字符串的工具(在我的软件中)

那么我尝试了什么?

我尝试过这个:

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

得出的结果为:

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

我也尝试过这个:(最糟糕)

fsutil volume diskfree c:

得出的结果为:

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

问题 :

使用 cmd (无 ps) - 我如何运行返回的命令仅有的驱动器的可用空间?

注意:

Sql server 需要在远程位置打开 bak 文件,我需要检查那里的可用空间,因此 sql 执行 cmd 命令,然后我就可以捕获结果。所以我不想开始使用字符串操作来提取数字

答案1

可以使用命令行工具wmic查询Win32_LogicalDisk

wmic LOGICALDISK where name="C:" get freespace

这将返回两行格式

FreeSpace
2881409024

或者

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

得出的只是数字

答案2

下面仅返回以字节为单位的可用空间。

@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

答案3

这是您可以在命令提示符中使用的单行命令:

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

要显示可用空间值,您可以echo

echo %free%

怎么运行的

命令的输出dir逐行解析,直到最后。除非路径无效,否则最后一行始终包含可用空间量。为了避免处理千位分隔符(千位分隔符是区域感知的,可以自定义),您需要使用参数/-c将其完全删除。每行都获得标记化使用空格作为分隔符,然后%free%每次将第三个标记分配给变量。

相关内容