Eu tenho uma árvore de pastas, como esta (é apenas um exemplo, será mais profundo no meu caso real):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
Meus arquivos têm um ou mais espaços no nome e eu preciso executar um comando neles, por isso estou interessado em foo bar.txt, mas não em foobar.txt.
Eu tentei (dentro de um arquivo em lotes):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
onde o comando é simples echo
.
Não funciona porque o espaço foi ignorado e não recebo saída.
Isso funciona, mas não é o que eu preciso:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Imprime:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
Eu tentei usar as aspas ("), mas não funciona:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
Não funciona porque as aspas ainda estão incluídas na saída:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Sem a opção recursiva, você pode dizer
FOR
para não imprimir as aspas:Você pode conseguir
FOR
instruções aninhadas . O externo percorreria a árvore de diretórios e o interno seria o acima.fonte
FOR /R %%d in (.) DO for %%f ...
é recursivo, mas haveria algumas coisas para resolver para fazê-lo funcionar. Pode ser necessário usar a expansão atrasada, por exemplo.SETLOCAL ENABLEDELAYEDEXPANSION
e!varname!
etc.Você pode querer olhar para o comando forfiles.
'/ S' - Recursão. Pesquisar todos os subdiretórios
'/ M "* *"' - Máscara de arquivo. Procure apenas arquivos com um espaço em seu nome.
'/ C "cmd / C echo @PATH"' - comando. Emita este comando em todos os arquivos encontrados.
Exemplo de saída:
fonte
O sinalizador
f
é aquele que você precisa para obter um nome de arquivo absoluto sem aspas (para que você possa colocar aspas se precisar). Mas, como entra em conflito com o nome da variável que você escolhe, você deve usar outro:fonte
Obrigado, Dennis! Eu também estava trabalhando em um problema quase idêntico. Eu queria um arquivo bat que pudesse passar em uma entrada parm como uma sequência de pesquisa para nomes de arquivos - recursivamente através de diretórios. Caso isso seja útil para outra pessoa, aqui está.
fonte