Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Архивация файлов с помощью 7zip, имена которых содержат пробел

Ответить
Настройки темы
Архивация файлов с помощью 7zip, имена которых содержат пробел

Аватара для MONaH Rasta

Новый участник


Сообщения: 11
Благодарности: 1


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: MONaH Rasta
Дата: 12-11-2012
Описание: Добавил решение
Приветствую всех.
Задача проста, скрипт должен бесшумно архивировать все файлы в дирректории и удалять их после архивирования. Хорошо бы, конечно, по расширению определять и исключать архивы, но можно и без этого.
Написал, как смог, прошу сильно не пинать.
читать дальше »
Код: Выделить весь код
$K='"'
$DEL = "DEL /F /Q "
$7z = '7-Zip\7z.exe'
$ArchOptions = ' -mmt -ms=off'
$CurrentDir= @ScriptDir & '\'
$ProgramFilesDir = @ProgramFilesDir & '\'

$Search = FileFindFirstFile("*.*")
If $Search = -1 Then
	Exit
EndIf

While 1
	$File = FileFindNextFile($Search)

	If @error Then
		ExitLoop
	ElseIf $File = @ScriptName Then
		$File = FileFindNextFile($Search)
	EndIf

	$ArchiveName = $File & '.7z'
	$Archivate = $K & $ProgramFilesDir & $7z & $K & ' a -mx9 ' & $ArchiveName & ' ' & $File & $ArchOptions
	Archivate($File)
WEnd

Func Archivate($File)
	RunWait(@ComSpec & ' /c ' & $Archivate, "")
	RunWait(@ComSpec & ' /c ' & $DEL & $K & $CurrentDir & $File & $K, "")
EndFunc

FileClose($Search)

Сыроват, будет доработан, это всё понятно. Столкнулся с проблемой и не могу решить. Если имена файлов содержат пробелы, их необходимо заключать в кавычки. Ок, попробовал сделать вот так:
читать дальше »
Код: Выделить весь код
$K='"'
$DEL = "DEL /F /Q "
$7z = '7-Zip\7z.exe'
$ArchOptions = ' -mmt -ms=off'
$CurrentDir= @ScriptDir & '\'
$ProgramFilesDir = @ProgramFilesDir & '\'

$Search = FileFindFirstFile("*.*")
If $Search = -1 Then
	Exit
EndIf

While 1
	$File = FileFindNextFile($Search)

	If @error Then
		ExitLoop
	ElseIf $File = @ScriptName Then
		$File = FileFindNextFile($Search)
	EndIf

	$ArchiveName = $File & '.7z'
	$Archivate = $K & $ProgramFilesDir & $7z & $K & ' a -mx9 ' & $K & $ArchiveName & $K & ' ' & $K & $File & $K & $ArchOptions
	Archivate($File)
WEnd

Func Archivate($File)
	RunWait(@ComSpec & ' /c ' & $Archivate, "")
	RunWait(@ComSpec & ' /c ' & $DEL & $K & $CurrentDir & $File & $K, "")
EndFunc

FileClose($Search)

На что я получаю сообщение:
читать дальше »
Код: Выделить весь код
"C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

D:\Program Files\AutoIt3\M\TMP>

Не совсем понимаю в чём проблема. Дописываю копирование в буфер комманды, которая отправляется скриптом в @ComSpec.
читать дальше »
Код: Выделить весь код
Func Archivate($File)
	ClipPut($Archivate)
	RunWait(@ComSpec & ' /k ' & $Archivate, "")
	RunWait(@ComSpec & ' /c ' & $DEL & $K & $CurrentDir & $File & $K, "")
EndFunc

Вот что в результате получаю в буфер:
читать дальше »
Код: Выделить весь код
"C:\Program Files\7-Zip\7z.exe" a -mx9 "TESTкопия.au3.7z" "TESTкопия.au3" -mmt -ms=off

Открываю cmd, ctrl+v -> enter. Всё ок, работает...
читать дальше »
Код: Выделить весь код
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

d:\Program Files\AutoIt3\M\TMP>"C:\Program Files\7-Zip\7z.exe" a -mx9 "TESTкопия.au3.7z" "TESTкопия.au3" -mmt -ms=off

7-Zip [64] 9.22 beta  Copyright (c) 1999-2011 Igor Pavlov  2011-04-18
Scanning

Creating archive TESTкопия.au3.7z

Compressing  TESTкопия.au3

Everything is Ok

d:\Program Files\AutoIt3\M\TMP>


Прошу помощи...

UPD: Решение тут: http://forum.oszone.net/showthread.p...08#post2024040

-------
Jah LOVE, Jah LOVE, protect us


Отправлено: 13:58, 08-11-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$Archivate = """" & $ProgramFilesDir & $7z & """ a -mx9 """ & $ArchiveName & """ """ & $File & """ " & $ArchOptions

Отправлено: 16:51, 08-11-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для MONaH Rasta

Новый участник


Сообщения: 11
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
"TEST" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

D:\Program Files\AutoIt3\M\TMP>
И так столько раз, сколько файлов в папке. Скрипт в том числе самоуничтожается

список файлов в папке:
  • TEST.au3
  • TEST - копия.au3
  • TEST - копия (4).au3
  • TEST - копия (5).au3
  • TEST - копия (6).au3

-------
Jah LOVE, Jah LOVE, protect us


