Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compress each subfolder in a folder into a separate RAR archive using WinRAR?

I am really new to batch file coding and need your help.

I've these directories:

c:\rar\temp1\xy.jpg
c:\rar\temp1\sd.jpg
c:\rar\temp1\dd.jpg

c:\rar\temp2\ss.jpg
c:\rar\temp2\aa.jpg
c:\rar\temp2\sd.jpg

c:\rar\temp3\pp.jpg
c:\rar\temp3\ll.jpg
c:\rar\temp3\kk.jpg

And I want to compress them to this

c:\rar\temp1\temp1.rar
c:\rar\temp2\temp2.rar
c:\rar\temp3\temp3.rar

How could this be done using WinRAR?

like image 628
adamzso Avatar asked Jul 24 '14 11:07

adamzso


People also ask

How do I compress multiple files in a RAR file?

Use the file browser to change directories to the location of the file(s) or folder(s) you want to compress. Select the file(s) or folder(s); press the Ctrl key to select multiple files/folders. Click the Add icon at the top of the window or go to Commands | Add files to archive or press Alt + A.

Can you zip multiple folders at once?

To place multiple files into a zip folder, select all of the files while hitting the Ctrl button. Then, right-click on one of the files, move your cursor over the “Send to” option and select “Compressed (zipped) folder”.

What is split to volumes in WinRAR?

Generally, volumes are used to store large amounts of data on removable disks, or to transfer data by email. If you want to compress and split your file(s), you can select the desired volume size in the "Split to volumes" field in the archive name and parameters dialog under the general tab.


2 Answers

This can be done also with WinRAR without using a batch file, not exactly as requested, but similar to what is wanted.

  1. Start WinRAR and navigate to folder c:\rar\.
  2. Select the folders temp1, temp2 and temp3 and click on button Add in the toolbar.
  3. As archive name specify now the folder for the RAR archives, for example c:\rar\.
  4. Switch to tab Files and check there the option Put each file to separate archive.
  5. Click on button OK.

WinRAR creates now three RAR archives with the file names temp1.rar, temp2.rar and temp3.rar in folder c:\rar\ with each archive containing the appropriate folder with all files and subfolders.

The list of files to add can be changed also on tab Files by entering for example *.txt in Files to exclude to ignore text files in the three folders on creating the archives.

And finally it makes sense to enter *.jpg on tab Files in edit field below Files to store without compression as JPEG files usually contain already compressed data and therefore WinRAR cannot really compress the data of the files further.


Here is also a batch file solution to move the files in all non-hidden subfolders of c:\rar\ and their subfolders into an archive file with name of the subfolder created in each subfolder as requested.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "RAREXE=Rar.exe"

if exist "%RAREXE%" goto CreateArchives
if exist "%ProgramFiles%\WinRAR\Rar.exe" set "RAREXE=%ProgramFiles%\WinRAR\Rar.exe" & goto CreateArchives
if exist "%ProgramFiles(x86)%\WinRAR\Rar.exe" set "RAREXE=%ProgramFiles(x86)%\WinRAR\Rar.exe" & goto CreateArchives
for /F "skip=2 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v Path 2^>nul') do (
    if /I "%%I" == "Path" if exist "%%~K\Rar.exe" for %%L in ("%%~K\Rar.exe") do set "RAREXE=%%~fL" & goto CreateArchives
)
for /F "skip=2 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v Path 2^>nul') do (
    if /I "%%I" == "Path" if exist "%%~K\Rar.exe" for %%L in ("%%~K\Rar.exe") do set "RAREXE=%%~fL" & goto CreateArchives
)
for /F "delims=" %%I in ('%SystemRoot%\System32\where.exe Rar.exe 2^>nul') do set "RAREXE=%%I" & goto CreateArchives

echo ERROR: Could not find Rar.exe!
echo/
echo Please define the variable RAREXE at top of the batch file
echo "%~f0"
echo with the full qualified file name of the executable Rar.exe.
echo/
pause
goto :EOF

:CreateArchives
set "Error="
for /D %%I in ("c:\rar\*") do (
    echo Creating RAR archive for "%%I" ...
    "%RAREXE%" m -@ -cfg- -ep1 -idq -m3 -msgif;png;jpg;rar;zip -r -s- -tl -y -- "%%I\%%~nxI.rar" "%%I\"
    if errorlevel 1 set "Error=1"
)
if defined Error echo/& pause
endlocal

The lines after set "RAREXE=Rar.exe" up to :CreateArchives can be omitted on definition of environment variable RAREXE with correct full qualified file name.

Please read the text file Rar.txt in the WinRAR program files folder for an explanation of RAR command m and the used switches. The question does not contain any information with which options the RAR archives should be created at all.

For understanding the used commands and how they work, open a command prompt window, execute there the following commands, and read entirely all help pages displayed for each command very carefully.

  • call /? ... explains %~f0 ... full name of batch file
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • reg /?
  • reg query /?
  • set /?
  • setlocal /?
  • where /?

See also single line with multiple commands using Windows batch file for an explanation of the operator &.

Read the Microsoft documentation about Using command redirection operators for an explanation of 2>nul. The redirection operator > must be escaped with caret character ^ on the three FOR command lines to be interpreted as literal character when Windows command interpreter processes this command line before executing command FOR which executes the embedded reg or where command line in a separate command process started in background.

like image 105
Mofi Avatar answered Oct 26 '22 10:10

Mofi


This script can work as well:

@echo off
for %%a in ("C:\rar\temp1" "C:\rar\temp2" "C:\rar\temp3") do (
    pushd "%%~a"
    "C:\Program Files\WinRAR\rar.exe" a -r temp.rar *
    popd
)
like image 39
konsolebox Avatar answered Oct 26 '22 10:10

konsolebox