Listar arquivos sem quebras de linha

1

Eu tenho um diretório com várias pastas neles. Eu quero cada pasta para criar um arquivo de texto que lista todos os arquivos nessa pasta. O formato para listar arquivos deve ficar assim:

"001.jpg" "002.jpg" "003.jpg" "004.jpg"

basicamente, deve listar arquivos sem quebras de linha. Como posso fazer isso usando o cmd no windows 7?

    
por Ruriko 09.02.2013 / 10:21

2 respostas

0

Você pode alcançar o resultado desejado usando apenas o shell CMD combinando forfiles , for e expansão de variável atrasada (consulte também: < a href="http://ss64.com/nt/cmd.html"> cmd ).

Etapas

  1. Crie um arquivo em lote (por exemplo, C:\jpglist.bat ) e salve as seguintes instruções:

    @echo off
    if %2 == FALSE exit
    cd /D %1
    for %%a in (*.jpg) do set list=!list! "%%a"
    echo %list:~1%> jpglist.txt
    
  2. Abra um prompt de comando.

  3. Executar

    forfiles /P PATH /S /C "cmd /V:on /C C:\jpglist.bat @path @isdir"
    

    onde PATH é o caminho completo do diretório principal.

  4. O arquivo em lote não é mais necessário. Exclua se você quiser.

Como funciona

O comando:

  • forfiles /P PATH /S /C "..." é recursivamente ( /S ) através de PATH e seus subdiretórios e executa ... para cada entrada de diretório.

  • cmd /V:on /C ... abre um novo shell com expansão de variável atrasada ativada ( /V:on ) e executa ... .

  • C:\jpglist.bat @path @isdir chama o arquivo em lote e passa o caminho completo da entrada como primeiro parâmetro.

    @isdir será TRUE se @path for um diretório; caso contrário, será FALSE .

O arquivo em lote:

  • if %2 == FALSE exit sai imediatamente se o primeiro argumento não for um diretório.

  • cd /D %1 muda para o diretório especificado no primeiro argumento ( /D ativa a troca de unidades caso seja necessário).

  • for %%a in (*.jpg) do set list=!list! "%%a" passa por todos os arquivos com uma extensão .jpg e adiciona seus nomes à variável lista .

    Usar !list! em vez de %list% atrasa a expansão da variável, ou seja, lista será expandida em cada iteração, em vez de apenas uma vez no início.

  • echo %list:~1%> jpglist.txt grava o conteúdo da variável list (exceto o primeiro caractere, que será um espaço inicial) em um arquivo chamado jpglist.txt no diretório atual.

por 09.02.2013 / 20:14
0
ForEach($_ In Get-ChildItem "C:\Folder\" -Recurse -Directory)
{
    ForEach($file In Get-ChildItem -File $_.FullName)
    {
        [System.IO.File]::AppendAllText("$($_.FullName)\crazyList.txt", "'"$($file.Name)'" ", [System.Text.Encoding]::Unicode)
    }
}

Isso gera um arquivo em cada pasta com um formato exatamente como você especificou, com aspas.

    
por 09.02.2013 / 17:40