PS 脚本正在导出空的 CSV

2024-03-10

我花了很长时间试图理解为什么这个脚本没有按预期工作。这是一个简单的脚本,我尝试在其中导入 CSV,选择我想要的几列,然后导出 CSV 并复制自身。 (基本上,我们已经存档了数据,由于内存大小限制,我只需要从另一个项目中获取几列)。这个脚本非常简单,显然与它不起作用时所造成的挫败感成反比关系...现在的最终结果是我最终得到一个空的 csv,而不是仅包含我选择的列的 csv与选择对象。

$RootPath = "D:\SomeFolder"

$csvFilePaths = Get-ChildItem $RootPath -Recurse -Include *.csv | 
    ForEach-Object{
        Import-CSV $_ |
        Select-Object Test_Name, Test_DataName, Device_Model, Device_FW, Data_Avg_ms, Data_StdDev | 
        Export-Csv $_.FullName -NoType -Force
}

除非你将输入文件读入内存完整的,预先的,您无法安全地读取和写回给定管道中的同一文件。

Specifically, a command such as Import-Csv file.csv | ... | Export-Csv file.csv will erase the content of file.csv.[1]

最简单的解决方案是将读取输入文件的命令括起来(...),但请注意:

  • The 文件的内容(转化为物体)必须作为一个整体融入记忆.

  • 有一个轻微的数据丢失风险如果在所有(已转换的)对象写回文件之前管道被中断。

应用于您的命令:

$RootPath = "D:\SomeFolder"

Get-ChildItem $RootPath -Recurse -Include *.csv -OutVariable csvFiles | 
    ForEach-Object{
        (Import-CSV $_.FullName) | # NOTE THE (...)
          Select-Object Test_Name, Test_DataName, Device_Model, Device_FW, 
                        Data_Avg_ms, Data_StdDev | 
            Export-Csv $_.FullName -NoType -Force
}

请注意,我已经使用过-OutVariable csvFiles为了收集输出变量中的 CSV 文件信息对象$csvFiles。您尝试通过以下方式收集文件路径$csvFilePaths = ...不起作用,因为它试图收集Export-Csv's输出,但是Export-Csv不产生输出。

另外,为了安全起见,我改变了Import-Csv论证来自$_ to $_.FullName为了保证Import-Csv找到输入文件(因为,遗憾的是,文件信息对象$_被绑定为string, which 有时扩展到仅仅是文件名).


A 更安全的解决方案将会是首先输出到临时文件,并且(仅)在成功完成后替换原始文件。

无论采用哪种方法,替换文件都将具有默认的文件属性和权限;如果原始文件具有要保留的特殊属性和/或权限,则必须显式重新创建它们。


[1] Note that in other contexts (on Windows) you may simply get an error that doesn't result in the input file's content getting erased; e.g., the following pipeline: Get-Content file.txt | ForEach-Object { "[$_]" } | Set-Content file.txt reports error The process cannot access the file '...\file.txt' because it is being used by another process, without erasing the content of file.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PS 脚本正在导出空的 CSV 的相关文章

