在C#中提取文件夹中的所有gz文件

时间:2012-05-22 07:40:59

标签: c# batch-file gz

我正在处理一个应用程序,需要在文件夹中提取gz文件。

我需要的是一个c#脚本,它可以循环给定文件夹中的所有gz文件并将它们提取到同一个文件夹中。

我知道这里有一些库,但我无法让它们为gz工作,我让它们为zip工作。

或者,如果有相同的其他解决方案,即可以创建可以使用WinRar命令行实用程序实现相同的批处理脚本。如果可能,我不知道一个想法。

注意:我想我必须删除第二个选项 - WinRar命令只能处理RAR文件。

由于

4 个答案:

答案 0 :(得分:1)

使用winrar的“unrar”命令行免费软件将其作为批处理文件:

@REM ------- BEGIN demo.cmd ----------------
@setlocal
@echo off
set path="C:\Program Files\WinRAR\";%path%
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i"
goto :eof

:do_extract
echo %1
mkdir %~1.extracted
pushd %~1.extracted
unrar e %1
popd

REM ------- END demo.cmd ------------------

礼貌:http://www.respower.com/page_tutorial_unrar

答案 1 :(得分:1)

我解决了。感谢MichelZ展示了前进的方向。我得到了7-zip命令行版本来完成这个技巧。

@REM ------- BEGIN demo.cmd ----------------
@setlocal
@echo off
set path="C:\Program Files\7-Zip\";%path%
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i"
for /F %%i in ('dir /s/b *.zip') do call :do_extract "%%i"
goto :eof

:do_extract
pushd %~dp1
7z e %1 -y
popd
REM ------- END demo.cmd ------------------

答案 2 :(得分:0)

我可以建议如下:

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {

        try
        {
            var files = from file in Directory.EnumerateFiles(@"c:\something",
                            "*.gz", SearchOption.AllDirectories)
                        select new
                        {
                            File = file,
                        };

            foreach (var f in files)
            {
                Process.Start("c:\winrar.exe", f.File);
            }
            Console.WriteLine("{0} files found and extracted!", 
                files.Count().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}
  

注意:请自行替换路径和winrar.exe参数   纠正一个。

答案 3 :(得分:-1)

@setlocal
@echo off
set path="C:\Program Files\WinRAR\";%path%
for /F %%i in ('dir /s/b *.gz') do call :do_extract "%%i"
goto :eof

:do_extract
echo %1
mkdir %~1.extracted
pushd %~1.extracted
Winrar e %1
popd