Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用方括号重命名文件在Powershell中无法按预期工作_Powershell_Rename_File Rename - Fatal编程技术网

使用方括号重命名文件在Powershell中无法按预期工作

使用方括号重命名文件在Powershell中无法按预期工作,powershell,rename,file-rename,Powershell,Rename,File Rename,我在这个问题上工作了将近一周,我想我遗漏了一些明显的东西……我需要一双眼睛 首先,我研究了答案中提供的所有链接,并运行从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 $_

我在这个问题上工作了将近一周,我想我遗漏了一些明显的东西……我需要一双眼睛

首先,我研究了答案中提供的所有链接,并运行从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中的每个子项传递给函数,在该函数中,当文件移动并重新保存到新位置,\tx2时,方括号将更改为下划线

不幸的是,我遇到了以下错误:

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
表达式仅允许作为管道的第一个元素。
在C:\users\xxxxxx\desktop\cgc\rni.ps1:4 char:71

+Move Item-literalpath$txtPath2.Name$389;.Name.Replace(“]”|“[”,“389;”语法错误:

$_.Name.Replace ("]" | "[", "_")
这简直是胡说八道。通常它意味着“在
$\uName
上调用
替换
方法,并将以下内容的返回值作为参数:将字符串
']'
作为输入导入命令
'[','.''
”。但这里存在第一个问题:这不是命令,它是一个表达式,无法工作。然后问题是这是cmdlet的参数。这里应用特殊规则,它们通常说“将不在括号中的所有内容转换为字符串”。因此,甚至没有方法调用,您将获得方法声明作为新文件名,并传递另一个遭受上述问题影响的参数

如果我不得不猜测的话,我会认为你想用下划线代替方括号。如果是这样,那么使用以下命令:

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

您的语法错误:

$_.Name.Replace ("]" | "[", "_")
这简直是胡说八道。通常它意味着“在
$\uName
上调用
替换
方法,并将以下内容的返回值作为参数:将字符串
']'
作为输入导入命令
'[','.''
”。但这里存在第一个问题:这不是命令,它是一个表达式,无法工作。然后问题是这是cmdlet的参数。这里应用特殊规则,它们通常说“将不在括号中的所有内容转换为字符串”。因此,甚至没有方法调用,您将获得方法声明作为新文件名,并传递另一个遭受上述问题影响的参数

如果我不得不猜测的话,我会认为你想用下划线代替方括号。如果是这样,那么使用以下命令:

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

在反斜杠出错时尝试了反勾号…抓住稻草…现在,我的印象是,在引号中,我可以使用|作为OR…在我上面的例子中,寻找[OR]替换。您在第二个示例中使用了它。这表明双引号是我最大的问题;应该是单引号。我想的对吗?您混淆了字符串。replace()方法与Powershell-replace运算符。它们不一样。@Joey对于您的.replace命令:帮助我理解语法。我认为replace语法为(oldValue,newValue)。在?如果不是,PS是否只是将最后一个值作为前面任何字符串的新值进行解析?不,您不是。这里的引号实际上是不相关的(但并不总是如此–我只是在不需要双引号功能时倾向于使用单引号),但您没有引用
|
。它不在任何引号内,因此是语言语法的一部分。在这一点上,事情变得很奇怪。您可以使用正则表达式和
-replace
操作符,因此您可以在那里使用
|
(但在字符串内!).
string.Replace
虽然只替换文字字符串或字符,所以使用
也会有错误。@Joey-我到底为什么要调用表达式?即使是iex,在调试时也比简单地键入foo.ps1.或F3多了三次按键。:)当反斜杠出错时尝试反斜杠…抓住吸管。。。现在,我的印象是,在引用中,我可以使用|作为OR…在我上面的例子中,寻找[或]替代。你可以在第二个例子中使用它。因此,这表明双引号是我最大的问题;应该是单身。我想的对吗?你把string.replace()方法和Powershell-replace操作符搞混了。它们不一样。@Joey代表你的.Replace命令:帮助我理解语法。我认为替换语法为(oldValue,newValue)。你是不是错过了一个派对?如果不是,PS是否只是将最后一个值解析为前面任何字符串的新值?不,不是。这里的引号实际上是不相关的(虽然并不总是如此——我只是在不需要双引号功能时倾向于使用单引号),但您没有引用
。它不在任何引号内,因此是语言语法的一部分。事情在那一点上变得很奇怪。您可以将正则表达式与
-replace
操作符一起使用,因此您可以在那里使用
|
(但在字符串内!)
string.Replace
虽然只替换文字字符串或字符,所以使用
|
也会有错误。@Joey-我到底为什么要调用表达式?甚至iex也比简单地键入foo.ps1多了三次击键。或者在调试时使用F3。:)