批处理脚本删除大于 50 GB 的 .ost
Posted
技术标签:
【中文标题】批处理脚本删除大于 50 GB 的 .ost【英文标题】:batch script delete .ost bigger than 50 GB 【发布时间】:2015-12-28 10:40:12 【问题描述】:我正在尝试制作一个批处理脚本来删除大于 50GB 的 Outlook .ost 文件。但是带有“for”命令的循环让我发疯:( 也尝试使用“forfiles”命令,但没有幸运。 有什么想法吗?
嗨丹尼斯! 抱歉延迟退房... 我已经用小 ost 测试过它并且可以工作......但是...... IF 命令不适用于大文件......高达〜2GB。我尝试了一个 45GB 的文件。
检查一下:
IF 2147483647 GTR 2147483646 echo A 大于 B(将为 TRUE)
IF 2147483648 GTR 2147483647 echo A 大于 B(将是 FALSE!)
就像在: How can I check the size of a file in a Windows batch script?
我尝试转换为 GB 但不起作用:
FORFILES /P "%localappdata%\Microsoft\Outlook" /S /M *.ost /C "cmd /c set /a ostsize=@fsize/1073741824 echo @file"
但是不行,后来发现forfiles命令有问题:
FORFILES /P "%localappdata%\Microsoft\Outlook" /S /M *.ost /C "cmd /c echo=@fsize"
尝试使用 45GB 文件并返回 8052032512 值...:S 我卡住了!
【问题讨论】:
请在发帖前先谷歌,告诉我们你已经做了什么。 可惜你不愿意学习如何使用for
命令;这正是您所需要的。
【参考方案1】:
if
似乎无法将这么大的数字解释为字符串(请参阅相关问题 weird results with IF),就像人们认为的那样。
而且由于数字被限制为 32 位整数,因此处理较大数字的唯一选择是明确强制 if
将它们作为字符串进行比较(通过用 qoutes 将它们括起来)。
另外,我在它们前面加了一堆零,然后将它们限制为固定长度(因为用字符串比较,41大于296(4
大于2
),但是字符串"00041" 小于字符串 "00296" - 严格比较字符串从第一个字符到最后一个字符)
@echo off
set "size1=2147483647"
set "size2=2147483646"
set "null=000000000000000"
set "size1=%null%%size1%"
set "size2=%null%%size2%"
set "size1=%size1:~-15%"
set "size2=%size2:~-15%"
if "%size1%" gtr "%size2%" echo size1 is greater
【讨论】:
IF "2147483648" GTR "2147483647" echo A 大于 B(将是 FALSE!)-> 现在有效!!!我不知道报价!!!但我无法修复: FORFILES /P "%localappdata%\Microsoft\Outlook" /S /M *.ost /C "cmd /c echo=@fsize" 如果 *.ost 大小小于 8052032512 有效,但如果更大仍然显示 8052032512。似乎“forfiles”命令看不到超过 8052032512 字节:S【参考方案2】:好的,我找到了解决方案:WMIC 来救援!!!!
做一个 wmic 查询并放入一个变量中:
for /f "tokens=2 delims==" %%f in ('wmic datafile where "path='\\Users\\%username%\\AppData\\Local\\Microsoft\\Outlook\\' and Extension='ost' and FileSize>'48318382080'" get Name /value ^| find "="') do set "file=%%f"
【讨论】:
【参考方案3】:首先,欢迎来到***。在这个站点上,提供您自己尝试过的代码来解决您无法解决的问题是一种习惯做法,因为这是一个供人们互相帮助编写代码的站点,而不是免费的编码服务。
因为这个特殊的问题很容易解决,这就是你需要的:
@echo off
FORFILES /S /M *.ost /C "cmd /c if @fsize gtr 53687091200 del @file"
【讨论】:
效果很好!只是想从头开始......我不会再这样做了,我发誓我妈妈! Except... 这不起作用,因为“if”语句无法评估有符号 32 位大小的数字。因此,您的代码根本不适用于查找大小超过 50gb 的文件,您可以搜索的最大大小为 2147483646。我通过 Google 发现并测试了我的代码。以上是关于批处理脚本删除大于 50 GB 的 .ost的主要内容,如果未能解决你的问题,请参考以下文章