读取批处理脚本中以空格分隔的单词

时间:2013-10-01 09:37:06

标签: batch-file

我需要在批处理脚本中逐字逐句阅读文本文件的内容。这些单词是空格分隔的。我尝试了这个,但它不起作用,只需要第一个字:

for /f "delims= " %%i in (%OUTPUT_FILE%) do echo %%i

我也试过这个,但也不行:

for /f "tokens=* delims= " %%i in (%OUTPUT_FILE%) do echo %%i

3 个答案:

答案 0 :(得分:5)

for /f "delims=" %%a in (file.txt) do for %%b in (%%a) do echo %%b

分隔符:空格,制表符,0xFF,, ; =

答案 1 :(得分:0)

标记控制从可用的分隔符拆分的元素。因此,根据您的总体目标,可能值得追求令牌来检索所需的变量。如果您知道文本文件的每一行中有多少元素,例如每行上的配置文件或键值对,您可以利用'tokens ='来获得所需的内容。

for /f "tokens=1,2 delims= " %%a in (%OUTPUT_FILE) do echo %%a %%b

如果每行的项目未知,那么线环内的Endoro的单词循环绝对是可行的方法。

答案 2 :(得分:0)

这是一个纯批处理解决方案,应该能够处理文件中的任何内容。它使用外部FOR / F读取每一行,并用换行符替换每个空格。它用内部FOR / F读取每个结果行(单词)。

@echo off
setlocal disableDelayedExpansion

:: Define LF to contain a newline character
set LF=^


:: Above 2 blank lines are critical - DO NOT REMOVE

for /f "eol= tokens=*" %%A in (%OUTPUT_FILE%) do (
  set "ln=%%A"
  setlocal enableDelayedExpansion
  for %%L in ("!LF!") do for /f "eol= " %%W in ("!ln: =%%~L!") do echo %%W
  endlocal
)

如果使用执行正则表达式搜索的hybrid JScript/batch utility called REPL.BAT并在stdin上替换并将结果写入stdout,则生活会简单得多。

假设REPL.BAT位于您当前的文件夹中,或者更好,位于PATH中的某个位置:

for /f "eol= " %%W in ('repl " " "\n" x ^<%OUTPUT_FILE%') do echo %%W