javascript - 用于将 .csv 转换为 .html 并处理多个文件的 Powershell 脚本
问题描述
我必须编写一个脚本来获取多个 .csv 文件的内容并将它们写入一个 .html 文件。目标是将所有文件名视为按钮,并能够展开按钮以查看内容。
我的问题是我不知道如何为每个文件提供正确的名称data-target
。div id
我想你现在已经知道我的脚本技能......非常非常有限,但这是我的尝试:
$in = "C:\clientlist\*"
$out = 'C:\clientlist\test.html'
$head = @"
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
"@
$Pre = @"
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo">Filename</button>
<div id="demo" class="collapse">
"@
$Post = @"
</p></div>
"@
$Head | Out-File -filepath $out
$List = Get-ChildItem $in -Filter *.csv
$User = $List |
ForEach-Object {Import-Csv $_ | Select-Object | convertto-html -fragment -precontent $pre -postcontent $post}
$User | Out-File -filepath $out -append
任何帮助将不胜感激,如果您需要任何进一步的信息,请告诉我!
解决方案
你很近!
您需要做的是$Pre
在 ForEach-Object 循环中定义字符串。Select-Object
除非您想选择要输出的 CSV 数据的子集,否则您在两者之间所做的一切都没有用。
这样的事情应该这样做:
$Head | Out-File -filepath $out -Encoding utf8
$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
$name = $_.BaseName
$id = '{0}_{1}' -f $name, (Get-Date).Ticks # to make this id unique, append the Ticks to the name
$Pre = @"
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#$id">$name</button>
<div id="$id" class="collapse">
"@
$Post = '</p></div>'
Import-Csv -Path $_.FullName | ConvertTo-Html -Fragment -PreContent $pre -PostContent $post |
Out-File -FilePath $out -Encoding utf8 -Append
}
另一种方法是创建包含占位符和的$Pre
as 模板,并使用Format 运算符在 ForEach 循环中填写名称和 id :{0}
{1}
-f
$Head | Out-File -filepath $out -Encoding utf8
$Pre = @'
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#{0}">{1}</button>
<div id="{0}" class="collapse">
'@
$Post = '</p></div>'
$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
$name = $_.BaseName
$id = '{0}_{1}' -f $name, (Get-Date).Ticks # to make this id unique, append the Ticks to the name
# use the $Pre template to fill in the placeholders
$precontent = $Pre -f $id, $name
Import-Csv -Path $_.FullName | ConvertTo-Html -Fragment -PreContent $precontent -PostContent $post |
Out-File -FilePath $out -Encoding utf8 -Append
}
推荐阅读
- node.js - WebSocket 连接到 'ws://X.XXX.XXX.XXX:5858/socket.io/?EIO=3&transport=websocket' 失败:
- java - 如何从混合文本中留下阿拉伯数字?
- ag-grid - AG-Grid - 带有 Pivot 的 Pin 测量列打破水平滚动
- javascript - 列表项的删除按钮和删除线功能(ReactJS)
- google-chrome - Blazor PWA 适用于桌面浏览器,但不适用于智能手机
- c++ - CMake 添加额外的 DLL 目标并将其链接到静态目标
- python - 如何解决这个“TypeError: print() argument after * must be an iterable, not int”?
- dockerfile - 为多模块项目构建 docker 镜像,将 jar 推送到类路径
- php - 在一列一列中列出多个
- unity3d - 如何在 WebGL 中将 HTML5 播放器中的视频绘制和投影到 3D 平面上?