我正在使用.NET Core编写跨平台应用程序。我的应用程序的输入是多个文件路径。类似于以下内容:
dotnet myApp.dll file1.txt file2.txt C:\Data\anotherFile.txt
为简单起见,我希望用户能够使用通配符指定输入文件。例如:
dotnet myApp.dll ./*.txt C:\Data\anotherFile.txt
当我在Windows(PowerShell)上执行上述命令时,myApp
收到的参数为:
./*.txt
anotherFile.txt
但是当我在Mac(终端)上运行该应用程序时,收到的参数myApp
是:
file1.txt
file2.txt
anotherFile.txt
换句话说,通配符在Mac Terminal上展开,但在Windows PowerShell上不展开。
对于跨平台友好方法中解决此问题的最佳实践有何想法?
一些细节:
我使用Microsoft.Extensions.CommandLineUtils
进行命令行参数解析;
要获取通过通配符指定的文件名,我使用Directory.GetFiles(Path.GetDirectoryName(input), Path.GetFileName(input))
,其中input
是通配符路径(例如./*.txt
);
我有一个 hacky 解决方案,类似于the snippet on this question;但我不喜欢它,因为它使我向应用程序中引入了平台特定的代码(我希望.NET Core可以为我处理):(a)在终端上扩展了通配符char时,和(b)当在PowerShell上未扩展通配符char时。