como separar o arquivo de texto único em vários arquivos de texto por linhas usando o lote?

1

Eu executei o seguinte programa,

@echo off
cls
set /p "filename=type file name>"
setlocal enabledelayedexpansion
for /r E:\ %%a in (*) do if "%%~nxa"=="%filename%" (
echo %%~dpnxa >>path.txt
)

Eu tenho um arquivo de saída path.txt que contém,

E:\new.txt 
E:\Redmi\new folder\new.txt
E:\windows\new folder\new folder\new.txt

Eu gosto de tê-los em arquivos separados como

E:\new.txt em path1.txt

E:\Redmi\new folder\new.txt em path2.txt

E:\windows\new folder\new folder\new.txt em path3.txt

    
por Philip 29.11.2017 / 10:43

2 respostas

1

Como posso separar um único arquivo de texto em vários arquivos de texto por linhas?

Com base no comentário de Seth , você pode usar o seguinte arquivo em lotes:

@echo off
cls
setlocal enabledelayedexpansion
set /p "filename=type file name>"
rem initialise counter to 1
set _count=1
for /r E:\ %%a in (*) do if "%%~nxa"=="%filename%" (
  echo %%~dpnxa >>path!_count!.txt
  rem increment the counter
  set /a _count+=1
  )
endlocal

Notas:

  • Mudei a linha setlocal para impedir que a variável filename vazasse para a chamada cmd shell.

Leitura Adicional

por 29.11.2017 / 13:02
1

Eu tenho uma solução muito mais simples e provavelmente mais rápida para você:

  • Use DIR /S /B /A-D em vez de FOR /R para obter a lista de caminhos. Isso elimina a necessidade de uma instrução IF .
  • Pipe até FINDSTR /N , correspondendo no início de uma linha, para obter o número da linha para uso no nome do arquivo de saída.
  • Execute a coisa inteira em FOR /F para iterar e analisar os resultados no número da linha e no caminho de cada linha.
@echo off
setlocal
set /p "filename=type file name>"
for /f "delims=: tokens=1*" %%A in (
  'dir /s /b /a-d "E:\%filename%" ^| findstr /n "^"'
) do >"path%%A.txt" echo %%B

Se fosse meu script, passaria o nome do arquivo de destino como um argumento em vez de solicitar:

@echo off
for /f "delims=: tokens=1*" %%A in (
  'dir /s /b /a-d "E:\%~1" ^| findstr /n "^"'
) do >"path%%A.txt" echo %%B
    
por 29.11.2017 / 17:25