【发布时间】:2021-11-20 11:52:09
【问题描述】:
我正在尝试为安全文件传输工具创建文件夹的文件列表。我就是这样做的:
Get-ChildItem c:\files | % {$_.FullName} > c:\temp\list1.csv
$csv = Import-Csv C:\TEMP\list1.csv -Header Path
输出将每个文件保存在一个新行中,但我需要它在一行中。
需要的输出
"C:\files\Alpha" "C:\files\Beta" "C:\files\Gamma" "C:\files\Delta"
实际输出
C:\files\Alpha
C:\files\Beta
C:\files\Gamma
C:\files\Delta
csv 文件正是我首先想到的。包含上述格式的文件的变量就足够了。你有什么想法吗?
编辑:谢谢@Matthias R. Jessen 和@WaitingForGuacamole,你们给了我想要的东西。
(Get-ChildItem C:\scripts -File).ForEach({'"{0}"' -f $_.FullName.Replace('"','\"')}) -join " "
但是,不知何故,我的工具(用 java 编写)将输出解释为一个文件,而不是一行中的多个文件。 错误信息下方:
Java : Error: The file 'C:\files\Alpha C:\files\Beta C:\files\Delta C:\files\Gamma' was not found and is excluded from the transfer.
我知道,当使用属性文件而不是在 PowerShell 中手动输入命令时,我必须以不同的方式切换路径。 有没有办法让输出看起来像:
"C:\\files\Alpha" "C:\\files\Beta" "C:\\files\Gamma" "C:\\files\Delta"
【问题讨论】:
-
-join@(Get-ChildItem C:\files -File).ForEach({'"{0}"' -f $_.FullName.Replace('"','\"')}) -
Mathias - 我不得不说我真的很喜欢你的 Powershell 的优雅和紧凑。您在此处提供的示例完成了除了元素之间的空间之外的所有操作。我将它调整为:
(Get-ChildItem C:\scripts -File).ForEach({'"{0}"' -f $_.FullName.Replace('"','\"')}) -join " ",这样我就可以添加分隔符,它似乎可以工作 -
谢谢,我已经根据新的挑战更新了问题
-
嗨@SuperiorOven,欢迎来到StackOverflow!我建议您在最近的编辑之后也更改您的标题,以便它反映您实际要求的内容:“将文件夹的所有文件作为参数传递给命令行程序”。
标签: powershell variables get-childitem csv-import