【问题标题】:Windowes Batch file: find line with specifies wordsWindows 批处理文件:查找包含特定单词的行
【发布时间】:2012-01-31 00:51:00
【问题描述】:

我必须运行脚本来查找可用空间超过 1 GB 的分区。 我写了以下内容:

@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
)

Dispart 调用另一个脚本,该脚本将所有可用分区打印到 log.txt。 Log.txt 等于:

分区###类型大小偏移


分区 1 主要 74 GB 1024 KB

分区 2 主要 300 MB 74 GB

现在,我想检查哪个分区有超过 1 GB 的可用空间,所以我看一下“GB”字。

但我总是得到:>“此时出乎意料。”错误。 任何人都可以帮我找出问题所在吗?或者建议我一个更好的方法来做到这一点?

谢谢!!!

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    哎哟。

    你有很多问题。

    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。我不希望你因为批处理编程错误而意外损坏你的硬盘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多