2012-01-30 53 views
0

我必须运行脚本,查找具有超过1 GB可用空间的查找分区。 我写道:Windowes批处理文件:找到指定文字的行

@echo on 
set isComplete = 0 
set last = 0; 

DISKPART /s .\script.txt > .\log.txt 

for /f "tokens=3" %%f in ('.\log.txt') do (
FIND /C /I "GB" .\log.txt > %isComplete% 
IF %isComplete% > 0 
%last% = %%f 
) 

作用细分调用另外一个脚本,打印到log.txt的所有availble的分区。 log.txt的等于:

分区###类型大小偏移


分区1初级74 GB 1024 KB

分区2主300 MB 74 GB

现在,我想检查哪部分有超过1 GB的可用空间,所以我看起来敌人“GB”字。

但我总是得到:>“在这个时候是意外的。”错误。 可以帮助我找出什么问题?或者建议我一个更好的方法来做到这一点?

谢谢!!!

回答

0

Ouch。

你有很多问题。

LIST PARTITION的输出给出了每个分区的大小和偏移量。我对DISKPART不是很熟悉,但我不相信大小给出了分区内的可用空间量。它表明分区有多大,但没有说明已经分配给现有文件的空间有多少。偏移量指示分区的位置。所以看起来你从一开始就走错了路。

这就是说,你的脚本中有一些主要的语法问题。

它看起来像你想阅读你的语句中的文件,但在现实中你的语法尝试,因为你单引号括起来的文件名来执行命令。您需要从命令行输入HELP FOR,并仔细阅读FOR命令的说明。

你想要么

for /f "tokens=3" %%f in (log.txt) do (

,或者,如果文件名包含空格(你没有),那么

for /f "usebackq tokens=3" %%f in ("file name with spaces.txt") do (

你行FIND /C /I "GB" .\log.txt > %isComplete%试图写find命令的输出到一个名为“0”的文件。我怀疑你的意图。 FIND命令将打印出包含您的搜索字符串“GB”的任何行的完整文本。如果找到至少一条匹配线,它也会将ERRORLEVEL设置为0,如果找不到匹配线,则设置为1。我不确定你想要做什么。

你的IF声明是一团糟。这里再次需要从命令行键入HELP IF并仔细阅读如何使用它。您现有的尝试有很多错误

  • 不能扩展IF语句翻过多行除非您使用行继续^或小括号。

  • 不能使用>作为比较运营商,你需要使用GTR

  • 我无法弄清楚你正试图使什么比较。

我不知道如何指向正确的方向,因为我不明白你的整体任务是什么。也许如果你更详细地描述你想要做的事情,有人可以提供一个脚本来完成任务,你可以从这个例子中学习。

DISKPART是一个潜在的危险工具。我没有看到你如何使用LIST命令造成伤害,但是如果误用了其他命令可能会产生问题。当你正在学习批处理脚本的基础知识时,我建议你避免使用DISKPART。由于批量编程错误,我会讨厌你意外地损坏硬盘。

相关问题