我已经在这个问题上工作了一个星期,并且认为我错过了一些明显的东西......我需要几双眼睛。
从this question开始,我研究了答案中提供的所有链接,并且我正在运行以下脚本,从MS Connect中收集:
$txtPath = "c:\users\xxxxxx\desktop\cgc\tx"
$txtPath2 = "c:\users\xxxxxx\desktop\cgc\tx2"
get-childitem $txtPath | foreach {
Move-Item -literalpath $txtPath2.Name $_.Name.Replace ("]" | "[", "_")
}
两条路径都存在。 * \ tx包含35 * .txt文件,其中一些在名称中带有方括号,有些没有。 * \ tx2当前为空,等待脚本输出文件。
如果我正确地写了我的第三个陈述,我将每个孩子从\ tx传递到将方括号更改为下划线的功能,因为文件被移动并重新保存到新位置\ t \ t \ t2x2。
不幸的是,我收到了这个错误:
Expressions are only allowed as the first element of a pipeline.
At C:\users\xxxxxx\desktop\cgc\rni.ps1:4 char:71
+ Move-Item -literalpath $txtPath2.Name $_.Name.Replace ("]" | "[", "_" <<<< )
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
如果我正确地解释错误,有些东西会阻止关闭paren被识别。括号中是否需要某种转义字符?我尝试在引号内使用反引号转义和反斜杠转义,但这导致了同样的错误。
随着引号之外的转义,我收到了这个错误。
The term '\]' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.
At C:\users\xxxxxx\desktop\cgc\rni.ps1:4 char:61
+ Move-Item -literalpath $txtPath2.Name $_.Name.Replace (\"]" <<<< | \"[", "_")
+ CategoryInfo : ObjectNotFound: (\]:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我错过了什么?
答案 0 :(得分:3)
你的语法错误了:
$_.Name.Replace ("]" | "[", "_")
只是胡说八道。通常它意味着“使用以下参数作为参数调用Replace
上的$_.Name
方法:将字符串']'
作为输入传递给命令'[', '_'
“。但这里存在的第一个问题是:这不是命令,它是一种表达方式而且不起作用。然后问题是这是 cmdlet 的参数。这里适用特殊规则,它们通常会说“将所有不在括号中的字符串转换为字符串”。所以甚至没有方法调用,你将方法声明作为新的文件名,并传递另一个遭受上述问题的参数。
如果我不得不猜测我想你想用下划线代替方括号。如果是,请使用以下内容:
Move-Item -literalpath $txtPath2.Name ($_.Name -replace '\[|]', '_')