powershell - 如何读取文件夹中的每个 csv 文件并从 csv 文件中删除引号字符?
问题描述
如何读取特定文件夹的每个 csv 文件?当执行下面的脚本时,它只会删除一个 csv 文件的引号字符。
$file="C:\test\IV-1-2020-04-02.csv"
(GC $file) | % {$_ -replace '"', ''} > $file
Get-ChildItem -Path C:\test\ -Filter '*.csv'
输出只会删除“IV-1-2020-04-02.csv”的引号字符。如果我有不同的文件名怎么办?
解决方案
您可以使用using迭代每个.csv
文件Get-ChildItem
和replace
引号。"
''
Set-Content
$files = Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv
foreach ($file in $files)
{
Set-Content -Path $file.FullName -Value ((Get-Content -Path $file.FullName -Raw) -replace '"', '')
}
确保将您的文件夹路径传递给-Path
,它告诉Get-ChildItem
您从此文件夹中获取每个文件
使用开关 for也更快,因为它将文件读入一个字符串并保留换行符。如果您省略此开关,默认情况下将通过换行符将行拆分为字符串数组-Raw
Get-Content
Get-Content
如果您还想读取更深的子目录中的文件,请将-Recurse
开关添加到Get-ChildItem
:
$files = Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv -Recurse
此外,您还可以Foreach-Object
在此处使用:
Get-ChildItem -Path "YOUR_FOLDER_PATH" -Filter *.csv -Recurse | ForEach-Object {
Set-Content -Path $_.FullName -Value ((Get-Content -Path $_.FullName -Raw) -replace '"', '')
}
此外,您可以替换Foreach-Object
为它的别名%
。但是,如果您使用 VSCode 并已PSScriptAnalyzer
启用,您可能会收到以下警告:
“%”是“ForEach-Object”的别名。别名可能会引入可能的问题并使脚本难以维护。请考虑将别名更改为其完整内容。
这警告不要使用别名来维护可维护性。使用完整版更安全、更便携。我只使用别名来快速使用命令行,但在编写脚本时我使用完整版本。
注意:如果某些行需要引用,上述解决方案可能会损坏 CSV。该解决方案只需遍历整个文件并将每个引号替换为''
. PowerShell 7为 提供了一个-UseQuotes AsNeeded
选项Export-Csv
,因此您可以研究一下。
推荐阅读
- docker - 如果 Docker 网络设置为内部,为什么我仍然可以 ping 主机?
- c# - C# SQL 日期范围
- python - 遍历excel文件列表;如果 excel 文件缺少 sheet_name 条件,如何跳过打开文件
- css - 在 vue 中将 tff 字体导入 css
- django - 以 django 脆皮形式自动完成
- c - 从 C 中的 const char 指针数组打印的垃圾字符串
- kotlin - Spring WebFlux 类型与 Kotlin toMono() 不匹配
- c++ - 转换矢量
向量 - delphi - 如何存储对变量的 TRttiMethod 引用?
- sql - 统计多种族学生人数,二进制(1,0),每个种族都有自己的列