提取字符串并保存在 txt 中

提取字符串并保存在 txt 中

我有一个文件文本,内容如下:

行1 名称1

行2 名称2

我怎样才能提取这个?

提取并复制 line1 到保存为 name1 的新文件中

提取并复制 line2 到保存为 name2 的新文件中

我使用空格作为分隔符。如果有必要,我可以使用任何其他分隔符。

我没有尝试任何事情,因为我不是开发人员。

我的电脑是 Windows 10。我搜索了软件或工具来执行此操作,但没有找到任何东西。

来自现已删除的“答案”,应该编辑

是的...“foo bar”到名为 baz 的文件

信息:除了 file.txt 示例中的分隔符外,我没有其他空格字符

答案1

我怎样才能提取这个?

最简单的方法可能是编写一个小脚本。下面给出了一个简单的本机 Windows PowerShell 示例:

例如 readme.txt

line1 name1

line2 name2

例如 split.ps1

# Read each line in a text file, then write that line to a file with the same
# title as the last word in the line.

# --- Main ---

# Get the contents of readme.txt and place it into a variable.
# $file_contents = Get-Content -Path .\readme.txt

# Visual Aid
Write-Output ''

# Prompt the user for the path to e.g. readme.txt. 
$file_contents = Get-Content -Path (Read-Host -Prompt 'Please enter a file name')

# Read each $line in $file_contents
ForEach($line In $file_contents) {

    # Remove any trailing spaces at the end of the line.
    $line = $line.trim()

    # If the $line isn't blank...
    If($line -NotContains '') {

        # Separate the words in each $line by e.g. spaces. Place them into
        # an array and then get the last word in the array (line). Any final
        # array element can be accessed with -1.

        $last_word = $line.Split(' ')[-1]

        # Write $line to a file with a name based on $last_word.
        Out-File -FilePath .\$last_word.txt -InputObject $line

    }

}

# Visual Aid
Write-Output ''

使用示例

从命令提示符 ( cmd):

powershell .\split.ps1

从 PowerShell 提示符中:

.\split.ps1

请注意,在上面的例子中,.\是路径,表示“当前目录”。您也可以使用完整路径(例如"C:\some\path\to\split.ps1")。

请注意,PowerShell 可能需要更改其执行策略才能运行脚本。为此,您需要成为管理员。您可以在此处阅读有关设置 PowerShell 执行策略的更多信息官方文档

笔记

  • 输入的路径Read-Host -Prompt应该只是文件的名称(假设 egreadme.txt与 eg 位于同一目录中split.ps1)或者应该是文件的完整路径(例如C:\some\path\to\readme.txt)。

  • 有了Read-Host -Prompt,就不需要使用双引号 ( ""),即使对于带有空格的路径也是如此。

  • 输出文件(例如name1.txtname2.txt当前写入与 相同的目录split.ps1

注意事项

  • 如果脚本多次运行,任何输出文件都将被覆盖。

  • 例如name1name2被假定为单个单词(即没有空格)。如果格式为line firstname lastname,则lastname.txt只有 eg 才是输出文件名。

  • 尽管我们做了一些努力来确保文件名不为空($line = $line.trim()),但例如任何其他无效字符readme.txt都可能(假设)导致问题。


资源

相关内容