
Я пытаюсь изменить скрипт; вместо добавления строки в file.txt
, я хочу сделать это для всех *.txt
файлов внутри каталога. Этот скрипт удаляет новые строки и добавляет запятую для разделения.
Любая помощь приветствуется.
@echo off
setlocal EnableDelayedExpansion
set "line="
for /F "delims=" %%a in (inputfile.txt) do set "line=!line!,%%a"
echo !line:~1!>>outputfile.txt
МОЙ входной файл, который я пытаюсь использовать, это CSV ниже 2019-05-29 08:03:48,TiltA,3.420,19.9,0.5017,0.6903 2019-05-29 09:03:48,TiltB,3.420,19.9,0.3017,0.6903 2019-05-29 08:03:48,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
решение1
Спасибо за разъяснение! Это должно направить вас в правильном направлении:
@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"
)
Я настоятельно рекомендую иметь другую выходную папку, если вы не хотите перезаписывать исходные txt-файлы — вот что я придумал. Первый цикл пройдет по всем вашим txt-файлам в указанном каталоге ( for /r %dir%
) и установит имя каждого из них как переменную new
; сразу после этого он проверит наличие этого new
txt-файла в вашем выходном каталоге и удалит его — это важный шаг, потому что нам нужно использовать >>
для вывода всех %%B
параметров в одной строке, так как >
заменит все предыдущие записи. Если вы не удалите ни одного потенциального new
txt-файла, созданного при предыдущем запуске скрипта, он продублирует записи в строке. После этого у нас есть вложенный цикл for, который берет информацию из текстового файла и использует echo|set /p
для размещения каждого %%B
на той же строке с ,
. С этим базовым скриптом будет хвостик, ,
от которого вы можете захотеть избавиться или нет — в противном случае, я считаю, что это достигнет того, что вы ищете.