Powershell查找值並建立文件

Powershell查找值並建立文件

我是 powershell 新手,希望得到一些幫助。我正在尋找一個 powershell 命令,該命令將搜尋檔案並查找字串並根據找到的字串值建立檔案。

文件“abc.txt”中有一個單字句子,如下所示,登入app\prog01。但有時此檔案「abc.txt」中會有不同的 prog 和編號,例如 prog21 或 prog58。

當命令運行時,如果 abc.txt 有登入app\prog58在其中,它將創建一個名為 prog58 的簡單文件,沒有副檔名。

答案1

您需要Select-Stringcmdlet,預設情況下別名為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 }

基本上,對於它在文件中找到的字串的每個實例Logged into app\\progX(其中 X 是一個或多個數字),它會將內容放在右側,\直到到達數字末尾,創建一個具有該名稱的文件,然後關閉檔案而不寫入它,並將該名稱回顯到標準輸出(如果需要,您可以刪除最後一部分)。

答案2

我知道您要求使用 PowerShell 命令,但我將提供的內容可能就足夠了。

它將在標準 Cmd.exe shell 中運行,這意味著您也可以在 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不起作用。

相關內容