Окно Пакетный файл: найти строку с указанными словами - PullRequest
0 голосов
/ 30 января 2012

Мне нужно запустить скрипт, который находит раздел поиска с более чем 1 ГБ свободного места.Я написал следующее:

@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 ГБ 1024 КБ

Раздел 2 Первичный 300 МБ 74GB

Теперь я хочу проверить, какой раздел имеет более 1 ГБ свободного места, поэтому я смотрю на слово "GB".

, но я всегда получаю:> "было неожиданнымв это время."ошибка.Может ли кто-нибудь помочь мне выяснить, в чем проблема?или предложить мне лучший способ сделать это?

спасибо !!!

1 Ответ

0 голосов
/ 30 января 2012

Уч.

У вас много проблем.

Вывод 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. Я бы не хотел, чтобы вы случайно повредили жесткий диск из-за ошибки пакетного программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...