Powershell v4.0"长路径"用法

时间:2018-02-28 14:54:35

标签: windows powershell path powershell-v4.0 compression

当你有一个像file.zip这样的简单拉链时,如何处理这种情况,但你内部的文件长度超过微软允许的260个字符(实际上它的数量稍微少一点,但确实如此在我们的情况下无所谓)?

如果您从某个来源(例如Google)获取一个文件,例如 400 个字符。

如何通过Windows中的PowerShell正确解压缩(最好是7 - > powershell 4.x)?

你可以通过一些解压缩工具来实现,并使用unicode路径技巧(\\?\),如:

unzip test.zip -d \\?\c:\<path>

我想通过powershell脚本(版本4.x)执行相同的操作。

以下是我的脚本(受其他人启发),通常有效。

# .NET Framework 4.5 required (at least PowerShell -Version 2)

Add-Type -AssemblyName System.IO.Compression.FileSystem # -ErrorAction Stop

$source_zip_file= 'C:\<path>\file.zip'
$destination_directory = 'c:\t\unpack'

# Does NOT support long path!!! with 
# $destination_directory = '\\?\c:\t\unpack'

$overwrite_destination = $true

$archive = [IO.Compression.ZipFile]::OpenRead($source_zip_file)

foreach ($entry in $archive.entries) {

    # better than Join-Path when spaces are present
    $entry_file_path = [System.IO.Path]::Combine($destination_directory, $entry.FullName)

    $entry_directory = [System.IO.Path]::GetDirectoryName($entry_file_path)

     # create destination directory if not present
     If (!(Test-Path $entry_directory)) {
          New-Item -ItemType Directory -Path $entry_directory | Out-Null
     }

    [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $entry_file_path, $overwrite_destination)

}

如何将其展开以使用长路径\\?\c:

修改 - 示例文件

https://anonfile.com/p94fG6d7b7/1.zip

生成错误消息:

  

异常调用&#34; GetDirectoryName&#34;用&#34; 1&#34;参数:&#34; The   指定的路径,文件名或两者都太长。完全合格   文件名必须少于260个字符,以及目录名称   必须少于248个字符。&#34;

由于评论

编辑

我意识到这不是一件容易的事,而且.NET的支持很可怕。

我的想法是,就像嘿,脚本专家那样!通过Windows API博客Weekend Scripter: Remove a Long Path File

0 个答案:

没有答案