powershell - 使用 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"
解决方案
要将特定文件夹的所有子文件夹的文件路径作为单独的参数传递给命令行程序,只需传递
(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
推荐阅读
- flutter - Flutter 嵌套滚动和 PullRefresh
- excel - 如何自动将数据发送到非特定工作表
- r - 如何通过改变值来选择每组的行?
- python - 如何在 Python 中可视化随机森林模型?
- javascript - Javascript 日期字符串中“-”和“/”之间的区别
- android - 通过在具有目标 SDK 29 的 Android 10 上启用旧版外部存储,究竟选择退出范围存储
- javascript - 将类对象共享到另一个套接字仅共享对象并导致找不到函数
- docusignapi - Docusign API - 如何减少 API 生成签名 URL 的时间?
- python - soup.find 在云功能中不起作用
- python - Vscode 自动完成功能不适用于 Jupyter Notebook