CMD/BAT - [решено] Запаковать папку с именем дата время

Аватара пользователя
alpap

CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение alpap »

Добрый день!

Столкнулся с проблемой, если создавать папку с именем дата время



@echo off

cd /d "%~dp2"

set fldr= %date% %time:~0,-3%

set fldrPath=%fldr::=. %

mkdir "%fldrPath%"

exit



то не могу запаковать ее в архив батником



@echo on

cd /d "%~dp2.."

set slesh=%~dp2

If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%

"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "%~dp2"

pause



папки с любыми именами и пробелами - запаковывает, а вот с точками не хочет, но менять точки на что-то другое - тире или ; не хочу, как выйти из ситуации.

%~dp2 - это у меня путь к текущей папке.
Аватара пользователя
greg zakharov

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение greg zakharov »

Да ладно! Неужто такая непосильная наука?

Код:

Код: Выделить всё

@echo off
  setlocal
    set "t=%time::=.%"
    set "f=%date% %t:~0,-3%"
    md "%f%"
    7za a -mx9 foo.zip "%f%"
  endlocal
exit /b

Если желаете дельный совет, не используйте cd /d - лучше возьмите на вооружение pushd и popd.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение Iska »

alpap, научитесь пользоваться тэгом

Код: Выделить всё

[/url].



Приводите полную информацию. Что есть там первый параметр, и почему он нигде не используется в коде? Если второй параметр — это путь к текущей папке, зачем там «cd /d "%~dp2"»?!
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение alpap »

greg zakharov,

Не понял. Папка ...дата время уже создана (а может быть и с другим именем). Какая разница запихаю ее в переменную или нет, ее имя не может распознать архиватор, пишет не является она архивом. Пишу имя, например "Папка", спокойно делает мне рядом "Папка.7z".


Цитата Iska:



«cd /d "%~dp2"»?!
CMD/BAT - [решено] Запаковать папку с именем дата время




Используется сторонняя программа для редактирования контекстного меню - удобная для меня и вот таким образом я могу перейти в текущую папку иначе в папку к батнику ...sys32.





Код:

Код: Выделить всё

@echo on
cd /d "%~dp2.."
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "%~dp2"
pause

http://forum.oszone.net/attachment.p...1&d=1432293183
Аватара пользователя
greg zakharov

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение greg zakharov »

Цитата alpap:



Какая разница запихаю ее в переменную или нет, ее имя не может распознать архиватор, пишет не является она архивом.



Претензии о почине рук обычно направляют к собственным родителям.
Аватара пользователя
gora

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение gora »

Цитата alpap:



Используется сторонняя программа для редактирования контекстного меню - удобная для меня и вот таким образом я могу перейти в текущую папку иначе в папку к батнику ...sys32.
CMD/BAT - [решено] Запаковать папку с именем дата время




Пусть будет так, но вопрос касается батника и Ваше объяснение про "удобство для Вас" ни как не помогает понять Ваш батник. Из него не видно, что именно содержится в переменной %~dp2 которая потом и преобразуется в то, что ...
Цитата alpap:



не может распознать архиватор
CMD/BAT - [решено] Запаковать папку с именем дата время




К тому же у помогающих Вам нет Вашей "сторонней программы" и они не смогут воспроизвести Ваши условия тестирования.

Рекомендую отказаться от подобной манеры выкладывать проблемные батники. Попробуйте заменить %~dp2 на простую переменную и отлаживайте батник именно в таком виде. В таком же виде выкладывайте Ваш батник на форум, если возникли вопросы. После отладки батника Вы сможете заменить переменную на Вашу %~dp2 и получить рабочую конструкцию.
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение alpap »

gora,

Ну хорошо. Кое что наладил, но не получается переименовать файл



PHP код:

Код: Выделить всё

@echo on
cd /d "C:\Users\Papenko\Desktop"
set "slesh=C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"
set "slesh=%slesh:~0,-1%"
set "slesh=%slesh:.=-%"
"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"
set "sleshn=%slesh:-=.%"
ren "%slesh%" "%sleshn%"
pause 






Хочу назад вернуть точки - где ошибка?
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение alpap »

Извиняюсь, нашел, во второй переменной путь указан, а надо просто имя. Получилось так:





Код:

Код: Выделить всё

@echo off
cd /d "C:\Users\Papenko\Desktop"
set "slesh=C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"
set "slesh=%slesh:~0,-1%"
set "slesh=%slesh:.=-%"
"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"
set "new=%slesh%.7z"
for %%i in ("%new%") do set "new1=%%~nxi"
set "new1=%new1:-=.%"
ren "%new%" "%new1%"
exit
Аватара пользователя
gora

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение gora »

Цитата alpap:



где ошибка?
CMD/BAT - [решено] Запаковать папку с именем дата время




Она не одна:

1

Код:

Код: Выделить всё

set "slesh=C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"

Первый символ в имени папки не может быть пробел. Мне не удалось создать такую папку ни в Проводнике, ни в Total Commander.

2

Код:

Код: Выделить всё

set "slesh=%slesh:~0,-1%"

Непонятно зачем отрезать последний символ из имени папки (там не слеш). Изображение Это ни чего не дает кроме путаницы.

3

Код:

Код: Выделить всё

"C:\Program Files\7-Zip\7z.exe" a "%slesh%" "C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"

Архиватор не понимает, где здесь имя архива, а где имя упаковываемого объекта. Нужно указать расширение у архива и тогда он все поймет.

4

Код:

Код: Выделить всё

ren "%slesh%" "%sleshn%"

Вы же, как я понял, хотите переименовать архив, а указываете путь с именем папки (нет расширения и это уже не архив, а папка). Нужно указать расширение переименовываемого файла.

В команде ren вторым параметром идет новое имя файла без пути!



Ну и в заключении Ваш батник без лишних "выкрутасов" с переименованиями.



Код:

Код: Выделить всё

@echo on
cd /d "C:\Users\Papenko\Desktop"
set "slesh=C:\Users\Papenko\Desktop\22.05.2015   14. 16. 51"
rem set "slesh=%slesh:~0,-1%"
rem set "slesh=%slesh:.=-%"
"C:\Program Files\7-Zip\7z.exe" a "%slesh%.7z" "%slesh%"
rem set "sleshn=%slesh:-=.%"
rem ren "%slesh%.7z" "%sleshn%"
pause
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Запаковать папку с именем дата время

Сообщение alpap »

gora,
Цитата gora:



ren "%slesh%.7z" "%sleshn%"
CMD/BAT - [решено] Запаковать папку с именем дата время




- здесь тоже не идет из-за наличия пути в %sleshn%.

http://forum.oszone.net/attachment.p...1&d=1432312045


А архиватор расширение 7z сам добавляет по-умолчанию, главное чтобы обр слеша не было.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»