为什么Powershell的Move-Item会删除目标目录?



我需要替换文件名中的方括号,并且我已经成功创建(并在控制台上验证)了一个-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 '[|]', '') ) }

相关内容

  • 没有找到相关文章

最新更新