我有一个文件文本,内容如下:
行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.txt
)name2.txt
当前写入与 相同的目录split.ps1
。
注意事项
如果脚本多次运行,任何输出文件都将被覆盖。
例如
name1
和name2
被假定为单个单词(即没有空格)。如果格式为line firstname lastname
,则lastname.txt
只有 eg 才是输出文件名。尽管我们做了一些努力来确保文件名不为空(
$line = $line.trim()
),但例如任何其他无效字符readme.txt
都可能(假设)导致问题。
资源