在为文件名文本添加双引号时,我很想知道我在哪里出错了。以下代码在-whatif框架下可以正常工作,但不能没有。
$a = "20`" board"
get-childitem | rename-item -newname {$_.fullname -replace "20 board", $a } -whatif
get-childitem | rename-item -newname {$_.fullname -replace "20 board","20`" board" } -whatif
期望的结果是将20 board
替换为20" board
。
以上代码段给我一个rename-item : Illegal characters in path.
错误。
答案 0 :(得分:3)
在Windows中,您不能在文件或文件夹名称中使用某些字符; 双引号就是其中之一。
在https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file上了解更多信息。
该页面的摘录:
The following reserved characters [are not allowed]:
< (less than)
(greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
答案 1 :(得分:1)
ArcSet's helpful answer包含关键指针:"
字符不能在Windows的文件和文件夹名称中使用。
所需功能有-次优-逼近:您可以使用非ASCII 双引号,在视觉上相似。 em>-但请注意,以后您需要使用精确的引号引用该文件(除非您使用通配符将其匹配),因此非常相似的视觉外观可能导致混淆。
'hi' > "20`“ board" # works, because “ is not a regular double quote
“
是Unicode character U+201C
, the LEFT DOUBLE QUOTATION MARK。
请注意,PowerShell将常规双引号和“
视为可互换,这就是为什么您仍然需要在常规双引号字符串内`
-转义“
的原因。