Obtendo uma lista de arquivos de um diretório específico

2

Muito obrigado pela ajuda, mas ...

Usando o comando de execução do Windows 7 x64 de um arquivo de lote em uma pasta específica

Eu uso muitos compressores de linha de comando paq8 / paq9 para fazer backup de meus arquivos. Desses, muitos não podem ler estruturas de diretório, portanto, nomes de arquivos individuais precisam ser colocados em uma sintaxe de linha única específica. Eu posso obter uma lista de arquivos de um arquivo de texto de um diretório específico, mas eles são naturalmente em singles. Eu preciso criar um arquivo de texto que dará o conteúdo, mas tudo em uma linha separada por um espaço. Meu lote está aqui:

dir /a /b /-p /o:gen >%USERPROFILE%\Desktop\file_list_full.txt

Eu quero colocar essa linha em um arquivo de lote na pasta ANY e apenas executá-la para criar uma lista de texto do conteúdo da pasta

Como exemplo, isso fornecerá:

Hello.exe

Help.txt

Big.png

sound.ogg

Eu preciso que seja:

Hello.exe Help.txt Big.png sound.ogg

Exemplo de estrutura de compactação paq e por que isso precisa ser feito, especialmente quando você pode ter algumas centenas de arquivos em uma pasta !!

paq9a a Archive.paq9a -8 -c feasting.exe Licença.txt INFO.txt data.win D3DX9_43.dll data.big dbr.ut

Como posso fazer isso?

Se eu deixar o arquivo de texto para criar como está. Existe uma maneira de substituir "new Line" por um "espaço" para obter o resultado desejado?

    
por Steve Robathan 27.05.2014 / 16:27

3 respostas

2

Acho que você pode querer uma saída em grande formato, Experimente /w

Esta opção é incompatível com /B , então use o findstr para filtrar títulos e resumos.

 C:> dir /a-d /w | findstr /B [a-zA-Z0-9]
 Big.png     Hello.exe   Help.txt    sound.ogg

Advertência: acima testado no Win7. Você parece ter um O / S diferente.

Se você tiver muitos requisitos exigentes, talvez seja necessário destacar o grande martelo. Eu gosto de Perl , mas sua milhagem pode variar.

C:> perl -e "print join ' ', glob('*')"
Big.png Hello.exe Help.txt sound.ogg
    
por 27.05.2014 / 16:45
0

dir / a / b / -p / o: gen >% USERPROFILE% \ Desktop \ arquivo_list_full.txt / w

para "grande"

Se você é hardcore sobre o espaço, ou seja, um verdadeiro valor ANSI / Ascii, eu enviaria o comando através do GSAR com um localizar / substituir.

Redefina o parâmetro da janela cmd padrão para um valor incomodo, como "9999", para todo o sistema ou para a instrução específica, e você obterá o retorno da linha longa sem encapsular.

Você deve responder se o espaço for absolutamente necessário e com o valor do código do caractere, é um detalhe importante e você pode compartilhar mais detalhes de onde você pretende reutilizar a saída, pois isso pode nos fornecer as informações necessárias.

    
por 27.05.2014 / 16:57
0

Uma alternativa à linha cmd 'pura' (que você pode achar útil se precisar de listas 'ad hoc'):
Win explorer permite soltar várias seleções em um aplicativo - em particular, arquivo em lotes.

Exemplo simples: crie um arquivo em lote com o seguinte conteúdo:

@echo off
echo %*
pause

abra a janela do explorador para que você a tenha visível e solte vários arquivos selecionados nela. Ele irá simplesmente listá-los (e pausar para que você possa ler), mas adicione redirecionamento e você terá sua lista salva no arquivo, ou substitua echo pelo seu comando compressor e ele será executado em uma lista.

update: para obter apenas nomes de arquivo

@echo off
setlocal

:loop
  if [%1]==[] goto end
  set arg=%arg% "%~nx1"
  shift
  goto loop

:end
echo %arg%
pause

Ainda limitado pelo tamanho máximo do cmd (8192), conforme descrito na minha resposta vinculada

    
por 28.05.2014 / 09:48