我想将输入中的每个空格转换为新的行字符并保存到带有批处理文件窗口的文件(例如tmp.txt)。
输入:
http://www.example1.com wwwexample2com wwwexample3com wwwexample4com
在tmp.txt中输出:
http://www.example1.com
wwwexample2com
wwwexample3com
wwwexample4com
我该怎么做?
答案 0 :(得分:2)
如果输入是名为“input file.txt”的文件且网址包含“=”:
@echo off
setlocal enableDelayedExpansion
>"output file.txt" (for /f "usebackq delims=" %%a in ("input file.txt") do (
set line=%%a
call :listtokens "!line: =" "!"
))
pause & exit
:listtokens
if .%1==. (exit /b) else (echo %~1 & shift & goto listtokens)
如果输入是带有字母数字字的变量:
>"output file.txt" (for %%a in (%VARIABLE%) do echo %%a)
如果输入是名为“input file.txt”的文件,其中包含字母数字字词:
>"output file.txt" (for /f "usebackq delims=" %%a in ("input file.txt") do (
for %%b in (%%a) do echo %%b
))
如果是来自输出字母数字字的控制台实用程序:
>"output file.txt" (for /f "delims=" %%a in ('run some command') do (
for %%b in (%%a) do echo %%b
))
答案 1 :(得分:2)
以下纯批处理脚本会将每个空格分隔的“word”放在输出中的单独一行上。空行将被剥离。该脚本非常强大。只要每个源行都<8kb,它就应该处理任何ASCII文本。请注意,这不会将其他空白字符(如tab)转换为换行符。
@echo off
setlocal disableDelayedExpansion
>"input.txt.new" (
for /f "usebackq eol= tokens=* delims= " %%A in ("input.txt") do (
set "ln=%%A"
setlocal enableDelayedExpansion
echo(!ln: =^
!%= This line and the empty line above must remain exactly as written=%
endlocal
)
)
findstr . "input.txt.new" >"output.txt"
del "input.txt.new"
type output.txt
但是,我不会使用上述内容,因为我认为纯批处理会使文本操作变得过于复杂。
我会使用regular expression text processing utility called JREPL.BAT。它是纯脚本(混合JScript /批处理),可以在XP之后的任何Windows机器上本机运行。它比任何纯批量解决方案更简单,更快速,更稳健。该实用程序已被广泛记录,并且网上有许多正则表达式教程。
以下一个班轮将有效地将每个空格分隔的“单词”放在输出中的单独一行上。
jrepl "\S+" "$0" /jmatch /f "input.txt" /o "output.txt"
如果您真的想将每个空白字符转换为换行符,正如您在评论中所说,那么您可以使用以下内容。但我认为这不是你想要的。
jrepl "\s" "\n" /x /f "input.txt" /o "output.txt"