Windows批处理文件:查找具有特定单词的行

时间:2012-01-30 14:40:10

标签: batch-file

我必须运行脚本,找到具有超过1 GB可用空间的find分区。 我写了以下内容:

@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。 Log.txt等于:

  

分区###类型大小偏移

     
     

分区1主要74 GB 1024 KB

     

分区2主要300 MB 74 GB

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

但我总是得到:> “此时此刻意外。”错误。  可以帮忙找出问题吗?或者建议我更好的方法来做到这一点?

感谢!!!

1 个答案:

答案 0 :(得分:0)

哎哟。

你遇到了很多问题。

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

话虽如此,您的脚本中存在一些主要的语法问题。

看起来您正在尝试在FOR语句中读取文件,但实际上您的语法正在尝试执行命令,因为您将文件名括在单引号中。您需要从命令行键入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。由于批处理编程错误,我讨厌你不小心弄坏你的硬盘。