lote comando para armazenar um nome de pasta em um arquivo em uma única linha

1

Eu tenho uma lista de pastas em um diretório, eu preciso copiar apenas todo o nome da pasta para um arquivo e o arquivo deve estar em uma única linha separada por delims. pode me ajudar com isso em um arquivo de lote.

Obrigado

    
por vset 15.09.2012 / 17:39

2 respostas

1

Em lote, você faria assim:

@echo off

setlocal EnableDelayedExpansion

for /D %%f in (*.*) do set n=!n!;%%f

if defined n echo %n:~1% > list.txt

endlocal

Para recursar em subpastas, substitua /D por /R e *.* por . .

for /R %%f in (.) do set n=!n!;%%f

Ao adicionar qualificadores à variável de loop, você pode especificar se deseja apenas o nome da pasta ( %%~nxf ) ou o caminho completo ( %%~dpnxf ).

    
por 15.09.2012 / 20:11
0

Não há um comando de arquivo em lote único que faça o que você deseja, mas você pode usar um arquivo em lotes para realizar a tarefa e call do seu próprio. A resposta de Ansgar Wiechers teve a idéia básica correta (vejo que ele corrigiu sua versão depois que eu postei a minha).

De qualquer forma, aqui está uma versão que produzirá uma lista delimitada por ponto-e-vírgula de subpastas de primeiro nível no diretório atual ou uma passada para ele como um argumento. Eu escolhi usar um delimitador ponto-e-vírgula em vez de, digamos, uma vírgula, porque ele nunca poderia ser um nome de arquivo válido (e vírgulas podem ser, embora seja incomum).

Se um dado nome de pasta contiver espaços, ele deve ser citado assim (caso contrário, o caminho do diretório da pasta é opcional):

subdirs "C:\Documents and Settings"

Observe que ele só imprime a lista no console (stdout), portanto, se você quiser salvá-la em um arquivo, precisará acrescentar um > filename.ext após o nome do arquivo de script (e qualquer nome de pasta) para redirecionar o arquivo. saída em arquivo de sua escolha:

subdirs C:\Windows > dirlist.txt

== subdirs.bat ==

@echo off
setlocal EnableDelayedExpansion
pushd %1
for /D %%d in (*.*) do set n=!n!;%%d
if defined n echo %n:~1%
popd
endlocal

Se você quiser produzir o caminho completo para cada nome de pasta, poderá alterar a set n=!n!;%%d para set n=!n!;%%~fd na linha de loop for .

    
por 15.09.2012 / 21:52

Tags