Como fazer algo para cada arquivo em um diretório com um script em lotes
-
05-07-2019 - |
Pergunta
Como você iterar sobre cada arquivo em um diretório com um .bat ou .cmd?
Para simplificar forneça uma resposta que apenas ecos o nome do arquivo ou caminho de arquivo.
Solução
uso de linha de comando:
for /f %f in ('dir /b c:\') do echo %f
uso do arquivo de lote:
for /f %%f in ('dir /b c:\') do echo %%f
Atualizar : se o diretório contém arquivos com espaço nos nomes, você precisa mudar o delimitador do comando for /f
está usando. por exemplo, você pode usar o caractere pipe.
for /f "delims=|" %%f in ('dir /b c:\') do echo %%f
Update 2 : (rápida de um ano e meio após a resposta original :-)) Se o próprio nome do diretório tem um espaço no nome, você pode usar a opção usebackq
na for
:
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f
E se você precisa usar o redirecionamento de saída ou a tubulação de comando, use o caractere de escape (^
):
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
Outras dicas
Como alternativa, use:
forfiles /s /m *.png /c "cmd /c echo @path"
O comando forfiles está disponível no Windows Vista e para cima.
O método mais fácil:
na linha de comando, use:
for %f in (*.*) do echo %f
A partir de um arquivo de lote (dobrar os sinais% por cento):
for %%f in (*.*) do echo %%f
A partir de um arquivo em lotes com a pasta especificada como 1º parâmetro:
for %%f in (%1\*.*) do echo %%f
Use
for /r path %%var in (*.*) do some_command %%var
com:
- caminho de ser o caminho inicial.
- %% sendo var algum identificador.
- *. * Sendo um filemask ou o conteúdo de uma variável.
- algum_comando sendo o comando a ser executado com o caminho e var concatenados como parâmetros.
Outra forma:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
Eu tive algum malware que marcou todos os arquivos em um diretório como oculto / system / readonly. Se alguém encontra-se nesta situação, cd para o diretório e executar for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f
.