我正在尝试制作一个批处理脚本来删除大于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我被卡住了!
答案 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"