首页 > 解决方案 > 使用 PowerShell 将文件夹的所有文件作为参数传递给命令行程序

问题描述

我正在尝试为安全文件传输工具创建文件夹的文件列表。这就是我所做的:

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"

标签: powershellvariablesget-childitemcsv-import

解决方案


要将特定文件夹的所有子文件夹的文件路径作为单独的参数传递给命令行程序,只需传递

(Get-ChildItem -File).FullName

到程序。例子:

$files = (Get-ChildItem C:\MyFolder -File).FullName

# Expected: myprogram.exe -arg1 -arg2 C:\MyFolder\file1.txt C:\MyFolder\file2.txt ...
myprogram.exe -arg1 -arg2 $files

推荐阅读