我需要替换文件名中的方括号,并且我已成功创建(并在控制台上验证) a -replace
. 现在我正在尝试到Move-Item
一个新目录,因为Powershell 2.0 中的这个错误阻止我进行简单的文件重命名。
这是我的脚本:
$txtPath = "c:\users\xxxxxx\desktop\cgc\tx" #source files
$txtPath2 = "c:\users\xxxxxx\desktop\cgc\tx2" #renamed files
Get-ChildItem $txtPath | foreach {
Move-Item -literalpath C:\users\xxxxxx\desktop\test001 ($_.Name -replace '\{|}','_')
}
发生了什么事:我正在使用该$txtPath2
变量,但一直收到“无法绑定到空目录”错误,因此我明确地对路径进行了编码,以查看变量的解析方式是否有些奇怪。现在,我收到此错误:
Move-Item : Cannot move item because the item at 'C:\users\xxxxxx\desktop\test001' does not exist.
At C:\users\xxxxxx\desktop\cgc\rni.ps1:5 char:10
+ Move-Item <<<< -literalpath C:\users\xxxxxx\desktop\test001 ($_.Name -replace '\{|}','_')
+ CategoryInfo : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand
奇怪的是:我创建了新目录。我运行脚本,当脚本失败时,看着它从我的桌面消失。怎么回事?我已退出并重新启动控制台应用程序以刷新所有变量。我已经尝试了不同风格的变量和常量Move-Item
。除非Move-Item
我缺少一个参数,否则我真的不知道发生了什么。有没有其他人看到任何会导致我的文件被删除的东西?
编辑:编辑后
Get-ChildItem $txtPath | % { [system.io.file]::Move($_.fullname, ($i.FullName -replace '\[|\]', '') ) }
我收到一个新错误:
Exception calling "Move" with "2" argument(s): "Empty file name is not legal.
Parameter name: destFileName"
At C:\users\x46332\desktop\cgc\rni.ps1:6 char:52
+ Get-ChildItem $txtPath | % { [system.io.file]::Move <<<< ($_.fullname, ($i.FullName -replace '\[|\]', '') ) }
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException