1

У меня запущена следующая программа,

@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 ответа2

1

У меня есть гораздо более простое и, возможно, более быстрое решение для вас:

  • Используйте 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
1

Как разделить один текстовый файл на несколько текстовых файлов по строкам?

Основываясь на комментарии Сета, вы можете использовать следующий пакетный файл:

@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 - устанавливает параметры для контроля видимости переменных среды в командном файле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .