Некоторое время назад я спросил о синтаксисе перенаправления пакетных скриптов и получил хороший ответ. Я чаще использовал метод круглых скобок () для echo в пакетных сценариях и перенаправления в файлы и т.д.
Я столкнулся с нечетным вопросом , где он появляется слово Where не сможет быть echo «d , как это слово в буквальном смысле , и кажется , это интерпретируется как Where имя команды вызывается вместо этого.
Чтобы упростить этот пример, я перевел логику сценария к гораздо более простой версии, но логика PowerShell, являющаяся echo , могла бы быть намного более сложной, чем эта.
Пример скрипта
@ECHO ON
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
ошибка
INFO: Could not find files for the given pattern(s).
Что я сделал
Я немного решил эту проблему, провел небольшое исследование и не смог найти простой ответ. Так как я не задавал много вопросов по SuperUser, я подумал, что это будет хороший вопрос.
В частности, я попытался установить переменную в качестве строкового значения Where (то есть SET w=Where), а затем в заключенных в скобках командах echo я ссылался на эту переменную (т.е. %w%) вместо слова Where но результат все та же ошибка.
Я также немного поиграл с SETLOCAL ENABLEDELAYEDEXPANSION но это не имело никакого значения.
@ECHO ON
SET w=Where
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| %w% {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
Обходной путь
Я просто не используя скобки метод echo - ING слово Where , и я только что с использованием прилагаемой >> перенаправляет к методу файла на каждый echo «d линии по отдельности , where Ничего страшного в этом маленьком примере, но больше для большого сценария.
@ECHO ON
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}>> Outfile.txt
PAUSE
Коррелированные вопросы
Hmmmmm ......
Что является причиной этого и что именно происходит, когда это происходит?
Есть ли способ разрешить использование слова (или строки) «
Where» без проблемы?

