powershell - 将 Powershell 输出通过管道传输到文本文件
问题描述
我有以下 powershell 脚本,它使用顺序文件名将文件从一个位置重命名到另一个位置。最终,这些文件更改需要被映射,就像原始的 - 新的一样。目前,我只有一个 Write-Host cmdlet,我只是将 cmd windows 输出复制到一个 txt 文件中,然后运行我编写的 python 脚本,将原始文件和重命名文件吐出到一个 excel 文件中。我想知道在初始 ps 脚本中是否有更简单的方法来执行此操作。即使是制表符分隔的内容也可以轻松复制粘贴到 Excel 文件中。
Set-Location -Path "C:\Users\mmcintyre\Desktop\grail_new"
$destLoc = "C:\Users\mmcintyre\Desktop\renamed"
$countRef = [ref] 0
Get-ChildItem -Filter *.pdf -Recurse |
Copy-Item -WhatIf -Destination { '{0}\{1}.pdf' -f $destLoc,++$countRef.Value }
任何帮助将不胜感激。
编辑:我目前使用的是 PS 2.0。
解决方案
除了复制操作(PSv3+语法)之外,以下将旧名称/新名称对输出到 TSV 文件:
$countRef = [ref] 0
Get-ChildItem -Filter *.pdf -Recurse | ForEach-Object {
$newFullName = '{0}\{1}.pdf' -f $destLoc, ++$countRef.Value
Copy-Item -WhatIf -LiteralPath $_.FullName -Destination $newFullName
[pscustomobject] @{
Old = $_.FullName
New = $newFullName
}
} | Export-Csv -Delimiter "`t" NameMappings.tsv
这将创建一个 TSV(制表符分隔值)文件,其中包含名为的列Old
,并New
分别包含旧的和新的完整文件名。
PSv2:[pscustomobject] @{ ... }
从哈希表创建自定义对象的语法糖在 v2 中不可用,因此New-Object
必须使用:
$countRef = [ref] 0
Get-ChildItem -Filter *.pdf -Recurse | ForEach-Object {
$newFullName = '{0}\{1}.pdf' -f $destLoc, ++$countRef.Value
Copy-Item -WhatIf -LiteralPath $_.FullName -Destination $newFullName
New-Object PSCustomObject -Property @{
Old = $_.FullName
New = $newFullName
}
} | Export-Csv -Delimiter "`t" NameMappings.tsv
警告:-Property
接受一个哈希表[1]
,这意味着它的键顺序不能保证,因此结果对象的属性顺序通常不会反映输入顺序——在这种情况下,它只是碰巧这样做了。
如果生成的属性顺序不受欢迎,您有两种选择:
缓慢但方便:
Select-Object
以所需顺序插入具有属性的调用(例如,Select-Object Old, New
)。比较麻烦:先构造一个空的对象
New-Object PSCustomObject
,然后通过单独的Add-Member
调用,按照想要的顺序一个一个地附加属性。
[1] PSv3+[pscustomobject] @{ ... }
语法似乎也是基于哈希表的,但它的解析方式保留了键顺序;即,好像您已隐式使用[ordered] @{ ... }
.
推荐阅读
- openacc - OPENACC 如何在#pragma acc 例程中处理库函数
- c++ - C++中的工厂方法模式和数据抽象
- javascript - 当我们使用 if(err) 进行猫鼬查询时,为什么 if 语句中没有条件?
- python - 如何在 Windows 10 操作系统的 python 3.8.3 中完美处理图像?
- themes - Bigcartel, Neat theme, removing grid on the slider
- excel - 使用vba在Excel中对具有特定背景颜色的范围内的行进行排序
- validation - 在 Flutter 中,如何在表单之外(即在提交按钮下方)输出 TextFormField 验证器文本?
- arrays - Find total number of ways possible to create an array of size M
- java - Spring Data: fetching full entity from multiple data source with spring jpa
- haskell - 函数式编程中的代数结构是什么?