3

Это на Windows 7 с использованием командной строки и командных файлов.

Я искал список своих программ, удалял большое количество ненужных и обновлял большое количество устаревших программ. Я использовал команду wmic для построчного получения текстового документа с каждой программой. Я хочу удалить каждую программу из этого списка с именем "Microsoft", "Windows" или "Visual" в названии. Я пытаюсь сделать это с помощью команды findstr и параметра /v, который позволяет выводить только строки без совпадений. Тем не менее, запуск программы, которую я написал, не находит совпадений в файле, поэтому просто копирует его. Я также попробовал дикие символы на случай, если другие слова в слове испортят его или что-то в этом роде.

Вот пример одной из строк в просматриваемом файле: (LASTNAME-LAPTOP, Microsoft Office Excel Viewer, 12.0.6612.1000)

PATH - это просто представление пути к моей папке на флеш-накопителе, в скрипте это фактический путь к папке с обоими файлами RTF внутри. Он содержал пробел, поэтому я помещал кавычки вокруг источника и вывода.

Вот моя программа:

findstr /i /v ".microsoft. .windows. .visual." "E:\PATH\programs.rtf" > "E:\PATH\programs2.rtf"

1 ответ1

2

Запуск программы, которую я написал, не находит совпадений в файле

Я использовал команду wmic для построчного получения текстового документа с каждой программой.

Из wmic:

Все выходные файлы имеют текст в кодировке Юникод (преобразовать в ASCII с ТИПОМ)

Это сбивает с толку findstr который ожидает ASCII в качестве ввода, например:

F:\test>findstr /i /v "microsoft windows visual" unicode.txt
 ■N a m e                                                                                                                       V e r s i o n

 V A I O   D a t a   R e s t o r e   T o o l                                                                                   1 . 6 . 0 . 1 3 1 4 0
 I n k s c a p e   0 . 9 1                                                                                                     0 . 9 1
 M S X M L   4 . 0   S P 3   P a r s e r   ( K B 2 7 5 8 6 9 4 )                                                               4 . 3 0 . 2 1 1 7 . 0

Вы можете обойти это, используя следующую последовательность примеров команд:

wmic product get name,version > unicode.txt
type unicode.txt > programs.txt
findstr /i /v "microsoft windows visual" programs.txt > programs2.txt

В качестве альтернативы:

wmic product get name,version > programs.txt
type programs.txt | findstr /i /v "microsoft windows visual" > programs2.txt

Заметки:

  • Используйте простые текстовые файлы (не RTF) в качестве входных данных для findstr .
  • type используется для преобразования из Unicode в ASCII.
  • . символы не нужны в команде findstr

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .