0

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

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

我也试过这个但也不起作用:

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

3 回答 3

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

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

于 2013-10-01T10:54:56.430 回答
1

这是一个纯批处理解决方案,应该能够处理文件中的任何内容。它使用外部 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
)

如果您使用名为 REPL.BAT 的混合 JScript/批处理实用程序,该实用程序在标准输入上执行正则表达式搜索和替换并将结果写入标准输出,生活会简单得多。

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

for /f "eol= " %%W in ('repl " " "\n" x ^<%OUTPUT_FILE%') do echo(%%W
于 2013-10-01T16:32:55.970 回答
0

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

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

如果每行的项目是未知的,Endoro 在行循环内的单词循环绝对是要走的路。

于 2013-10-01T11:26:51.300 回答