批处理脚本删除.ost大于50 GB

时间:2015-12-28 10:40:13

标签: batch-file

我正在尝试制作一个批处理脚本来删除大于50GB的Outlook .ost文件。但是带有“for”命令的循环让我发疯:( 也尝试使用“forfiles”命令,但没有luky。 有什么想法吗?

嗨丹尼斯! 很抱歉这么推迟退房...
我用小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我被卡住了!

3 个答案:

答案 0 :(得分:0)

首先,欢迎来到stackOverflow。在此网站上自定义提供您自己尝试的代码,以解决您无法解决的问题,因为这是一个让人们互相帮助代码而不是免费编码服务的网站。

因为这个特殊问题很容易解决,所以这就是你需要的:

@echo off
FORFILES /S /M *.ost /C "cmd /c if @fsize gtr 53687091200 del @file"

答案 1 :(得分:0)

having count(distinct t.tid) = 3似乎无法将这样大的数字解释为字符串(请参阅相关问题weird results with IF),因为人们认为应该这样做。

由于数字仅限于32位整数,因此使用较大数字的唯一选择是明确强制if将它们作为字符串进行比较(通过用qoutes括起来)。

另外,我在它们前面添加了一堆零,然后将它们限制为固定长度(因为字符串比较,41大于296(if大于4) ,但字符串" 00041"小于字符串" 00296" - 字符串严格地从第一个字符到最后一个字符进行比较)

2

答案 2 :(得分:0)

好的,我找到了解决办法: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"
相关问题