无法在 powershell 中传输的日志文件

无法在 powershell 中传输的日志文件

当我将一个文件夹递归复制到另一个位置时,我尝试记录一些无法传输的文件。当我右键单击、复制并粘贴文件夹时,我收到一些文件的错误消息“您指定的文件名无效或太长”。

然后我尝试使用 PowerShell 记录无法传输的文件名,但收到消息“Copy-Item:文件名、目录名或卷标语法不正确”。

这是我正在使用的 PowerShell 脚本:

$skippedFiles = @()
   
$items = Get-ChildItem -Path $sourcePath -Recurse

    foreach ($item in $items) {
         $destinationItemPath = Join-Path $destinationPath $item.FullName.Substring($sourcePath.Length + 1)
         if (Test-Path $destinationItemPath) {
              $skippedFiles += "Destination file already exists: $($item.FullName)"
              } elseif ($item.Name.Length -gt 255) {
                   $skippedFiles += "File name too long: $($item.FullName)"
              } else {
                   Copy-Item -Path $item.FullName -Destination $destinationItemPath -ErrorAction SilentlyContinue
              }
    }

$skippedFiles | Out-File -FilePath $logFilePath

答案1

这并不能完全回答你的问题,但可以展示一些方法解决长文件名。

  • 如果复制到支持长文件名的文件系统(如 NTFS),启用长文件名/路径:在 Regedit 中,导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]并创建或编辑 Value DWORD LongPathsEnabled,将其设置为 1。
  • 如果要将文件复制到的文件系统才不是支持长文件名,例如 FAT,使用8.3格式复制。. 例如,对于文件ALongFilename.txt,使用xcopy /N *.txt .\destfldr

另请参阅此答案长文件路径。 尤其,Robocopy作为 Windows 操作系统的一部分,将记录任何错误。

相关内容