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