基本上我需要的是一种扫描文件夹中某些文件的方法(让我们用.xls / xlsx说出任何内容)并使用模板布局为每个文件生成一个文本文件。我想通过下面的脚本如何做到这一点。但是,我还需要将文件名放在模板文件中以及2个位置。
现在我就是这样的。
Get-ChildItem "*PATH*" | Foreach-Object {$_.Name} > C:\Temp\TextGenerate\FileNames.txt
Get-Content C:\Temp\TextGenerate\FileNames.txt | ForEach-Object {
Copy-Item -Path C:\Temp\TextGenerate\FileTemplate.txt -Destination ("C:\Temp\TextGenerate\ListFiles\{0}.txt" -f $_)
}
基本上它会扫描文件夹位置,使用文件模板文件(FileTemplate.txt)创建一个包含所有文件名的文本文件(FileNames.txt),并为每个文件名创建一个。
这个模板(FileTemplate.txt)将是这样的:
REPORT-ID=TEST FILE=\\XXXXXXXXXX\XXXXXXXXXX\XXXXXXXXXXX\*insert filename here*, TYPE=XLSX, "SECTION=TEST" TOPIC-ID=TOPIC1, "TOPIC-ITEM=*insert filename here*"
输出必须是:
REPORT-ID=TEST FILE=\\XXXXXXXXXX\XXXXXXXXXX\XXXXXXXXXXX\filename1.xlsx, TYPE=XLSX, "SECTION=TEST" TOPIC-ID=TOPIC1, "TOPIC-ITEM=filename1.xlsx"
等等。
模板上的所有内容始终相同,生成的每个文件都需要更改的唯一内容是*insert filename here*
位置文件夹中找到的每个文件的文件名。
我遇到问题,了解如何将这些内容插入文件中。如果可能的话,我还希望尽可能将修改后的数据插入到生成的模板中的另一行文本中。
答案 0 :(得分:0)
正如JosefZ already suggested:只读一次模板文件,然后通过用值填充模板字符串并将修改后的字符串写入输出文件来创建文件。
但是,我建议修改模板以允许在其上使用格式运算符(-f
):
REPORT-ID=TEST FILE=\\XXXXXXXXXX\XXXXXXXXXX\XXXXXXXXXXX\{0}, TYPE=XLSX, "SECTION=TEST" TOPIC-ID=TOPIC1, "TOPIC-ITEM={0}"
此外,无需先将名称写入文件。将您的代码更改为以下内容:
$template = Get-Content 'C:\Temp\TextGenerate\FileTemplate.txt' | Out-String
Get-ChildItem "*PATH*" | Select-Object -Expand Name | ForEach-Object {
$path = "C:\Temp\TextGenerate\ListFiles\{0}.txt" -f $_
$content = $template -f $_
Set-Content -Path $path -Value $content
}