Отправлено: 17:25, 08-11-2012 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


"""" можно заменить на '"'
Я, обычно, так и делаю.

Отправлено: 17:27, 08-11-2012 | #4


Аватара для MONaH Rasta

Новый участник


Сообщения: 11
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


я только не понял чем мой метод не угодил...

-------
Jah LOVE, Jah LOVE, protect us


Отправлено: 17:34, 08-11-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата MONaH Rasta:
И так столько раз, сколько файлов в папке. »
Уберите вовсе «@ComSpec & ' /c ' & » из RunWait(). Удаляйте при помощи «FileDelete()».

Цитата MONaH Rasta:
Скрипт в том числе самоуничтожается »
А Вы что ожидали? Что каким-то чудом этого не произойдёт?

Отправлено: 23:02, 08-11-2012 | #6


Аватара для MONaH Rasta

Новый участник


Сообщения: 11
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Поправил 1 строку и всё заработало, как я хотел (подсказали на другом форуме).

Код: Выделить весь код
    RunWait(@ComSpec & ' /c ' & $K & $Archivate & $K, "")
Так же подправил код, чтобы сам себя скрипт не удалял. Выкладываю, может пригодится кому-нить...
Архивируем каждый файл в текущей папке (кроме самого себя) в отдельный архив и удаляем файл после архивации
Код: Выделить весь код
$K='"'
$DEL = "DEL /F /Q "
$7z = '7-Zip\7z.exe'
$ArchOptions = ' -mmt -ms=off'
$CurrentDir= @ScriptDir & '\'
$ProgramFilesDir = @ProgramFilesDir & '\'
$ArchiveName = '\/:*?"<>|'

$Search = FileFindFirstFile("*.*")

If $Search = -1 Then
	Exit
EndIf

While 1
	$File = FileFindNextFile($Search)

	If @error Or $File = "" Then
		ExitLoop
	ElseIf $File = @ScriptName Or $File = $ArchiveName Then
		$File = FileFindNextFile($Search)
		If @error Or $File = "" Then
			ExitLoop
		EndIf
	EndIf

	$ArchiveName = $File & '.7z'
	$Archivate = $K & $ProgramFilesDir & $7z & $K & ' a -mx9 ' & $K & $ArchiveName & $K & ' ' & $K & $File & $K & $ArchOptions

	Archivate($File)
WEnd

Func Archivate($File)
	RunWait(@ComSpec & ' /c ' & $K & $Archivate & $K, "", @SW_HIDE)
	RunWait(@ComSpec & ' /c ' & $DEL & $K & $CurrentDir & $File & $K, "", @SW_HIDE)
EndFunc

FileClose($Search)


Благодарю всех откликнувшихся!

-------
Jah LOVE, Jah LOVE, protect us


Последний раз редактировалось MONaH Rasta, 09-11-2012 в 13:36.


Отправлено: 13:15, 09-11-2012 | #7


Аватара для MONaH Rasta

Новый участник


Сообщения: 11
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


«Правильная версия»
Код: Выделить весь код
#include <File.au3>

$CurrentDir= @ScriptDir
$ArchOptions = ' -mmt -ms=off'
$7z = StringReplace(RegRead('HKLM\Software\7-Zip','Path')&'\','\\','\') & '7z.exe'
If $7z = "\7z.exe" Then $7z = StringReplace(RegRead('HKLM64\Software\7-Zip','Path')&'\','\\','\') & '7z.exe'

$ver = StringReplace(FileGetVersion($7z),'.','')
If $ver > 92500 Then $ArchOptions &= ' -sdel'

$arrayFile=_FileListToArray($CurrentDir,'*',1)
If @Error Then Exit

For $a=1 To $arrayFile[0]
    If $arrayFile[$a] <> @ScriptName AND _FileGetExt($arrayFile[$a]) <> ".7z" Then _Archivate($arrayFile[$a])
Next

Func _FileGetExt($sPath)
    Local $NULL, $sExt
    _PathSplit($sPath, $NULL, $NULL, $NULL, $sExt)
    Return $sExt
EndFunc

Func _Archivate($File)
    $err = RunWait('"' & $7z & '" a -mx9 "' & $File & '.7z" "' & $File & '"' & $ArchOptions)
    If $err = 0 AND $ver <= 92500 Then FileDelete($File)
EndFunc

-------
Jah LOVE, Jah LOVE, protect us


Отправлено: 13:36, 12-11-2012 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Архивация файлов с помощью 7zip, имена которых содержат пробел

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ярлыки на "Рабочий стол" и "Мой компьтер" с помощью GPO tangichhan Microsoft Windows NT/2000/2003 8 04-02-2014 10:25
CMD/BAT - [решено] Как экранировать символ "=" в имени файла chobov Скриптовые языки администрирования Windows 3 11-09-2010 01:28
VBS/WSH/JS - [решено] Как добавить "сложное" значение в "бинарный" параметр реестра с помощью WSH 13Demon Скриптовые языки администрирования Windows 1 10-02-2009 09:47
Вариант решения проблемы IIS FTP и символ "я" MikhailL Microsoft Windows NT/2000/2003 0 16-12-2008 13:45
Подскажите как удалить папку с именем "Пробел" в Win2000serv? не перегружая систему Sotapp Microsoft Windows NT/2000/2003 9 24-05-2006 09:32




 
Переход