Я пытаюсь использовать команду FOR в командной строке Windows XP. У меня есть файл temp.txt с 3 строками:

temp1
temp2
temp3

И я набираю следующую команду в командной строке:

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

Ничего не возвращается Если я удаляю параметр /F, вывод будет Testing temp.txt .

Насколько я могу определить, я использую команду именно так, как это задокументировано Microsoft. Я проверил свой реестр, чтобы убедиться, что командные расширения включены, и даже запустил новую оболочку с cmd /e:on чтобы быть вдвойне уверенным.

Что я делаю неправильно?

Да, я делал что-то не так.

Файл temp.txt не был создан с нуля, я просто отредактировал его, чтобы добавить в мой тестовый контент. К сожалению, когда я создал файл в первый раз, я сохранил его с маркером UTF-8 на передней панели. Воссоздание файла в виде простого текста решило проблему.

4 ответа4

4

Я предполагаю, что это желаемый результат:

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

Если да, то вы тестировали другие командные файлы или перенаправили ввод / вывод? Если вы делаете это как часть более крупного проекта, возможно, вы изменили разделители или параметр skip на команду FOR? Возможно ли, что в вашем файле temp.txt находятся непечатаемые символы? Я получил это для работы на нескольких разных компьютерах, в том числе 2k3 Server Std. коробка ...Я не могу не думать, что есть проблемы с вашим входным файлом или настройки по умолчанию без вашего ведома.

2

Правильный подход заключается в следующем:

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
)

Так далее...

Если в именах файлов есть пробелы, вам придется использовать 'usebackq' с 'FOR/F' и заключать имена файлов в двойные кавычки следующим образом:

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

Вместо тестирования с помощью echo , который просто принимает имена в наборе «как есть» (даже если файл не существует), попробуйте что-то вроде type:

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

Это покажет вам, что "видит" оболочка. (Обратите внимание, что /F с несуществующим файлом будет жаловаться на то, что он не найден, но, возможно, у вас есть более одного файла temp.txt?)

0

Я провел часы на этом. Вам нужно заменить temp.txt на «type temp.txt»:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .