PDA

Показать полную графическую версию : [решено] Удаление файлов из архива


VokaMut
02-10-2012, 13:26
Здравствуйте.
Возникла проблема, есть код который архивирует папку и помещает этот архив в другую папку:


@cmdow @ /HID
::@echo off
set SrcPath=D:\Arch\1
set DestPath=D:\Arch
set d=%DATE%
"C:\PROGRA~1\WinRAR\rar.exe" a -m5 -s -y -ep1 -r -ag "%DestPath%\%d%.rar" "%SrcPath%\*.*"


Но мне нужно, что бы после архивации он удалял в архиве файл 1.txt(к примеру).
Моё решение:


"C:\PROGRA~1\WinRAR\rar.exe" d -y "%DestPath%\%d%.rar" "\1.txt"

Это естественно не работает.
Как удалить файл из архива? помогите пожалуйста.

И еще вопрос:
Можно ли сделать так, что бы архив имел имя, которое находится в буфере обмена?

Заранее спасибо.

Molchune
02-10-2012, 14:09
ну например вот так вот
@cmdow @ /HID
::@echo off
set SrcPath=D:\Arch\1
set DestPath=D:\Arch
set d=%DATE%
"C:\PROGRA~1\WinRAR\rar.exe" a -m5 -s -y -ep1 -r -ag -x*1.txt "%DestPath%\%d%.rar" "%SrcPath%\*.*"

VokaMut
02-10-2012, 14:37
Спасибо, помогло, а , что на счет:
И еще вопрос:
Можно ли сделать так, что бы архив имел имя, которое находится в буфере обмена? »

Iska
02-10-2012, 19:07
Можно ли сделать так, что бы архив имел имя, которое находится в буфере обмена? »
Можно:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`mshta.exe "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" 1 ^| more`
) do if not defined sClipboard set sClipboard=%%i

if defined sClipboard echo [%sClipboard%]

endlocal
exit /b 0

VokaMut
02-10-2012, 19:45
Можно:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`mshta.exe "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" 1 ^| more`
) do if not defined sClipboard set sClipboard=%%i
if defined sClipboard echo [%sClipboard%]
endlocal
exit /b 0 »
Спасибо, но я пошел по более простому решению с помощью GetChip.exe:

Chcp 1251
set SrcPath=D:\1
set DestPath=D:\2

getclip.exe>1.txt ::записываем текст из буфера в файл
Set file=1.txt
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do Set body=%%i ::берем переменную из файла

"C:\PROGRA~1\WinRAR\rar.exe" a -m5 -s -y -ep1 -r -x*"123.txt" "%DestPath%\%body%.rar" "%SrcPath%\*.*"


=)

Iska
02-10-2012, 21:23
но я пошел по более простому решению с помощью GetChip.exe: »
«getclip.exe» — Вы хотели сказать… Да, это более простой, но и более длинный путь. Зачем только делать промежуточное сохранение в файл?! Разве нельзя сразу разбирать вывод утилиты?

VokaMut
02-10-2012, 22:34
«getclip.exe» — Вы хотели сказать… Да, это более простой, но и более длинный путь. Зачем только делать промежуточное сохранение в файл?! Разве нельзя сразу разбирать вывод утилиты? »
Для меня проще он потому, что понятно как "дваждыдва", но и ваш код сохранил и закомментировал в том же bat-нике, завтра и с ним поковыряюсь)

VokaMut
03-11-2012, 21:00
Цитата VokaMut:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`mshta.exe "javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();" 1 ^| more`
) do if not defined sClipboard set sClipboard=%%i
if defined sClipboard echo [%sClipboard%]
endlocal
exit /b 0


Еще такая проблема возникла, при копировании текста с воскл. знаками, они(воскл. знаки) не копируются

Iska
04-11-2012, 00:28
VokaMut, очевидно, что не «не копируются», а не «вставляются»: этот специальный символ имеет особое значение при использовании параметра «enabledelayedexpansion». Та же проблема может быть и с некоторыми другими символами, имеющими специальное назначение для командного процессора. В общем случае эта проблема не решаема: даже если извратиться и поместить их в переменную окружения — всё равно могут быть проблемы в дальнейшем — при её использовании.

Выход — целиком переходить на использование WSH.

duh_s
21-12-2012, 13:38
чтоб не создавать новую тему с таким же названием пишу тут:
в общем есть уже готовые архивы вида 1cyyyy_mm_dd.rar (год, месяц, день)
каким образом удалить из них определенные файлы и папки (сохранив оригинальное название и дату создания файла)? хелп

Iska
21-12-2012, 15:54
А Вы смотрели — WinRAR в принципе умеет такое делать?

duh_s
21-12-2012, 16:26
чтоб не создавать новую тему с таким же названием пишу тут: в общем есть уже готовые архивы вида 1cyyyy_mm_dd.rar (год, месяц, день) каким образом удалить из них определенные файлы и папки (сохранив оригинальное название и дату создания файла)? хелп
А Вы смотрели — WinRAR в принципе умеет такое делать?
можна и на "ты" чай не барине мы ;)

кажись нет...
логика действий наверно такова:
в цикле, в текущей папке (или путь прописываем), берем файл 1cyyyy_mm_dd.rar считывает в переменную1 его имя и в переменную2 его дату создания - они совпадают за исключение приписки "1С", разбираем переменную2 на части (чтоб потом можно было прибавить к mm и dd циферку номера цикла и получить дату mm+1 и dd+1) хотя можно обойтись циклом тока для dd
потом распаковываем во временный каталог наш архив, удаляем мусор, запаковываем обратно с именем переменной1 и с изменением атрибутов файла как в переменной2
как-то так...
поможите реализовать )

Iska
21-12-2012, 17:01
Распаковывать-запаковывать не нужно. WinRAR много лет умеет удалять файлы из архива. Проблема именно с сохранением даты/времени файла. Кстати, зачем?

duh_s
24-12-2012, 09:09
можно и без неё

Iska
24-12-2012, 11:03
duh_s, без сохранения — нет проблем (максимум, что возможно — «-tk» — сохранить исходные дата/время последней модификации архива). Наподобие:
WinRAR.exe d -tk "E:\Песочница\0218\1c2012_12_21.rar" "user.dd" "bla-bla-bla.txt" "table*.dbf"




© OSzone.net 2001-2012