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不起作用。

相关内容