我正在开发一个应用程序,需要在文件夹中提取 gz 文件。
我需要的是 ac# 脚本,它可以循环给定文件夹中的所有 gz 文件并将它们提取到同一个文件夹中。
我知道有一些库可以做到这一点,但我无法让它们为 gz 工作,但我让它们为 zip 工作。
或者如果有任何其他相同的解决方案,即是否可以创建批处理脚本,可以使用 WinRar 命令行实用程序来实现相同的目的。如果可能的话,我不知道只是一个想法。
注意:我想我必须放弃第二个选项——WinRar 命令只能处理 RAR 文件。
谢谢
我正在开发一个应用程序,需要在文件夹中提取 gz 文件。
我需要的是 ac# 脚本,它可以循环给定文件夹中的所有 gz 文件并将它们提取到同一个文件夹中。
我知道有一些库可以做到这一点,但我无法让它们为 gz 工作,但我让它们为 zip 工作。
或者如果有任何其他相同的解决方案,即是否可以创建批处理脚本,可以使用 WinRar 命令行实用程序来实现相同的目的。如果可能的话,我不知道只是一个想法。
注意:我想我必须放弃第二个选项——WinRar 命令只能处理 RAR 文件。
谢谢
使用 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 ------------------
我可以建议如下:
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 参数替换为正确的。
我解决了。感谢 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 ------------------
@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