如果我在一个文件夹中有 10 个 *.csv 文件,我想创建一个输出文件为 D:\10.txt
我无法正确使用语法,这是我的最后一次尝试:(Get-ChildItem 'D:\Data\' -File -Include *.csv).Count | Out-File -filepath "D:\test$($_).txt"
我更喜欢 oneliner,因为另一个系统必须调用它。
有人可以帮我吗?非常感谢 !
最佳答案
自动$_
变量 - 表示管道每个步骤中的当前输入对象 - 只能用于作为脚本 block 的参数 ( { ... }
),不能用于可扩展字符串 ( "..."
)。
每个输入对象的脚本 block 最常与 ForEach-Object
一起使用。 cmdlet,但您也可以将其用作 delay-bind script-block parameter带有管道绑定(bind)参数。
虽然这不适用于 Out-File
, 它与 Set-Content
,这通常是与字符串一起使用的正确工具:
(Get-ChildItem D:\Data -File -Filter *.csv).Count |
Set-Content -LiteralPath { "D:\test$_.txt" }
请注意,我已替换
-Include
与 -Filter
,不仅效率更高,而且避免了-Include
的陷阱仅适用于输入目录路径,不适用于其中的项目 - 见 this GitHub issue .警告 : 在 Windows PowerShell 中 - 但幸运的是不再在 PowerShell Core 中,现在一直使用(BOM-less)UTF-8 -
Out-File
和 Set-Content
默认情况下使用不同的字符编码:UTF-16LE(“Unicode”)与系统的事件 ANSI 代码页(“默认”);使用 -Encoding
参数以根据需要指定所需的编码。
关于powershell 计算文件夹中的文件并创建带有文件名结果的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423633/