Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] упаковка содержимого файлов в cab архив (http://forum.oszone.net/showthread.php?t=133984)

tr011_tmn 06-03-2009 14:38 1056518

упаковка содержимого файлов в cab архив
 
столкнулся с задачей: мне необходимо запаковать файлы находящиеся в папке, в Cab (грубо говоря win32k.sys запаковать в win32k.sy_). Возможно ли это реализовать средствами CMD?

gora 06-03-2009 14:45 1056523

tr011_tmn, наберите в ком. строке makecab.exe /? получите это:
Цитата:

Microsoft (R) Cabinet Maker - Version 5.1.2600.5512
Copyright (c) Microsoft Corporation. All rights reserved..

MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...]

source File to compress.
destination File name to give compressed file. If omitted, the
last character of the source file name is replaced
with an underscore (_) and used as the destination.
/F directives A file with MakeCAB directives (may be repeated).
/D var=value Defines variable with specified value.
/L dir Location to place destination (default is current directory).
/V[n] Verbosity level (1..3).
Перевод думаю осилите... :)

tr011_tmn 06-03-2009 14:53 1056528

Цитата:

Цитата gora
tr011_tmn, наберите в ком. строке makecab.exe /? получите это: »

огромное спасибо, обратный процесс я нашел как выполнить, а вот с этим все никак не мог разобраться

E-mpty 07-03-2009 16:26 1057346

tr011_tmn, может пригодится: упакует все файлы в папке в CAB (путь заменить на свой С: -диск ,33 -название папки).
Код:

For %%I In (С:\33\*.*) Do START /WAIT MAKECAB.exe "%%~I"
(запакованные файлы появится там от куда был запущен пакетный файл....)

tr011_tmn 08-03-2009 09:15 1057861

Цитата:

Цитата E-mpty
tr011_tmn, может пригодится: упакует все файлы в папке в CAB (путь заменить на свой С: -диск ,33 -название папки). Код: For %%I In (С:\33\*.*) Do START /WAIT MAKECAB.exe "%%~I" (запакованные файлы появится там от куда был запущен пакетный файл....) »

вопрос заключается в том каким образом он их упакует, если в один архив то мне это не подходит.
На данный момент реализовал что бу упаковка проходила через относительные пути, грубо говоря что бы туда же и положел. но выглядит это конечно ужасно. Т.к. для каждого из файлов приходится использовать makecab а после вуд Del /F /Q что бы удалить оригинал из папки.Страшно подумать что будет когда я буду упаковывать более 200 файлов :cool: (сейчас около ста)

E-mpty 08-03-2009 11:02 1057909

tr011_tmn, нет каждый файл в отдельный архив....Если надо все упаковать в текущей папке а потом удалить не упакованные,то можно поступить таким образом:создать заранее список неупакованных файлов(такая функция есть в file menu tools например или средствами ком.строки code: dir С:\33 /B /O > С:\MC.txt )пусть он называется MC.txt, применить упаковку файлов,а потом удалить не упакованные файлы по списку code: For /F "Delims=" %%i In (C:\33\MC.txt) Do Del %%i (MC.txt должен лежать рядом с пакетным файлом....)

tr011_tmn 08-03-2009 11:55 1057943

E-mpty, попробую ваш совет, но это уже будет после завтра на работе, а как быть с относительными путями?
если использовать подобную связку:
Код:

SET Dir=Folder1
SET TMP=C:\temp
echo основное тело программы
DIR %DIR% /B /O > %TMP%\DIR.TXT
FOR %%I in (%DIR%\*.*) do START /WAIT makecab.exe "%%~I" /F %tmp%\DIR.TXT /L %DIR%
FOR /F "Delims=" %%i In (%tmp%\DIR.TXT ) Do Del %%i

Как вы думаете удасться ли добится требуемого результата?
P.S.
Код:

SET Dir=C:\1
SET TMP=C:\temp
md %TMP%
pause
echo основное тело программы
DIR %DIR% /B /O > %TMP%\DIR.TXT
FOR %%I in (%DIR%\*.*) do START /WAIT makecab.exe "%%~I" /F %tmp%\DIR.TXT /L %DIR%
FOR /F "Delims=" %%i In (%tmp%\DIR.TXT ) Do Del %%i
pause
Del /F /Q %TMP%
pause

