我在 Windows 中具有以下文件夹结构:
C:\test
|
\----1
| |
| \----one.rar
|
\----2
| |
| \----two.rar
|
\----3
| |
| \----three.rar
|
\----4
| |
| \----four.rar
|
\----5
|
\----five.rar
里面C:\test
有五个不同的文件夹。每个文件夹都包含一个 rar 文件。我想通过命令行提取所有文件。
所以我的方法如下:使用文件夹rar.exe
内的参数运行C:\test
:
rar x -r *
这给了我所有文件被提取到的结果是C:\test
:
C:\test
|
\----1 (folder)
\----2 (folder)
\----3 (folder)
\----4 (folder)
\----5 (folder)
\----1.txt
\----2.txt
\----3.txt
\----4.txt
\----5.txt
但我希望每个文件都提取到与其关联的 rar 文件相同的文件夹中。例如,1.txt
应该在C:\test\1
而不是在C:\test
。
我怎样才能做到这一点?
答案1
答案是下面这行:
dir -Recurse | % {$_.FullName} | Split-Path | Get-Unique | % {cd $_ ; & rar x *.rar}
必须将文件夹路径“C:\Program Files\WinRAR”添加到 Windows 路径变量中,否则将找不到 rar 命令。如果您使用的是 32 位版本的 winrar,则文件夹路径为:“C:\Program Files (x86)\Winrar”。
如果您不想将路径添加到变量,则必须运行以下命令:
dir -Recurse | % {$_.FullName} | Split-Path | Get-Unique | % {cd $_ ; & "C:\Program Files\WinRAR\Rar.exe" x *.rar}
答案2
1.保存完整路径至Rar.exe
2.递归获取所有*.rar
文件和完整路径
3.使用以下方法运行提取:
Full\path\to\Rar.exe: ⁄⁄ C:\Program Files (x86)\Winrar\Rar.exe
Rar extract command: ⁄⁄ e
Overwrite (if need): ⁄⁄ -o+
Full\path\to\1.rar: ⁄⁄ $_.fullname
Full\path\to\extraction: ⁄⁄ $_.Directory
C:\Program Files (x86)\Winrar\Rar.exe e -o+ $_.fullname $_.Directory
C:\Program Files (x86)\Winrar\Rar.exe e -o+ C:\test\1\1.rar C:\test\1
C:\Program Files (x86)\Winrar\Rar.exe e -o+ C:\test\2\2.rar C:\test\2
C:\Program Files (x86)\Winrar\Rar.exe e -o+ C:\test\3\3.rar C:\test\3
C:\Program Files (x86)\Winrar\Rar.exe e -o+ C:\test\4\4.rar C:\test\4
C:\Program Files (x86)\Winrar\Rar.exe e -o+ C:\test\5\5.rar C:\test\5
为了C:\Program Files (x86)\WinRAR\Rar.exe
ls -r C:\test *.rar | ? {& "${env:ProgramFiles(x86)}\Winrar\rar.exe" e -0+ $_.fullname $_.Directory}
- 或者...,
$rar=(ls -r "${env:ProgramFiles(x86)}\Winrar\rar.exe" -Filter rar.exe -Force -EA 0).fullname
ls -r C:\test -filter *.rar | ? { & "$rar" e -o+ $_.fullname $_.Directory }
- 为了
C:\Program Files\WinRAR\Rar.exe
ls -r C:\test *.rar | ? {& "${env:ProgramFiles}\Winrar\rar.exe" e -0+ $_.fullname $_.Directory}
- 或者...,
$rar=(ls -r $env:ProgramFiles -Filter rar.exe -Force -EA 0).fullname
ls -r C:\test -filter *.rar | ? { & "$rar" e -o+ $_.fullname $_.Directory }