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