1

Тема: CMD/BAT: Задать имя текущей папки архиву 7z

Здравствуйте помогите пожалуйста делаю систему бекапа с архивированием и отправкой на электронную почту, как задать вместо Backup.7z имя_текущей_папки.7z ? Знаю, что значение текущей папки %~dp0 но как передать его в нужные строки ума не приложу.

;set a7z=%~dp0\7za.exe
set otkuda=%APPDATA%\Backup
set kuda=%~dp0
"%a7z%" a "%kuda%\Backup.7z" "%otkuda%\*">>log.txt

и вместо заголовка -body "Backup" и вложения -attach %~dp0\Backup.7z так же имя_текущей_папки?

start blat.exe -install smtp.mail.ru mail@mail.ru 3 25 - mail@mail.ru password
blat.exe -body "Backup" -subject Backup -to mail@mail.ru -attach %~dp0\Backup.7z

2

Re: CMD/BAT: Задать имя текущей папки архиву 7z

for %%I in ("%~dp0") do set "DirName=%%~nxI"

?

Забыл пароль и потерял e-mail.

3

Re: CMD/BAT: Задать имя текущей папки архиву 7z

shiz пишет:
for %%I in ("%~dp0") do set "DirName=%%~nxI"

?



Не-а. Вот так:

for %%I in ("%~dp0.") do set "DirName=%%~nxI"

.

4

Re: CMD/BAT: Задать имя текущей папки архиву 7z

Проблема решилась так!

set "otkuda=%APPDATA%\Backup"
 
pushd "%~dp0"
for %%i in ("%CD%") do (
 >>"log.txt" "7za.exe" a "%%~nxi.7z" "%otkuda%\*"
 start "" "blat.exe" -install smtp.mail.ru mail@mail.ru 3 25 - mail@mail.ru password
 "blat.exe" -body "Backup" -subject Backup -to mail@mail.ru -attach "%%~nxi.7z"
)
popd

Всем спасибо!

5

Re: CMD/BAT: Задать имя текущей папки архиву 7z

Yury пишет:

Не-а. Вот так:

Точно, забыл про "\" в конце.

Забыл пароль и потерял e-mail.

6 (изменено: wisgest, 2015-06-23 03:38:45)

Re: CMD/BAT: Задать имя текущей папки архиву 7z

Yury пишет:

Не-а. Вот так:

for %%I in ("%~dp0.") do set "DirName=%%~nxI"

А ещё вот так

for %%I in ("%~f0\..") do set "DirName=%%~nxI"

или

for %%I in (%0\..) do set "DirName=%%~nxI"

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

Но это о каталоге, содержащем командный файл, в названии же — текщий каталог (т.е. доступный через псевдопеременную %CD%). Первый легко делается вторым, что и показано выше

texnar пишет:
pushd "%~dp0"

но опять же:

pushd %0\..

(в таком виде команда станет работать и при отключенных расширениях командного процессора).

Теперь, если нужно получить файл с именем, совпадающем с именем текущего каталога, расширением «.7z» и находящийся в текущем каталоге, можно воспользоваться выражением

.\%CD:\=\..\%.7z

или, если, например, файл должен находиться в корневом каталоге диска D:

D:\%CD:\=\..\%.7z

— в пути текущего каталога заменяем все разделители «\» на «\..\», что подавляет все составляющие пути кроме последнего. Большинство программ, если не все, проглотят получившийся путь.