Показать полную графическую версию : [решено] Запаковать папку с именем дата время
Добрый день!
Столкнулся с проблемой, если создавать папку с именем дата время
@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
Да ладно! Неужто такая непосильная наука? @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.
alpap, научитесь пользоваться тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).
Приводите полную информацию. Что есть там первый параметр, и почему он нигде не используется в коде? Если второй параметр — это путь к текущей папке, зачем там «cd /d "%~dp2"»?!
greg zakharov,
Не понял. Папка ...дата время уже создана (а может быть и с другим именем). Какая разница запихаю ее в переменную или нет, ее имя не может распознать архиватор, пишет не является она архивом. Пишу имя, например "Папка", спокойно делает мне рядом "Папка.7z".
«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.php?attachmentid=125377&stc=1&d=1432293183
greg zakharov
22-05-2015, 14:22
Какая разница запихаю ее в переменную или нет, ее имя не может распознать архиватор, пишет не является она архивом.Претензии о почине рук обычно направляют к собственным родителям.
Используется сторонняя программа для редактирования контекстного меню - удобная для меня и вот таким образом я могу перейти в текущую папку иначе в папку к батнику ...sys32. »
Пусть будет так, но вопрос касается батника и Ваше объяснение про "удобство для Вас" ни как не помогает понять Ваш батник. Из него не видно, что именно содержится в переменной %~dp2 которая потом и преобразуется в то, что ... не может распознать архиватор »К тому же у помогающих Вам нет Вашей "сторонней программы" и они не смогут воспроизвести Ваши условия тестирования.
Рекомендую отказаться от подобной манеры выкладывать проблемные батники. Попробуйте заменить %~dp2 на простую переменную и отлаживайте батник именно в таком виде. В таком же виде выкладывайте Ваш батник на форум, если возникли вопросы. После отладки батника Вы сможете заменить переменную на Вашу %~dp2 и получить рабочую конструкцию.
gora,
Ну хорошо. Кое что наладил, но не получается переименовать файл
@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
Хочу назад вернуть точки - где ошибка?
Извиняюсь, нашел, во второй переменной путь указан, а надо просто имя. Получилось так:
@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
где ошибка? »
Она не одна:
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
gora, ren "%slesh%.7z" "%sleshn%" » - здесь тоже не идет из-за наличия пути в %sleshn%.
http://forum.oszone.net/attachment.php?attachmentid=125395&stc=1&d=1432312045
А архиватор расширение 7z сам добавляет по-умолчанию, главное чтобы обр слеша не было.
здесь тоже не идет из-за наличия пути в %sleshn% »
Угу. Я это Вам и написал про синтаксис команды ren:В команде ren вторым параметром идет новое имя файла без пути! »
Затем я закомментировал эту строку, а Вы ее зачем то раскомментировали и получили ошибку. Зачем? :dont-know
gora,
Да, Ваш код работает как надо, только, если не тяжело, объясните каким образом закомментирование строк в коде дает его работоспособность - не для моих мозгов, а знать хочется, ведь команда rem, насколько говорит справка, служит лишь для комментария.
объясните каким образом закомментирование строк в коде дает его работоспособность »
Закомментированные строки при выполнении кода игнорируются (пропускаются). Значит, закомментировав строку с ошибкой, можно получить работоспособный код.
Первый символ в имени папки не может быть пробел. »
Это не совсем так:
Создавать умеют и интерпретатор команд (по крайней мере, в Windows 7), и Far Manager.
http://i.imgur.com/1kY80om.png
Другое дело, что, действительно — лучше подобного избегать.
А архиватор расширение 7z сам добавляет по-умолчанию »
Угу ;). Когда сможет определить, какой из параметров представляет собой имя архива.
Закомментированные строки при выполнении кода игнорируются (пропускаются). »
Неа, именно обрабатываются. Как комментарий.
Создавать умеют и интерпретатор команд »
Догадывался, что ТС чем-то умудрился создать, но все варианты проверить поленился.Неа, именно обрабатываются. Как комментарий. »
В контексте ответа на заданный вопрос не вижу разницы, посчитал, что так будет проще и понятнее.
В контексте ответа на заданный вопрос не вижу разницы, посчитал, что так будет проще и понятнее. »
Не спорю. Там уже детали, что комментарий REM именно как обрабатывается, а «комментарий»-метка «::» — вроде как нет. Не помню, здесь или на Сером форуме, разбирали эти оттенки с парадоксальными подчас результатами.
именно обрабатываются. Как комментарий. »
Да ещё как обрабатываются! Пример:
C:\>set x=*
C:\>rem %x:*=%
Непредвиденное появление: =%
..
А такая конструкция создаст файл: rem:>file.
Georgio, да, примерно в этом роде.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.