Algum tempo atrás, perguntei sobre Sintaxe de redirecionamento de script em lote e recebi uma resposta legal. Eu usei o método ()
parêntese com mais freqüência para echo
em scripts em lote e redirecionar para arquivos, etc.
Eu me deparei com um problema estranho em que parece que a palavra Where
não pode ser echo
d como essa palavra literalmente e parece que é interpretada como a Where
sendo chamado em seu lugar.
Para simplificar este exemplo, simplifiquei a lógica do script para uma versão muito mais simples, mas a lógica PowerShell sendo echo
'd poderia ser muito mais complexa do que isso .
Exemplo de script
@ECHO ON
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
Erro
INFO: Could not find files for the given pattern(s).
O que eu fiz
Eu tentei isso um pouco e fiz uma pesquisa rápida e não consegui encontrar uma resposta simples. Como não fiz muitas perguntas sobre o SuperUser , imaginei que esse seria um bom potencial.
Uma coisa em particular que tentei era definir uma variável como um valor de string Where
(ou seja, SET w=Where
) e, em seguida, nos comandos echo
entre parênteses que referenciei essa variável (ou seja, %w%
) no lugar do palavra Where
, mas o resultado ainda é o mesmo erro.
Eu também joguei um pouco com SETLOCAL ENABLEDELAYEDEXPANSION
, mas não fez diferença.
@ECHO ON
SET w=Where
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| %w% {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
A solução alternativa
Eu simplesmente não usei o método entre parênteses para echo
da palavra " Where
" e acabei de utilizar o redirecionamento >>
anexado ao método de arquivo em cada linha echo
'd individualmente onde " where
" está envolvido. Não é grande coisa para este pequeno exemplo, mas um grande negócio para um script maior.
@ECHO ON
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}>> Outfile.txt
PAUSE
Questões correlatas
Hmmmmm ......
-
O que está causando isso e o que exatamente está acontecendo quando isso ocorre?
-
Existe uma maneira de permitir que a palavra (ou string) " Where
" seja usada sem o problema?
Recursos