Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] скрипт добавляющий папку с содержимым в архив (http://forum.oszone.net/showthread.php?t=301771)

infoman1@vk 28-06-2015 17:27 2523431

скрипт добавляющий папку с содержимым в архив
 
У меня есть скрипт:

Код:

@Echo Off

Set "Where=d:\instal\111\"
Set "To=d:\instal\222\"
Set "Pass=1"
Set "Ext=rar"

Set "Arc=%ProgramFiles%\WinRAR\WinRar.exe"
Set "Keys=a -r -p%Pass% -df -ep1"

FOR /F "usebackq delims=" %%i IN (`Dir "%Where%" /B /A:D`) DO (
  "%Arc%" %Keys% "%To%\%%i.%Ext%" "%Where%\%%i"
)

Он добавляет папку с содержимым в архив, все хорошо. Но приходится каждый рас писать какую папку
d:\instal\111\

И куда сохранить готовый архив
d:\instal\222\

Как сделать так что бы папку "111" добавить в архив. Сам мархив что бы был там же где и сама папка в "d:\instal\"

Например будет в "d:\instal\" папки "111", "222", "333", "444" запистил скрипт ничего не меняя в нем и получил "111.rar", "222.rar", "333.rar", "444.rar" если будет нужно переместил скрипт в другую папку за пустил и получил архивы тех папок что лежат в ней не меняя скрипта.

Опиум 29-06-2015 02:08 2523573

Для начала наверно правильнее использовать консольный вариант винрара.

Iska 29-06-2015 03:13 2523579

Цитата:

Цитата Опиум
Для начала наверно правильнее использовать консольный вариант винрара. »

В данном случае — без разницы. А вот что действительно неправильно, так вот это:
Цитата:

Цитата infoman1@vk
переместил скрипт в другую папку за пустил »

Правильно — указывать путь к целевой папке параметром пакетного файла.

Как-то так:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
        if exist "%sSourceFolder%\." (
                set "sPassword=1"
                set sSelection=
               
                for /d %%i in ("%sSourceFolder%\*.*") do (
                        start /wait "" "WinRAR.exe" a -r -p!sPassword! -df -ep1 "%sSourceFolder%\%%~nxi.rar" "%%~i"
                        if not defined sSelection set sSelection="%sSourceFolder%\%%~nxi.rar"
                )
               
                start "" "explorer.exe" /e,/select,!sSelection!
        ) else (
                echo Can't find source folder [%sSourceFolder%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source folder^>
        exit /b 1
)

endlocal
exit /b 0


Также можно просто перетащить целевую папку в Проводнике на пакетный файл.

infoman1@vk 03-07-2015 21:56 2525648

Цитата:

Цитата Опиум
Для начала наверно правильнее использовать консольный вариант винрара. »

Тот скрипт что я дал для примера полностью рабочий. Но в нем приходится каждый рас писать какую папку архивировать.
Код:

Set "Where=d:\instal\111\"
А у меня бывают ситуации когда нужно закинуть в винрар много папок
d:\instal\111\
d:\instal\222\
d:\instal\333\
d:\instal\444\
Так мне нужен такой скрипт что бы он у меня лежал в папке к примеру d:\instal\ я его запустил и все подпапки с содержимым стали архивам. "111.rar", "222.rar", "333.rar", "444.rar"

Цитата:

Цитата Iska
Цитата infoman1@vk:
переместил скрипт в другую папку за пустил »
Правильно — указывать путь к целевой папке параметром пакетного файла. »

А скрипт сам не может смотреть в какой он папке? и добавлять в архив все подпаки с содержимым. Я не хочу указывать путь к целевой папке. Так что бы скрипт работал во всех нужных папках. И d:\instal\ и d:\prog\ и d:\bin\

Iska 03-07-2015 23:01 2525669

Цитата:

Цитата infoman1@vk
А скрипт сам не может смотреть в какой он папке? и добавлять… »

infoman1@vk, я написал, как правильно. Неправильно — таскать пакетный файл туда-сюда по папкам. Абсолютно неправильно. От слова «совсем». Коллега, чем раньше Вы это поймёте и освоите корректный метод, тем лучше будет для Вас же в дальнейшем.

Если Вам так не нравится перетаскивать папку на пакетный файл — Вы можете:
  • добавить ярлык на пакетный файл в «%UserProfile%\SendTo» (Windows XP)/«%UserProfile%\AppData\Roaming\Microsoft\Windows\SendTo» (Vista и выше) и пользовать команду «Отправить» контекстного меню папки;
  • добавить ярлык на пакетный файл на Рабочий стол и перетаскивать папку на него;
  • добавить ярлык на пакетный файл на панель быстрого запуска и перетаскивать папку на этот ярлык.
Наконец, Вы можете взять сторонний файловый менеджер (я лично пользую консольный Far Manager) и добавлять путь параметром пакетного файла одной комбинацией клавиш.

infoman1@vk 04-07-2015 11:12 2525728

Цитата Iska: Неправильно — таскать пакетный файл туда-сюда по папкам. Абсолютно неправильно. От слова «совсем». Коллега, чем раньше Вы это поймёте и освоите корректный метод, тем лучше будет для Вас же в дальнейшем. »
А вот ето скрипт можно таскать по папкам и не нужно указывать путь.
Код:

set ext=*.exe, *.msi
set pass="1"

cd /d %dir%
for /f "delims=" %%i in ('
 dir /a-d/b/s %ext% 2^>nul
') do (
 "%PROGRAMFILES%\WinRAR\Rar.exe" a -y -k -ri15 -ep -df -m5 -inul -p%pass% "%%~dpni.rar" "%%i"
 )

exit /b


Iska 04-07-2015 12:33 2525748

«Мышки плакали, кололись, но продолжали жрать кактус». Ну «/s»-то нахрена зачем там?!

infoman1@vk 04-07-2015 17:40 2525819

Цитата:

Цитата Iska
Как-то так:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=%~1
if defined sSourceFolder (
if exist "%sSourceFolder%\." (
set "sPassword=1"
set sSelection=
for /d %%i in ("%sSourceFolder%\*.*") do (
start /wait "" "WinRAR.exe" a -r -p!sPassword! -df -ep1 "%sSourceFolder%\%%~nxi.rar" "%%~i"
if not defined sSelection set sSelection="%sSourceFolder%\%%~nxi.rar"
)
start "" "explorer.exe" /e,/select,!sSelection!
) else (
echo Can't find source folder [%sSourceFolder%].
exit /b 2
)
) else (
echo Usage: %~nx0 ^<Source folder^>
exit /b 1
)
endlocal
exit /b 0
Также можно просто перетащить целевую папку в Проводнике на пакетный файл. »


Спасибо помогло


Время: 00:56.

Время: 00:56.
© OSzone.net 2001-