Не дало результата. Не найден путь пишет (((

gora 08-03-2009 12:48 1057984

tr011_tmn, избегайте использования в качестве имен переменных ключевых слов cmd интерпретатора (SET Dir=C:\1) Так же лучше не использовать в качестве имен переменных - имена системных переменных, если Вы не меняете именно системную переменную (SET TMP=C:\temp), лучше не искушать судьбу.

tr011_tmn 08-03-2009 13:06 1058001

Цитата:

Цитата gora
tr011_tmn, избегайте использования в качестве имен переменных ключевых слов cmd интерпретатора (SET Dir=C:\1) Так же лучше не использовать в качестве имен переменных - имена системных переменных, если Вы не меняете именно системную переменную (SET TMP=C:\temp), лучше не искушать судьбу. »

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

gora 08-03-2009 14:17 1058045

tr011_tmn, попробуйте так:
Код:

@Echo off
SET Folder=C:\1
echo Compress and delete all files on folder: %Folder%
DIR %Folder% /B /O > %TMP%\FileList.TXT
FOR  /F "Delims=" %%I in (%TMP%\FileList.TXT) do (
echo Compress file: %Folder%\%%I
makecab.exe "%Folder%\%%I" /L %Folder%>nul
Del /F /Q "%Folder%\%%I"
)
Del /F /Q %TMP%\FileList.TXT
pause>nul

Скрипт упакует все файлы в папке C:\1 по отдельности в эту же папку и удалит из нее оригиналы. Временный файл список тоже удаляется.

tr011_tmn 10-03-2009 08:24 1059405

Цитата:

Цитата gora
Скрипт упакует все файлы в папке C:\1 по отдельности в эту же папку и удалит из нее оригиналы. Временный файл список тоже удаляется. »

по теории вероятности данный скрипт обрабатывает успешно указанные ему папки, и все идеально ))) но вот в моем частном случае он мне не подошел ))) т.к. в папке C:\1 находились еще 4 папки )))) которые он успешно и очистил )))) сразу и не понял в чем дело, потом только дошло ))) куда у мен деваеться их содержимое.
P.S. значитца бум искать такой же только с перламутровыми пуговицами ))

Petya V4sechkin 10-03-2009 10:49 1059493

Цитата:

Цитата tr011_tmn
т.к. в папке C:\1 находились еще 4 папки )))) которые он успешно и очистил ))))

Исправьте строку:
Код:

DIR %Folder% /B /O > %TMP%\FileList.TXT
на:
Код:

DIR %Folder% /B /A-D > %TMP%\FileList.TXT
(чтобы исключить папки из обработки).

Space-06 12-03-2009 00:37 1061160

Ребята подскажите пожалуйста как с помощью этого же скрипта организовать пакетное конвертирование файлов с помощью утилитки convert

вот скрипт

@Echo off
SET Folder=C:\1
DIR %Folder% /B /O > %TMP%\FileList.TXT
FOR /F "Delims=" %%I in (%TMP%\FileList.TXT) do (
set /a id=+1
convert.exe "%Folder%\%%I" "%Folder%\image_%id%.jpg"
Del /F /Q "%Folder%\%%I"
)
Del /F /Q %TMP%\FileList.TXT

где может быть ошибка

в итоге необходимо получить файл по шаблону image, но в добавок, чтоб к нему писался номер ... вот как это сделать недомудрю....

gora 12-03-2009 09:24 1061277

Цитата:

Цитата Space-06
необходимо получить файл по шаблону image, но в добавок, чтоб к нему писался номер »

Попробуйте так:
Код:

@Echo off
SetLocal enabledelayedexpansion
Set Folder=C:\1
Dir %Folder% /B /A-D > %TMP%\FileList.TXT
For /F "Delims=" %%I In (%TMP%\FileList.TXT) Do (
Set /a id+=1
convert.exe "%Folder%\%%I" "%Folder%\image_!id!.jpg"
Del /F /Q "%Folder%\%%I"
)
Del /F /Q %TMP%\FileList.TXT


Маkсим 05-04-2015 10:26 2491933

А как быть с SP3.CAB? к примеру я распаковал все содержимое архиватором,в распакованном виде заменил что мне нужно было,теперь нужно все запаковать обратно, не подскажите команду?буду очень признателен!

sov44 05-04-2015 11:43 2491960

Цитата:

Цитата Маkсим
я распаковал все содержимое архиватором,в распакованном виде заменил что мне нужно было,теперь нужно все запаковать обратно, не подскажите команду? »

Цитата:

Цитата E-mpty
: упакует все файлы в папке в CAB »



Время: 02:57.

Время: 02:57.
© OSzone.net 2001-