【问题标题】:Move-Item : There is not enough space on the diskMove-Item : 磁盘空间不足
【发布时间】:2018-01-30 00:46:42
【问题描述】:

我需要使用 PowerShell 将文件从一个目录移动到同一硬盘驱动器上的另一个目录。我需要做的硬盘驱动器几乎总是在空间的限制。我的问题是当我尝试使用 cmdlet Move-Item 时,我收到错误消息“磁盘空间不足。”。但是,当在 Windows 资源管理器上使用 Ctrl+XCtrl+V 时,它可以正常工作。如果我释放硬盘空间,我还可以使用命令Move-Item

所以,我想知道是否有人可以指导找到使用 PowerShell 来“剪切”和“粘贴”文件的解决方案,该解决方案不需要更多磁盘空间来执行命令?

Get-ChildItem -Path "\\10.72.100.203\Pending\$ticket*" -Recurse -Force |
    Move-Item -Destination "\\10.72.100.203\Completed"

结果:

Move-Item:磁盘空间不足。 在 C:\script\test2.ps1:66 char:76 + ... e -Force |移动项目 -Destination "\\10.72.100.203\Completed" -Force ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : WriteError: (\\10.72.100.203...Mark 0718-3.VHD:FileInfo) [Move-Item], + FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand 电源外壳版本: PS C:\脚本> $PSVersionTable 名称 值 ---- ----- PS版本 5.1.15063.502 PSEdition 桌面版 PSCompatibleVersions {1.0、2.0、3.0、4.0...} 构建版本 10.0.15063.502 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 序列化版本 1.1.0.1

【问题讨论】:

  • 使用 move.exe 命令怎么样? move "\\10.72.100.203\Pending\$ticket*" "\\10.72.100.203\Completed"
  • @lit 这在 PowerShell 中不起作用,因为 MoveMove-Item cmdlet 的别名,现在对他来说是失败的。也许使用[System.Io.FileInfo].MoveTo() 方法或其他东西。试试Get-ChildItem -Path "\\10.72.100.203\Pending\$ticket*" -Recurse -Force | ForEach{$_.MoveTo("\\10.72.100.203\Completed\$($_.Name)"}
  • @TheMadTechnician - 我想知道 OP 的系统是否有更多问题。这对我有用。甚至 Move-Item 也适合我。我能够在只有 42 GiB 空闲空间的系统上移动 45 GiB 文件。
  • 正在使用哪个版本的 PowerShell? $PSVersionTable请将输出复制并粘贴到问题中。

标签: powershell


【解决方案1】:

有很多方法可以解决这个问题,但问题是您为该文件夹中的较大文件留下了多少空间。对显示最大的结果进行排序,看看是否有足够的空间来复制两个最大的文件。你那里的空间可能已经用完了。您可能没有足够的空间来复制最大的文件。如果这样做,请尝试在 foreach 中封装管道之后的移动命令。也许直接通过管道使其尝试在删除所有文件之前先移动所有文件。

...| foreach{Move-Item $_ -Destination "your destination folder"}

如果您没有空间,那么您是否有足够的内存来存储最大的文件。如果是这样,那么您将需要在每个文件的 foreach 循环中花哨,您需要将文件名保存到变量中(如果旧文件夹路径中有子文件夹,则将路径替换为目标的相对路径)。 对于每个文件,您需要将其作为编码“字节”读取。然后您删除原始文件(希望您有备份)。 现在使用编码“字节”将文件写入带有文件名的目标。

您在这里所做的是使用内存来保存文件,同时删除原始文件以腾出空间,然后将其写回新位置。

就个人而言,我认为我会使用另一个系统上的空间来临时将文件移动到那里以保留原件被删除,然后将其移动到它应该去的地方。如果您的空间太紧,我会考虑将它们存放在其他地方,直到获得更多空间为止。

【讨论】:

    【解决方案2】:

    只需使用 cmd.exe move 命令即可。

    & cmd.exe /C MOVE \\10.72.100.203\Pending\$ticket*" "\\10.72.100.203\Completed"
    

    【讨论】:

    • 不幸的是,我收到与此命令相同的消息错误,“磁盘上没有足够的空间。”。
    猜你喜欢
    • 2016-06-08
    • 2013-10-09
    • 2015-12-04
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2019-05-06
    相关资源
    最近更新 更多