Windows 命令 FOR /F 不起作用?

Windows 命令 FOR /F 不起作用?

我正在尝试在 Windows XP 的命令行中使用 FOR 命令。我有一个包含 3 行的文件 temp.txt:

temp1
temp2
temp3

我在提示符下输入以下命令:

for /F %p in (temp.txt) do echo Testing %p

什么都没有返回。如果我删除 /F 参数,则输出为Testing temp.txt

据我所知,我使用的命令与原先完全相同由 Microsoft 记录。我检查了我的注册表以确保命令扩展已打开,甚至还启动了一个新的 shell 以cmd /e:on确保万无一失。

我究竟做错了什么?

是的,我做错了什么。

文件 temp.txt 不是从头创建的,我只是对其进行了编辑以放入我的测试内容。不幸的是,当我第一次创建该文件时,我在前面用 UTF-8 标记保存了它。将文件重新创建为纯文本解决了这个问题。

答案1

我猜这是期望的结果:

H:\>for /F %p in (temp.txt) do echo Testing %p

H:\>echo Testing temp1
Testing temp1

H:\>echo Testing temp2
Testing temp2

H:\>echo Testing temp3
Testing temp3

如果是这样,您是否测试过其他批处理文件,或者是否重定向了输入/输出?如果您将此作为大型项目的一部分来执行,您是否可能已将分隔符或跳过参数更改为 FOR 命令?您的 temp.txt 文件前面是否有不可打印的字符?我已经让它在几台不同的计算机上运行,​​包括一台 2k3 Server Std. box...我不禁想到您的输入文件有问题,或者在您不知情的情况下设置了默认值。

答案2

不要使用 进行测试echo,它只是按原样获取集合中的名称(即使文件不存在),请尝试类似以下操作type

for %p in (temp.txt) do type %p

这将向您显示 shell“看到”的内容。(请注意,使用不存在的文件时,/F 会抱怨找不到该文件,但也许您周围有多个 temp.txt?)

答案3

正确的做法是这样的:

for %%a in (temp1 temp2 temp3) do (
  echo Testing %%a
  for /f %%b in (%%a) do echo %%b
)

或者你可以这样做:

for /l %%n in (1,1,3) do (
  for %%a in (temp%%n) do (
    echo Testing %%a
    for /f %%b in (%%a) do echo %%b
  )
)

另一种变体是:

for %%a in (*.txt) do (
  echo Testing %%a
  for /f %%b in (%%a) do echo %%b
)

ETC...

如果文件名中有空格,则必须使用“usebackq”和“FOR/F”,并将文件名括在双引号中,如下所示:

...
for /f "usebackq" %%b in ("%%a") do echo %%b
...

答案4

我花了好几个小时才搞定这个问题。你需要用“type temp.txt”替换 temp.txt:

for /F %p in ('type temp.txt') do echo Testing %p

相关内容