不久前,我询问了Batch Script Redirection Syntax,并得到了很好的回答。我在批处理脚本中()更频繁地使用括号方法echo并重定向到文件等。
我遇到了一个奇怪的问题,它似乎Where无法将echo单词从字面上理解为该单词,而且它似乎Where被解释为正在调用的命令。
为了让这个例子简单,我将脚本逻辑简化为一个更简单的版本,但PowerShell逻辑echo可能比这复杂得多。
@ECHO ON
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
Run Code Online (Sandbox Code Playgroud)
错误
Run Code Online (Sandbox Code Playgroud)INFO: Could not find files for the given pattern(s).
我对此进行了一些故障排除并进行了一些快速研究,但找不到简单的答案。由于我没有问过很多关于SuperUser 的问题,我认为这可能是一个很好的问题。
我特别尝试的一件事是将变量设置为Where(ie SET w=Where)的字符串值,然后在括号中的echo命令中我引用了该变量 (ie %w%) 来代替单词,Where但结果仍然是相同的错误。
我也玩了一点,SETLOCAL ENABLEDELAYEDEXPANSION但没什么区别。
@ECHO ON
SET w=Where
(
ECHO [System.IO.DriveInfo]::GetDrives() ^| %w% {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
Run Code Online (Sandbox Code Playgroud)
我只是没有使用带括号的方法来echo输入单词“ Where”,我只是在涉及“ ”的>>每个echo'd 行上单独使用附加的重定向到文件方法where。对于这个小例子来说没什么大不了的,但是对于更大的脚本来说却是一件大事。
@ECHO ON
ECHO [System.IO.DriveInfo]::GetDrives() ^| Where {$_.Name -like "C:\"}>> Outfile.txt
PAUSE
Run Code Online (Sandbox Code Playgroud)
嗯嗯……
是什么导致了这种情况以及发生这种情况时究竟发生了什么?
有没有办法允许在Where没有问题的情况下使用单词(或字符串)“ ”?
你误判了这个问题——WHERE 与它无关。
您只需转义右括号即可:
@ECHO ON
(
ECHO [System.IO.DriveInfo]::GetDrives(^) ^| Where {$_.Name -like "C:\"}
)>> Outfile.txt
PAUSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |