Некоторое время назад я спросил о синтаксисе перенаправления пакетных скриптов и получил хороший ответ. Я чаще использовал метод круглых скобок ()
для 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
» без проблемы?