对于 CSV 中的每个名称写入每个输出文件,替换单词 00000 来命名例如 1 个输出 Henry 等等

Posted

技术标签:

【中文标题】对于 CSV 中的每个名称写入每个输出文件,替换单词 00000 来命名例如 1 个输出 Henry 等等【英文标题】:for each Name from CSV write to each output file replacing the word 00000 to name for example 1 output Henry and so on 【发布时间】:2021-03-22 02:34:27 【问题描述】:

我正在尝试使用在 CSV 中使用的每个(名称)来替换写在我要导出的每个文件上的 (00000)。 该文件已包含单词 00000

csv 文件包含:

FullName             Name    LastWriteTime
\\remotecomputer\    Henry   4/30/2020  3:44:57 PM
\\remotecompter\     Magy    12/7/2020  9:04:28 PM

第一个 txt 应该是这样的 @echo 关闭 if /i "%UserName%" neq "Henry" 退出

第二个 txt 应该是这样的 @echo 关闭 if /i "%UserName%" neq "Magy" 退出

原来的 Config.txt 是这样的 @echo 关闭 if /i "%UserName%" neq "00000" 退出

代码:

$source = Read-Host -Prompt 'Insert source path'
Import-Csv C:\$source-PREP.csv | ForEach-Object $_.Name |ForEach-Object Get-Content c:\Config.txt | ForEach-Object $_ -replace '00000',"$_.Name" |Out-File c:\$_.txt  -Force
 

【问题讨论】:

请向我们展示c:\Config.txt 的(已清理的)内容,以便我们知道来源的样子。 您的问题是什么? :) 这里是 Config.txt 文件竞赛 @echo off if /i "%UserName%" neq "00000" exit REM ---- 向用户发送关于不中断其个人资料复制的消息---- 我正在尝试使用 CSV 中的每个(名称)来替换写在我要导出的每个文件上的 (00000)。该文件已包含单词 00000 【参考方案1】:

认为你想做:

读取一个模板文件c:\Config.txt,其中包含"00000"作为占位符 读取一个csv文件C:\Something-PREP.csv,其中包含一个名为Name的列 使用这些名称替换模板中的 "00000" 占位符 输出新文件C:\Henry.txtC:\Magy.txt

如果这个假设是正确的,请尝试

$template = Get-Content -Path 'C:\Config.txt'
(Import-Csv -Path 'C:\Whatever-PREP.csv').Name | ForEach-Object 
    # replace "00000" with the name (represented by `$_`) and use that name as filename for the output
    $template -replace '"00000"', ('"0"' -f $_) | Set-Content -Path ('C:\0.txt' -f $_) -Force

附:确保您要导入的 CSV 使用 逗号 作为分隔符。如果这是其他字符,请将 -Delimiter '<yourCharacter>' 添加到 cmdlet。

【讨论】:

我今天早上试过了,它一直像这样 Import-Csv 回来:无法验证参数“路径”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。在 C:\Users\H107371a\Desktop\SELFINSTALL\Untitled131.ps1:2 char:20 + (Import-Csv -Path 'CSRLDAM3954591-PREP.csv'.Name) | ForEach-Object + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Import-Csv], @EnriqueTellez 使用 csv 文件的完整路径。此外,您需要将右括号 before .Name 放在我的回答中, 谢谢它在这里工作是最终代码 $template = Get-Content -Path 'C:\Config.txt' (Import-Csv -Path 'C:\CSRLDAM3954591-PREP.csv') .姓名 | ForEach-Object $template -replace '00000', ('0' -f $_) | Set-Content -Path ('C:\0.txt' -f $_) -Force

以上是关于对于 CSV 中的每个名称写入每个输出文件,替换单词 00000 来命名例如 1 个输出 Henry 等等的主要内容,如果未能解决你的问题,请参考以下文章

用 .csv 文件中的 VBA 仅在 3 列中用分号替换逗号

从每个键具有多个值的字典中将数据写入 csv

python列表到csv文件,每个项目都在新行中

如何将列表列表写入 CSV 文件 Python?

如何列出 CSV 文件中的各个列?

将for循环的输出写入python中的csv