批处理将一行文本拆分为多行,由引号空间引号分隔

时间:2015-08-26 17:53:55

标签: regex windows batch-file cmd

先谢谢。

使用DOS批处理文件,我试图读取一个文本文件,其中包含几个带引号的完整路径,用空格分隔并写入每行包含一个路径的新文件。

例如,我想要转换此文件:

"C:\path\filename.doc" "C:\path\filename.doc" "C:\path\filename.doc" "C:\path\filename.doc"

进入这个:

"C:\path\filename.doc"
"C:\path\filename.doc"
"C:\path\filename.doc"
"C:\path\filename.doc"

我使用精彩的repl.bat (by dbenham)取得了一些成功。

type "files.txt" | repl " " "\r\n" x l >"newfile.txt"

但是当文件名或路径中有空格时,它会在路径中间打破一条新线并破坏它。

我尝试使用转义字符^作为搜索变量传递给repl,即repl "^" ^""以及其他无欢乐的方式。

在一天结束时,我只需要将所有文件移动到另一个目录中,然后将生成的文本文件传递给另一个批量删除批处理文件进行处理,但也许有更好的方法即时通讯失踪?

1 个答案:

答案 0 :(得分:0)

您可以使用以下批处理文件split.bat并将其称为重定向文本文件的内容,并将输出重定向到另一个文件,如split.bat < files.txt > newfiles.txt

@echo off
set /P INFILE=
call :SPLIT %INFILE%
exit /B

:SPLIT
shift
if "%~0"=="" exit /B
echo "%~0"
goto :SPLIT

如果您未提供输入文件(< files.txt),脚本会提示您输入以空格分隔的列表。
如果没有给出输出文件(> newfiles.txt),则屏幕上会显示创建的以行分隔的新列表。

请注意,这不会验证您的输入文件是否符合所描述的格式。

此方法仅限于1021字节的列表长度(字符),之后的所有内容都将被截断!