Powershell для поиска значения и создания файла

Powershell для поиска значения и создания файла

Я новичок в powershell, надеялся на помощь. Я ищу команду powershell, которая будет искать в файле, находить строку и создавать файл на основе найденного значения строки.

Файл «abc.txt» содержит предложение, которое выглядит следующим образом:Выполнен вход в app\prog01. Но иногда этот файл "abc.txt" будет иметь другую программу и номер, например prog21 или prog58.

При запуске команды, если abc.txt имеетВыполнен вход в приложение\prog58в нем будет создан файл с простым именем prog58 без расширения.

решение1

Вам нужен Select-Stringкомандлет, который по умолчанию имеет псевдоним sls. Этот командлет позволяет вам сопоставить регулярное выражение, а затем извлечь совпавшую строку. Полная команда выглядит примерно так:

$(sls 'Logged into app\\prog[0-9]+' 'abc.txt' -all).matches | foreach { $fn=$_.value.split('\\')[1]; [System.IO.File]::Create($fn).close(); $fn }

По сути, для каждого экземпляра строки Logged into app\\progX(где X — одна или несколько цифр), который он находит в файле, он берет содержимое справа от , \пока не достигнет конца цифр, создает файл с этим именем, закрывает файл без записи в него и выводит это имя в stdout (при желании можно удалить последнюю часть).

решение2

Я знаю, что вы просили команду PowerShell, но то, что я собираюсь предложить, может оказаться достаточным.

Он будет работать в стандартной оболочке Cmd.exe, то есть вы также сможете запустить его в PowerShell, и он будет обратно совместим со старыми операционными системами Windows:

TYPE abc.txt | FIND "Logged into app\prog58" >NUL && IF NOT DEFINED %ERRORLEVEL% (TYPE NUL >prog58)

Хотя я могу неправильно понять вопрос. Не могли бы вы уточнить, это именно то, что вы ищете, или вы хотите создать файл с именем progXXна основе текста, существующего в abc.txt?

Редактировать после уточнения: Следующий код также совместим с Cmd.exe и не предназначен исключительно для PowerShell, поэтому, хотя его нельзя использовать как однострочный сценарий, его можно вызвать как простой пакетный скрипт:

@ECHO OFF
SETLOCAL && SETLOCAL EnableExtensions EnableDelayedExpansion
FOR /F "tokens=1-2 delims=\" %%A IN ('TYPE abc.txt ^| FINDSTR /C:"Logged into app\prog"') DO (SET FILENAME=%%B)
SET FILENAME=%FILENAME:~0,6%
TYPE NUL >%FILENAME%

Предупреждение: здесь необходимо progXXиметь ровно 2 цифры, поэтому этот progXXXвариант не сработает.

Связанный контент