Как разделить один текстовый файл на несколько текстовых файлов по строкам, используя пакет?
У меня запущена следующая программа,
@echo off
cls
set /p "filename=type file name>"
setlocal enabledelayedexpansion
for /r E:\ %%a in (*) do if "%%~nxa"=="%filename%" (
echo %%~dpnxa >>path.txt
)
У меня есть выходной файл path.txt
который содержит,
E:\new.txt
E:\Redmi\new folder\new.txt
E:\windows\new folder\new folder\new.txt
Мне нравится иметь их в отдельных файлах, как,
E:\new.txt
в path1.txt
E:\Redmi\new folder\new.txt
в path2.txt
E:\windows\new folder\new folder\new.txt
в path3.txt
2 ответа
Решение
Как я могу разделить один текстовый файл на несколько текстовых файлов по строкам?
Основываясь на комментарии Seth, вы можете использовать следующий пакетный файл:
@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
Заметки:
- Я переехал
setlocal
линия, чтобы остановить переменнуюfilename
просачивается в призваниеcmd
ракушка.
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD
- Категоризованный список команд Windows CMD
- enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время разбора.
- endlocal - завершить локализацию изменений среды в командном файле. Передача переменных из одного пакетного файла в другой.
- for / r - перебирать файлы (подпапки Recurse).
- set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
- setlocal - устанавливает параметры для контроля видимости переменных среды в командном файле.
У меня есть гораздо более простое и, возможно, более быстрое решение для вас:
- использование
DIR /S /B /A-D
вместоFOR /R
чтобы получить список путей. Это устраняет необходимостьIF
заявление. - Труба в
FINDSTR /N
сопоставляя начало строки, чтобы получить номер строки для использования в имени выходного файла. - Выполнить всю вещь в течение
FOR /F
итерировать и анализировать результаты в номер строки и путь каждой строки.
@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
Если бы это был мой скрипт, я бы передал целевое имя файла в качестве аргумента, а не запрашивал его:
@echo off
for /f "delims=: tokens=1*" %%A in (
'dir /s /b /a-d "E:\%~1" ^| findstr /n "^"'
) do >"path%%A.txt" echo %%B