我想在依赖于我的免费存储空间的批处理文件中进行操作,但它失败了(有时候只是有趣),因为可用空间超过2GB,使得变量不可设置。
这是批处理文件:
cd "C:\Users\Fabian\Desktop\Screen Recordings\Auto"
for /F "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do (set FreeSpace=%%x)
if (%FreeSpace%) LSS (2499522027520) (
for /F "delims=" %%a in ('dir /b /a-d /t:w /o:d "C:\Users\Fabian\Desktop\Screen Recordings\Auto\*.flv"') do (
del "%%a"
goto :breakLoop
))
:breakLoop
exit
其中很多只是解决Windows怪异问题的方法,重要的是:set FreeSpace=%%x
x
是一个直接来自实时磁盘数据的字符串,应该转换为数字,但由于它大于2 32 ,因此失败(并且它使它成为一个字符串,在下一行比较一个字符串比较,这根本不是我想要的。)
我也不能将它除以一个数字,因为这需要它是一个数字。
我是否必须通过更改字符串的长度来使用最终切断数字的粗略黑客(如果是,怎么做?)或者是否有办法在其中包含正确的long
个数字批处理文件?
我发现this script(archive)确实有效,但我不知道怎么做。它的哪一部分砍掉了数字,这是我需要的重要部分?我不能让它每次总结所有文件夹大小,因为脚本每20秒运行一次。
答案 0 :(得分:2)
在Windows命令提示符下无法处理超出有符号32位整数范围的数字,范围从-2 31 = -2147483648到2 31 - 1 = 2147483647。
然而,您可以使用sub-string expansion(例如6)在右侧删除几个数字,以获得向下舍入数量的Mega-Bytes而不是Bytes,并使用结果进行数值比较,如下所示:
#!/bin/bash
tmux \
new-session "python long_expirement.py"
detach-client
当然你会失去精确度,但这可能是可以接受的。
我还更改了捕获Microsoft.Compute/virtualMachines/write
输出的cd "%USERPROFILE%\Desktop\Screen Recordings\Auto"
set "FreeSpace=0"
for /F "usebackq skip=1" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace^,Size`) do (set "FreeSpace=%%x")
rem // Remove the last 6 digits to get MBytes:
set "FreeSpaceMB=%FreeSpace:~,-6%"
rem // Ensure to not leave an empty value behind:
if not defined FreeSpaceMB set "FreeSpaceMB=0"
if %FreeSpaceMB% LSS 2499522 (
for /F "delims=" %%a in ('dir /B /A:-D /T:W /O:D "C:\Users\Fabian\Desktop\Screen Recordings\Auto\*.flv"') do (
del "%%a"
goto :breakLoop
)
)
:breakLoop
exit /B
循环,以避免像孤立回车(CR)字符这样的Unicode转换伪像,这会导致变量for /F
包含一个数字加上一个CR。这就是为什么我查询了值wmic
虽然不需要它,但FreeSpace
值不是最后一个可能由CR尾标的值。
顺便说一句,请注意我从if
命令行中删除了多余的括号。