O comando do Windows FOR / F não está funcionando?

0

Estou tentando usar o comando FOR na linha de comando do Windows XP. Eu tenho um arquivo temp.txt com 3 linhas:

temp1
temp2
temp3

Estou digitando o seguinte comando no prompt:

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

Nada volta. Se eu remover o parâmetro / F, a saída será Testing temp.txt .

Tanto quanto eu posso determinar, estou usando o comando exatamente como ele é documentado pela Microsoft . Verifiquei meu registro para ter certeza de que as Extensões de Comando estão ativadas e até mesmo iniciei um novo shell com cmd /e:on para ter a certeza absoluta.

O que estou fazendo de errado?

Sim, eu estava fazendo algo errado.

O arquivo temp.txt não foi criado do zero, eu apenas o editei para colocar no meu conteúdo de teste. Infelizmente, quando criei o arquivo pela primeira vez, salvei-o com um marcador UTF-8 na frente. Recriar o arquivo como texto simples resolveu o problema.

    
por Mark Ransom 22.12.2009 / 19:26

4 respostas

4

Suponho que este seja o resultado desejado:

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

Em caso afirmativo, você testou outros arquivos em lote ou redirecionou a entrada / saída? Se você estiver fazendo isso como parte de um projeto maior, você poderia ter alterado os delimitadores ou o parâmetro skip para o comando FOR? É possível que existam caracteres não imprimíveis na frente do seu arquivo temp.txt? Eu consegui isso para trabalhar em um par de computadores diferentes, incluindo um 2k3 Server Std. caixa ... Eu não posso ajudar, mas acho que há algum problema com o seu arquivo de entrada ou padrões sendo definidos sem o seu conhecimento.

    
por 22.12.2009 / 22:53
2

Em vez de testar com echo , que simplesmente pega os nomes no conjunto como está (mesmo que o arquivo não exista), tente algo como type :

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

Isso mostrará o que o shell "vê". (Note que / F com um arquivo inexistente irá reclamar sobre não encontrar o arquivo, mas talvez você tenha mais de um temp.txt por aí?)

    
por 22.12.2009 / 21:40
2

A abordagem correta é esta:

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

Ou você pode fazer isso:

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
  )
)

Outra variante é:

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

Etc ...

Se houver espaços nos nomes dos arquivos, você terá que usar 'usebackq' com 'FOR / F' e colocar os nomes dos arquivos entre aspas como esta:

...
for /f "usebackq" %%b in ("%%a") do echo %%b
...
    
por 02.10.2012 / 22:58
0

Eu gasto horas nisso. Você precisa substituir temp.txt com 'type temp.txt':

for /F %p in ('type temp.txt') do echo Testing %p
    
por 31.10.2014 / 13:24