对于 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.txt
、C:\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 等等的主要内容,如果未能解决你的问题,请参考以下文章