如何使用批处理将单个文本文件按行分成多个文本文件?

如何使用批处理将单个文本文件按行分成多个文本文件?

我已经运行以下程序,

@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.txtpath1.txt

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

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

答案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泄漏到调用cmdshell 中。

进一步阅读

答案2

我有一个更简单,可能更快的解决方案给你:

  • 使用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

相关内容