【问题标题】:for each Name from CSV write to each output file replacing the word 00000 to name for example 1 output Henry and so on对于 CSV 中的每个名称写入每个输出文件,替换单词 00000 来命名例如 1 个输出 Henry 等等
【发布时间】: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

标签: powershell for-loop replace each


【解决方案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}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
相关资源
最近更新 更多