Basta usar o Powershell, que é pré-instalado no Windows 7.
O Powershell é capaz de executar comandos cmd e entende curingas em qualquer lugar em um caminho.
Para iniciar o Powershell, basta digitar "powershell" na caixa de pesquisa do menu Iniciar e teclar enter.
Caso o aplicativo espere uma string com todos os nomes de arquivo, este é o script correto:
$delimiter = " "
[string]$files = $nothing ; ls *.txt | % { $files += $_.fullname + $delimiter } ; application.exe $files
Altere $delimiter = " "
para $delimiter = ","
se seu aplicativo espera uma lista separada por vírgulas de nomes de arquivos.
Explicação do código:
-
[string]$files = $nothing
- cria uma variável vazia do tipo string
-
;
- é um separador para vários comandos, não um pipeline!
-
ls *.txt | % { $files += $_.fullname + $delimiter }
- obtém uma lista de todos os arquivos de texto e cria uma string com todos os nomes de arquivos separados pelo delimitador
-
application.exe $files
- chama o aplicativo e passa a lista de arquivos para ele
Você pode até procurar um padrão de arquivo recursivamente, adicionando -recurse
a ls *.txt
, então o código completo ficaria assim:
$delimiter = " "
[string]$files = $nothing ; ls *.txt -recurse | % { $files += $_.fullname + $delimiter } ; application.exe $files
Editar:
Para evitar irritações, ls
e dir
são aliases de Get-ChildItem
e %
é um alias para ForEach-Object
. Eu mantenho meu código com aliases usados porque é mais curto.
EDIT 2018/04/25:
Em 2012, fui relativamente novo no PowerShell. É claro que existe uma maneira mais fácil, embora não seja tão fácil quanto a capacidade de expansão glob do unix / linux:
app.exe $(ls *.txt | % {$_.FullName})
Explicação:
- $ () avaliará a expressão dentro dela primeiro e será substituído por ela
com a saída dessa expressão (muito parecido com os backticks no bash)
-
ls *.txt
obtém objetos FileInfo de todos os arquivos que correspondem ao glob
%código%
- porque o PowerShell é orientado a objetos, temos que produzir
nome completo de cada objeto FileInfo. Simplesmente nomeando um atributo / propriedade
no PowerShell, o exibe por padrão.
*.txt
faz isso para nós. % { $_.FileName }
faz um loop sobre todos os elementos retornados por %
e produz cada objeto FileName.