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

问题描述

我正在尝试在 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

如果 /i "%UserName%" neq "Henry" exit,第一个 txt 应该看起来像这样 @echo off

如果 /i "%UserName%" neq "Magy" exit,第二个 txt 应该看起来像这样 @echo off

原始 Config.txt 看起来像这样 @echo off if /i "%UserName%" neq "00000" exit

代码:

$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}
 

标签: powershellfor-loopreplaceeach

解决方案


你想做:

  • 读取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
}

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


推荐阅读