값을 찾고 파일을 생성하는 Powershell

값을 찾고 파일을 생성하는 Powershell

저는 Powershell을 처음 접했고 도움이 필요했습니다. 파일을 검색하여 문자열을 찾고 발견된 문자열 값을 기반으로 파일을 생성하는 powershell 명령을 찾고 있습니다.

파일 "abc.txt"에는 다음과 같은 단어 문장이 있습니다.app\prog01에 로그인됨. 그러나 때때로 이 "abc.txt" 파일에는 prog21 또는 prog58과 같이 다른 prog 및 번호가 있을 수 있습니다.

명령이 실행될 때 abc.txt에 다음이 있는 경우app\prog58에 로그인했습니다.그 안에는 확장자가 없는 prog58이라는 이름의 간단한 파일이 생성됩니다.

답변1

Select-String기본적으로 별칭이 .인 cmdlet이 필요합니다 sls. 이 cmdlet을 사용하면 정규식을 일치시킨 다음 일치하는 문자열을 추출할 수 있습니다. 전체 명령은 다음과 같습니다.

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

기본적으로 파일에서 찾은 문자열(X는 하나 이상의 숫자)의 각 인스턴스에 대해 숫자 끝에 도달할 때까지 Logged into app\\progX오른쪽에 있는 항목을 가져와서 해당 이름의 파일을 만들고 닫습니다. \파일에 쓰지 않고 해당 이름을 stdout에 반영합니다(원하는 경우 마지막 부분을 제거할 수 있음).

답변2

귀하가 PowerShell 명령을 요청했다는 것을 알고 있지만 제가 제공하려는 내용만으로도 충분할 수 있습니다.

이는 표준 Cmd.exe 셸에서 작동합니다. 즉, PowerShell에서도 실행할 수 있으며 이전 Windows 운영 체제와도 역호환됩니다.

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

하지만 질문을 오해하고있을 수도 있습니다. 이것이 정확히 당신이 찾고 있는 것인지, 아니면 progXXabc.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작동하지 않습니다.

관련 정보