
Estou tentando mudar o roteiro; em vez de adicionar uma linha file.txt
, quero fazer isso para todos *.txt
os arquivos dentro do diretório. Este script remove novas linhas e adiciona uma vírgula para separar.
Qualquer ajuda será apreciada.
@echo off
setlocal EnableDelayedExpansion
set "line="
for /F "delims=" %%a in (inputfile.txt) do set "line=!line!,%%a"
echo !line:~1!>>outputfile.txt
MEU arquivo de entrada que estou tentando usar é o csv abaixo 29/05/2019 08:03:48,TiltA,3.420,19.9,0.5017,0.6903 ,TiltC,3.420,19.9,0.5017,0.6903 2019-05-29 09:03:48,TiltD,3.420,19.9,0.3017,0.6903 2019-05-29 08:03:48,TiltE,3.420,19.9,0.5017,0 .6903
Responder1
Agradeço por ter esclarecido! Isso deve levá-lo na direção certa:
@echo off
set "dir=C:\Your\Directory"
set "dirs=C:\Your\Output\Folder"
setlocal enabledelayedexpansion
for /r "%dir%" %%A in (*.txt) do (
set "new=%%~nA"
if exist "%dirs%\!new!.txt" del /f /q "%dirs%\!new!.txt"
for /f %%B in (%%A) do (
echo|set /p="%%B,"
) >> "%dirs%\!new!.txt"
)
Eu recomendo fortemente ter uma pasta de saída diferente, a menos que você queira sobrescrever seus arquivos txt de origem - então foi isso que eu criei. O primeiro loop percorrerá todos os seus arquivos txt no diretório especificado ( for /r %dir%
) e definirá o nome de cada um deles como variável new
; imediatamente depois disso ele irá verificar a existência daquele new
arquivo txt em seu diretório de saída e excluí-lo - esta é uma etapa crucial porque temos que usar >>
para gerar todos os %%B
parâmetros em uma única linha, pois >
irá sobrescrever todas as entradas anteriores. Se você não excluir nenhum new
arquivo txt potencial criado a partir da execução anterior do script, as entradas na linha serão duplicadas. Depois de cuidar disso, temos um loop for aninhado que pega as informações do arquivo de texto e usa echo|set /p
para colocar cada um %%B
na mesma linha com um ,
. Com este script básico, haverá um rastro ,
do qual você pode ou não querer se livrar - caso contrário, acredito que isso realizará o que você está procurando.