随机推荐

  • 为什么 ViewController 内的 tableView 的 reloadData 显示错误?

    我在视图控制器中有一个 tableView 但是 reloadData 不适用于 tableView Xcode 显示错误 thread1 exc bad instruction 我尝试将 reloadData 分配给其他方法 但结果是相同
  • JavaScript 中的 Number.sign()

    想知道是否有任何重要的方法可以找到数字的符号 符号函数 http en wikipedia org wiki Signum function 可能比明显的解决方案更短 更快 更优雅 var sign number gt 0 1 number
  • 如何使用Phonegap 3.0浏览并选择SD卡中的文件?

    通过Phonegap 3 0的API 当我使用 UI 单击链接或按钮时 我想浏览 SD 卡中的文件 例如 p Upload p 假设 browserFile 函数包含浏览功能 但需要 UI 实现 Or
  • 使用 AngularJS 指令嵌入 Vimeo 视频

    我在 AngularJS 应用程序中有一个部分 HTML 页面 我正在尝试向其中添加 vimeo 视频 该模板有一个图像和播放按钮 单击时会淡出以显示底层 iFrame 我还想要这个点击触发器来播放视频 这样就不必按两个播放按钮 我的部分页
  • 如何使用新值填充对象列表

    抱歉 我很好 菜鸟 我有一个项目类 class item ind Int freq Int gap Int 我有一个有序的整数列表 val listVar a toList 其中 a 是一个数组 我想要一个称为指标的项目列表 其中 ind
  • iOS7上如何设置NSString的背景cornerRadius

    我想在iOS7上设置NSString的背景cornerRadius 但是 NSString 没有层 请告诉我 如何在iOS7上设置NSString的背景cornerRadius example 您可以使用UITextView其子类为NSLa
  • Laravel 5 中 all() 和 toArray() 之间的区别

    当我管理需要转换为数组的集合时 我通常使用toArray 但我也可以使用all 我不知道这两个功能的区别 有人知道吗 如果它是 Eloquent 模型的集合 模型也会被转换为数组toArray col gt toArray 总之 它将返回
  • 如何在 python nltk 中获取 n-gram 搭配和关联?

    In 本文档 http nltk googlecode com svn trunk doc howto collocations html 有一个例子使用nltk collocations BigramAssocMeasures Bigra
  • 使用公共子字符串连接两个字符串?

    说我有弦 string1 Hello how are you string2 are you doing now 结果应该是这样的 Hello how are you doing now 我正在考虑使用不同的方式re和字符串搜索 最长公共子
  • 从每 n 行复制单元格

    我想从每个人的名字中获取名字这个谷歌电子表格 https docs google com spreadsheets d 1S3AyaWjES1Go NxFYryIDlo0humlvzU4 fbiwNIWwo0 edit usp sharin
  • 使用 Node 的 Google API 批量请求

    我注意到 Google 最近从他们的 Node 客户端删除了批量请求 https github com google google api nodejs client blob 0db674b7d3a04cf65e223f876cf7b3f
  • 使用专用网络从 Google Compute Engine 访问 Google Cloud SQL

    是否可以使用专用网络从 Google Compute Engine 访问 Google Cloud SQL Google Cloud SQL 似乎看到了 Google Compute Engine 实例的公共网络 IP 并且 Web 控制台
  • 在 React JS 中使用颜色控制时的警告

    我将 React JS 与 Babel 和 Webpack 一起使用 一切都与我的其他脚本 甚至使用颜色模块的脚本 一起正常工作 但是 我的脚本之一给了我以下错误 指定的值 不符合要求的格式 这 格式为 rrggbb 其中 rr gg bb
  • 无法更新 Xamarin for Visual Studio

    我最近不得不重新安装我的电脑 我重新安装了VS2015 Community 然后我从 www xamarin com download 安装了 Xamarin 每当我打开 Visual Studio 时都会收到以下通知 尽管当我点击它时什么
  • remove() 方法太慢

    我在读取内存痕迹时遇到问题 我已阅读它并将页面及其参考保存在地图上 地图结构 Map
  • 排序比较计数器

    我有这段代码 可以对填充有随机数的数组进行排序 并计算完成排序所需的数字比较 我正在使用排序方法选择冒泡和合并排序 我有选择和气泡的计数器 但没有合并的计数器 我不知道把它放在哪里 这可能是一个简单的答案 但我就是无法让它发挥作用 Code
  • 使用 Winforms 应用程序部署 SQL Server 数据库

    我创建了一个基于 SQL DB 的 winforms 应用程序 我想将其部署在客户端计算机上 该程序是单用户桌面应用程序 意见于this https stackoverflow com questions 1813241 how to de
  • GitHub 从之前的提交中分叉了一个存储库

    我在 GitHub 上找到了一个存储库 我想分叉 但不是当前版本 我想分叉该存储库 因为它有相当多的提交回来 这可能吗 该存储库尚未标记任何版本 因此我不确定如何执行此操作 显然 我可以复制该提交中的代码 但我更愿意分叉 因为这样我就可以将
  • HBase 上的 Thrift 有性能基准吗?

    我有一个可以将大量数据写入 hbase 的系统 系统是用c 编写的 发现hbase有其他语言的thrift接口 我的问题是 HBase 上的 Thrift 有性能基准吗 与java原生api相比 最劣势是什么 我推荐最近关于这个主题的两篇博
  • PS 脚本正在导出空的 CSV

    我花了很长时间试图理解为什么这个脚本没有按预期工作 这是一个简单的脚本 我尝试在其中导入 CSV 选择我想要的几列 然后导出 CSV 并复制自身 基本上 我们已经存档了数据 由于内存大小限制 我只需要从另一个项目中获取几列 这个脚本非常简单