使用方括号重命名文件在Powershell中无法正常工作

时间:2013-01-30 14:25:58

标签: powershell rename file-rename

我已经在这个问题上工作了一个星期,并且认为我错过了一些明显的东西......我需要几双眼睛。

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

我错过了什么?

1 个答案:

答案 0 :(得分:3)

你的语法错误了:

$_.Name.Replace ("]" | "[", "_")

只是胡说八道。通常它意味着“使用以下参数作为参数调用Replace上的$_.Name方法:将字符串']'作为输入传递给命令'[', '_'。但这里存在的第一个问题是:这不是命令,它是一种表达方式而且不起作用。然后问题是这是 cmdlet 的参数。这里适用特殊规则,它们通常会说“将所有不在括号中的字符串转换为字符串”。所以甚至没有方法调用,你将方法声明作为新的文件名,并传递另一个遭受上述问题的参数。

如果我不得不猜测我想你想用下划线代替方括号。如果是,请使用以下内容:

Move-Item -literalpath $txtPath2.Name ($_.Name -replace '\[|]', '_')