Move-Item:磁盘上没有足够的空间

时间:2017-08-21 21:16:50

标签: powershell

我需要使用PowerShell将文件从一个目录移动到同一个硬盘上的另一个目录。我需要做的硬盘几乎总是在空间的限制。我的问题是当我尝试使用cmdlet Move-Item时,我收到错误消息“磁盘上没有足够的空间。”。但是,在Windows资源管理器上使用 Ctrl + X Ctrl + 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 : There is not enough space on the disk.
At C:\script\test2.ps1:66 char:76
+ ... e -Force  | Move-Item -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
Powershell version:
PS C:\script> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.15063.502
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.502
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

2 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题,但问题是你为该文件夹中的较大文件留下了多少空间。对结果进行排序,先显示最大值,然后查看是否有足够的空间存放两个最大文件的副本。你可能在那里没有房间了。您可能没有足够的空间来复制最大的文件。如果你这样做,那么尝试在foreach管道之后封装move命令。也许直接管道就是让它尝试在删除它们之前先移动所有文件。

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

如果你没有房间,那么你有足够的RAM用于最大的文件。如果是这样,那么您将需要在每个文件的foreach循环中获得想象,将文件名保存到变量(如果在旧文件夹路径中有子文件夹,则将路径替换为目标的相对路径)。 对于每个文件,您需要以编码" byte"来读取它。然后删除原始文件(希望您有备份)。 现在用编码" byte"写文件到目的地的文件。

你在这里做的是使用你的记忆来保存文件,同时删除原件以留出空间,然后将其写回新位置。

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

答案 1 :(得分:0)

只需使用cmd.exe move命令。

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