只需使用Windows 7上预装的Powershell,Powershell就能运行cmd命令,并且可以理解路径中任何位置的通配符。
要启动Powershell,只需在开始菜单搜索框中键入“ powershell”,然后按Enter。
如果应用程序期望其中包含所有文件名的字符串,那么这是正确的脚本:
$delimiter = " "
[string]$files = $nothing ; ls *.txt | % { $files += $_.fullname + $delimiter } ; application.exe $files
如果您的应用程序需要逗号分隔的文件名列表,请更改$delimiter = " "
为$delimiter = ","
。
代码说明:
[string]$files = $nothing
-创建一个类型为空的变量 string
;
-是多个命令的分隔符,而不是管道!
ls *.txt | % { $files += $_.fullname + $delimiter }
-获取所有文本文件的列表,并创建一个字符串,其中所有文件名都由定界符分隔
application.exe $files
-调用应用程序并将文件列表传递给它
您甚至可以通过添加-recurse
来递归搜索文件模式,ls *.txt
因此完整的代码应如下所示:
$delimiter = " "
[string]$files = $nothing ; ls *.txt -recurse | % { $files += $_.fullname + $delimiter } ; application.exe $files
编辑:
为了避免刺激,ls
并且dir
是别名Get-ChildItem
和%
是它的别名ForEach-Object
。我保留使用别名的代码,因为它更短。
编辑2018/04/25:
早在2012年,我就对PowerShell相当陌生。当然,有一种更简单的方法,尽管它不像unix / linux的glob扩展功能那么简单:
app.exe $(ls *.txt | % {$_.FullName})
说明:
- $()将首先计算表达式内部的内容,并将其替换为该表达式的输出(就像反引号在bash中一样)
ls *.txt
获取与全局匹配的所有文件的FileInfo对象
*.txt
- 因为PowerShell是面向对象的,所以我们必须输出每个FileInfo对象的全名。默认情况下,只需在PowerShell中命名属性即可。
% { $_.FileName }
为我们做到了。%
循环遍历返回的所有元素ls
并输出每个对象FileName。