我需要替换文件名中的方括号,并且我已经成功创建(并在控制台上验证)了一个-replace
。现在我正在尝试Move-Item
到一个新目录,因为 Powershell 2.0 中的此错误阻止我执行简单的文件重命名。
这是我的脚本:
$txtPath = "c:usersxxxxxxdesktopcgctx" #source files
$txtPath2 = "c:usersxxxxxxdesktopcgctx2" #renamed files
Get-ChildItem $txtPath | foreach {
Move-Item -literalpath C:usersxxxxxxdesktoptest001 ($_.Name -replace '{|}','_')
}
事情是这样的:我正在使用$txtPath2
变量,但不断收到"无法绑定到 null 目录"错误,所以我显式编码到路径以查看变量解析方式是否有奇怪之处。现在,我收到此错误:
Move-Item : Cannot move item because the item at 'C:usersxxxxxxdesktoptest001' does not exist.
At C:usersxxxxxxdesktopcgcrni.ps1:5 char:10
+ Move-Item <<<< -literalpath C:usersxxxxxxdesktoptest001 ($_.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:usersx46332desktopcgcrni.ps1:6 char:52
+ Get-ChildItem $txtPath | % { [system.io.file]::Move <<<< ($_.fullname, ($i.FullName -replace '[|]', '') ) }
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
将$_.Name
的修改版本设置为目标(第二个参数)。"名称"只是一个项目的文件名,所以我猜你的test001
文件/文件夹被移动到你运行脚本的地方,并重命名为任何$_.Name
(它使用名称作为相对路径)。因此,如果您从 c:windowssystem32
(PS 以管理员身份运行时的默认文件夹)运行此脚本,请将其移动到那里。
下次在 foreach
-循环中,test001
已被移动并返回错误。 -LiteralPath
是源位置,而不是目标位置。
尝试:
Get-ChildItem $txtPath | % { [system.io.file]::Move($_.fullname, ($_.FullName -replace '[|]', '') ) }