Войти

Показать полную графическую версию : [решено] скрипт добавляющий папку с содержимым в архив


infoman1@vk
28-06-2015, 17:27
У меня есть скрипт:

@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
Для начала наверно правильнее использовать консольный вариант винрара.

Iska
29-06-2015, 03:13
Для начала наверно правильнее использовать консольный вариант винрара. »
В данном случае — без разницы. А вот что действительно неправильно, так вот это:
переместил скрипт в другую папку за пустил »
Правильно — указывать путь к целевой папке параметром пакетного файла.

Как-то так:
@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
Для начала наверно правильнее использовать консольный вариант винрара. »
Тот скрипт что я дал для примера полностью рабочий. Но в нем приходится каждый рас писать какую папку архивировать.
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"

Цитата infoman1@vk:
переместил скрипт в другую папку за пустил »
Правильно — указывать путь к целевой папке параметром пакетного файла. »
А скрипт сам не может смотреть в какой он папке? и добавлять в архив все подпаки с содержимым. Я не хочу указывать путь к целевой папке. Так что бы скрипт работал во всех нужных папках. И d:\instal\ и d:\prog\ и d:\bin\

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

Если Вам так не нравится перетаскивать папку на пакетный файл — Вы можете:

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

Наконец, Вы можете взять сторонний файловый менеджер (я лично пользую консольный Far Manager) и добавлять путь параметром пакетного файла одной комбинацией клавиш.

infoman1@vk
04-07-2015, 11:12
Цитата 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
«Мышки плакали, кололись, но продолжали жрать кактус». Ну «/s»-то нахрена зачем там?!

infoman1@vk
04-07-2015, 17:40
Как-то так:
Скрытый текст
Код: Выделить весь код
@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
Также можно просто перетащить целевую папку в Проводнике на пакетный файл. »


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




© OSzone.net 2001-2012