Компьютерный форум 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=300150)

alpap 22-05-2015 12:06 2510155

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

@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 22-05-2015 12:30 2510166

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

@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 22-05-2015 12:33 2510172

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

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

alpap 22-05-2015 13:33 2510192

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

Цитата Iska
«cd /d "%~dp2"»?! »

Используется сторонняя программа для редактирования контекстного меню - удобная для меня и вот таким образом я могу перейти в текущую папку иначе в папку к батнику ...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 22-05-2015 14:22 2510213

Цитата:

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

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

gora 22-05-2015 14:32 2510223

Цитата:

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

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

Цитата alpap
не может распознать архиватор »

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

alpap 22-05-2015 16:33 2510270

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

@echo on
cd 
/"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" 
"%slesh%" "C:\Users\Papenko\Desktop\ 22.05.2015   14. 16. 51"
set "sleshn=%slesh:-=.%"
ren "%slesh%" "%sleshn%"
pause 

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

alpap 22-05-2015 17:55 2510300

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

Код:

@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 22-05-2015 18:00 2510303

Цитата:

Цитата alpap
где ошибка? »

Она не одна:
1
Код:

set "slesh=C:\Users\Papenko\Desktop\ 22.05.2015  14. 16. 51"
Первый символ в имени папки не может быть пробел. Мне не удалось создать такую папку ни в Проводнике, ни в Total Commander.
2
Код:

set "slesh=%slesh:~0,-1%"
Непонятно зачем отрезать последний символ из имени папки (там не слеш). :dont-know Это ни чего не дает кроме путаницы.
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 22-05-2015 19:28 2510343

gora,
Цитата:

Цитата gora
ren "%slesh%.7z" "%sleshn%" »

- здесь тоже не идет из-за наличия пути в %sleshn%.
http://forum.oszone.net/attachment.p...1&d=1432312045
А архиватор расширение 7z сам добавляет по-умолчанию, главное чтобы обр слеша не было.

gora 22-05-2015 19:36 2510346

Цитата:

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

Угу. Я это Вам и написал про синтаксис команды ren:
Цитата:

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

Затем я закомментировал эту строку, а Вы ее зачем то раскомментировали и получили ошибку. Зачем? :dont-know

alpap 22-05-2015 21:03 2510378

gora,
Да, Ваш код работает как надо, только, если не тяжело, объясните каким образом закомментирование строк в коде дает его работоспособность - не для моих мозгов, а знать хочется, ведь команда rem, насколько говорит справка, служит лишь для комментария.

gora 22-05-2015 21:13 2510388

Цитата:

Цитата alpap
объясните каким образом закомментирование строк в коде дает его работоспособность »

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

Iska 22-05-2015 21:20 2510390

Цитата:

Цитата gora
Первый символ в имени папки не может быть пробел. »

Это не совсем так:
Создавать умеют и интерпретатор команд (по крайней мере, в Windows 7), и Far Manager.
Скрытый текст

Другое дело, что, действительно — лучше подобного избегать.


Цитата:

Цитата alpap
А архиватор расширение 7z сам добавляет по-умолчанию »

Угу ;). Когда сможет определить, какой из параметров представляет собой имя архива.


Цитата:

Цитата gora
Закомментированные строки при выполнении кода игнорируются (пропускаются). »

Неа, именно обрабатываются. Как комментарий.

gora 22-05-2015 21:47 2510403

Цитата:

Цитата Iska
Создавать умеют и интерпретатор команд »

Догадывался, что ТС чем-то умудрился создать, но все варианты проверить поленился.
Цитата:

Цитата Iska
Неа, именно обрабатываются. Как комментарий. »

В контексте ответа на заданный вопрос не вижу разницы, посчитал, что так будет проще и понятнее.

Iska 22-05-2015 21:52 2510404

Цитата:

Цитата gora
В контексте ответа на заданный вопрос не вижу разницы, посчитал, что так будет проще и понятнее. »

Не спорю. Там уже детали, что комментарий REM именно как обрабатывается, а «комментарий»-метка «::» — вроде как нет. Не помню, здесь или на Сером форуме, разбирали эти оттенки с парадоксальными подчас результатами.

Georgio 22-05-2015 21:53 2510405

Цитата:

Цитата Iska
именно обрабатываются. Как комментарий. »




Да ещё как обрабатываются! Пример:


Код:

C:\>set x=*

C:\>rem %x:*=%
Непредвиденное появление: =%
.

.



А такая конструкция создаст файл:
Код:

rem:>file
.

Iska 22-05-2015 22:03 2510411

Georgio, да, примерно в этом роде.


Время: 06:47.

Время: 06:47.
© OSzone.net 2001-