|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения |
|
|
Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения
|
Старожил Сообщения: 235 |
Профиль | Отправить PM | Цитировать
Приветствую. как можно JS-скриптом или Batом открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения?
на скринах показаны шаги. архив открывается двумя шагами. сначала ПКМ -> 7-Zip -> Открыть архив. затем ПКМ -> Просмотр. нажав Просмотр, жду около минуты(это, наверное, надо учесть, поставив как то паузу) открытие файла. когда файл откроется, нажимаю Правка -> Найти.. ищу </xyzID> . все вместе <xyzID>3</xyzID> . только вместо тройки может быть любое число одно-трехзначное. и вот вместо 3(или другого числа) надо поставить 27. причем, когда набираю 27, то опять нужно около минуты ждать(опять надо учесть). потом закрываю файл с сохранением изменений и обновлением файла в архиве. возможно ли это все делать на автомате? адрес файла и имя файла, наверное, лучше в скрипте указать. сейчас так: C:\red\xyz.iwprj2 сейчас в файле текст укорочен. поэтому будет быстро сохраняться изменения. на самом деле надо около минуты-полторы. |
|
Отправлено: 19:08, 17-08-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать v79italya, пробуйте (на PowerShell):
Скрытый текст
$sArchiveFile = 'C:\Мои проекты\0272\project.iwprj2' $sSourceFileName = 'project' $sPath27Za = "$($env:ProgramFiles)\7-Zip\7za.exe" if([System.IO.File]::Exists($sArchiveFile)) { if([System.IO.File]::Exists($sPath27Za)) { $oProcess = New-Object -TypeName 'System.Diagnostics.Process' $oProcess.StartInfo.FileName = $sPath27Za $oProcess.StartInfo.Arguments = "e -y -sccWIN -o""$($env:TEMP)"" ""$sArchiveFile"" ""$sSourceFileName""" $oProcess.StartInfo.CreateNoWindow = $true $oProcess.StartInfo.UseShellExecute = $false $oProcess.StartInfo.RedirectStandardOutput = $true if($oProcess.Start()) { Write-Host "Trying extract source file [$sSourceFileName] from archive [$sArchiveFile] into temp folder [$($env:TEMP)]." -ForegroundColor Green $oProcess.WaitForExit() Write-Host $($oProcess.StandardOutput.ReadToEnd()) -ForegroundColor Cyan if($oProcess.ExitCode -eq 0) { $sTempFile = "$($env:TEMP)\$sSourceFileName" Write-Host "Trying find and replace value in extracted file [$sTempFile]." -ForegroundColor Green try { $oXmlDocument = [System.Xml.XmlDocument](Get-Content -Path $sTempFile) $oXmlDocument.StateOfInfoProject.CaptchaID = '27' $oXmlDocument.Save($sTempFile) } catch { Write-Host "Can't find and replace value in extracted file [$sTempFile]." -ForegroundColor Red } $oProcess.StartInfo.Arguments = "u -y -sccWIN ""$sArchiveFile"" ""$sTempFile""" if($oProcess.Start()) { Write-Host "Trying update source file [$sSourceFileName] in archive [$sArchiveFile] from previously extracted file [$sTempFile]." -ForegroundColor Green $oProcess.WaitForExit() Write-Host $($oProcess.StandardOutput.ReadToEnd()) -ForegroundColor Cyan if($oProcess.ExitCode -eq 0) { Write-Host "Delete temporary file [$sTempFile]." -ForegroundColor Green [System.IO.File]::Delete($sTempFile) } else { Write-Host "Can't update file [$sSourceFileName] in archive [$sArchiveFile] from file [$sTempFile] correctly. 7za.exe return non-zero exit code: $($oProcess.ExitCode)." -ForegroundColor Red } } else { Write-Host "Can't execute [$($oProcess.StartInfo.FileName)] with arguments [$($oProcess.StartInfo.Arguments)] normally." -ForegroundColor Red } } else { Write-Host "Can't extract source file [$sSourceFileName] from archive [$sArchiveFile] correctly. 7za.exe return non-zero exit code: $($oProcess.ExitCode)." -ForegroundColor Red } } else { Write-Host "Can't execute [$($oProcess.StartInfo.FileName)] with arguments [$($oProcess.StartInfo.Arguments)] normally." -ForegroundColor Red } } else { Write-Host "Can't find executable file [$sPath27Za]." -ForegroundColor Red } } else { Write-Host "Can't find archive file [$sArchiveFile]." -ForegroundColor Red } Цитата Busla:
Цитата Busla:
Цитата Busla:
Цитата greg zakharov:
Цитата Sham:
|
||||||
Отправлено: 17:41, 19-08-2019 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 235
|
Профиль | Отправить PM | Цитировать Iska, Ваш код работает! работает просто сказка! еще работает пол-секунды. и не поймешь - запустился или не запустился скрипт. проверяю файл - есть изменения. все супер. Спасибо Вам большое!
Sham, Ваш код не знаю как запустить. какой программой? я про Power Shell пол-часа гуглил перед запуском. так то, вопрос решен. |
Отправлено: 06:26, 20-08-2019 | #22 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
Скрытый текст
$sArchiveFile = 'C:\Мои проекты\0272\project.iwprj2' $sSourceFileName = 'project' $sPath27Za = "$($env:ProgramFiles)\7-Zip\7za.exe" if([System.IO.File]::Exists($sArchiveFile)) { if([System.IO.File]::Exists($sPath27Za)) { $oProcess = New-Object -TypeName 'System.Diagnostics.Process' $oProcess.StartInfo.FileName = $sPath27Za $oProcess.StartInfo.Arguments = "e -y -sccDOS -o""$($env:TEMP)"" ""$sArchiveFile"" ""$sSourceFileName""" $oProcess.StartInfo.CreateNoWindow = $true $oProcess.StartInfo.UseShellExecute = $false $oProcess.StartInfo.RedirectStandardOutput = $true if($oProcess.Start()) { Write-Host "Trying extract source file [$sSourceFileName] from archive [$sArchiveFile] into temp folder [$($env:TEMP)]." -ForegroundColor Green $oProcess.WaitForExit() Write-Host $($oProcess.StandardOutput.ReadToEnd()) -ForegroundColor Cyan if($oProcess.ExitCode -eq 0) { $sTempFile = "$($env:TEMP)\$sSourceFileName" Write-Host "Trying find and replace value in extracted file [$sTempFile]." -ForegroundColor Green try { $oXmlDocument = [System.Xml.XmlDocument](Get-Content -Path $sTempFile) $oXmlDocument.StateOfInfoProject.CaptchaID = '27' $oXmlDocument.Save($sTempFile) } catch { Write-Host "Can't find and replace value in extracted file [$sTempFile]." -ForegroundColor Red } $oProcess.StartInfo.Arguments = "u -y -sccDOS ""$sArchiveFile"" ""$sTempFile""" if($oProcess.Start()) { Write-Host "Trying update source file [$sSourceFileName] in archive [$sArchiveFile] from previously extracted file [$sTempFile]." -ForegroundColor Green $oProcess.WaitForExit() Write-Host $($oProcess.StandardOutput.ReadToEnd()) -ForegroundColor Cyan if($oProcess.ExitCode -eq 0) { Write-Host "Delete temporary file [$sTempFile]." -ForegroundColor Green [System.IO.File]::Delete($sTempFile) } else { Write-Host "Can't update file [$sSourceFileName] in archive [$sArchiveFile] from file [$sTempFile] correctly. 7za.exe return non-zero exit code: $($oProcess.ExitCode)." -ForegroundColor Red } } else { Write-Host "Can't execute [$($oProcess.StartInfo.FileName)] with arguments [$($oProcess.StartInfo.Arguments)] normally." -ForegroundColor Red } } else { Write-Host "Can't extract source file [$sSourceFileName] from archive [$sArchiveFile] correctly. 7za.exe return non-zero exit code: $($oProcess.ExitCode)." -ForegroundColor Red } } else { Write-Host "Can't execute [$($oProcess.StartInfo.FileName)] with arguments [$($oProcess.StartInfo.Arguments)] normally." -ForegroundColor Red } } else { Write-Host "Can't find executable file [$sPath27Za]." -ForegroundColor Red } } else { Write-Host "Can't find archive file [$sArchiveFile]." -ForegroundColor Red } Write-Host 'Press any key to continue...' [void][System.Console]::ReadKey($true) |
|
Отправлено: 09:52, 20-08-2019 | #23 |
Старожил Сообщения: 235
|
Профиль | Отправить PM | Цитировать Цитата Iska:
а потом я сохранил в файл.ps1 и все. запускаю ПКМ Выполнить с помощью PowerShell, появляется окно cmd и как закроется, значить, скрипт сработал. Iska, ничего менять не буду. все отлично. спасибо Вам |
|
Отправлено: 16:27, 20-08-2019 | #24 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:39, 20-08-2019 | #25 |
Старожил Сообщения: 235
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 19:20, 20-08-2019 | #26 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Выскакивает ошибка "Вы пытаетесь открыть файл имеющий тип системный файл (.dll)" | yuazakharov | Microsoft Windows 10 | 5 | 06-10-2018 12:06 | |
CMD/BAT - [решено] Упаковать файл в архив ARJ с таким же именем как и файл | Felix-rus53 | Скриптовые языки администрирования Windows | 1 | 13-02-2018 22:46 | |
Вопрос - PDF файл открывается как ZIP. | slonikdva | Защита компьютерных систем | 13 | 29-10-2017 22:15 | |
2013 - Как открыть файл *.mdb, не используя *.ldb? | IksSafonsky | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 15-02-2016 16:09 | |
CMD/BAT - Найти файл используя список с именами в txt файле | Spacejet | Скриптовые языки администрирования Windows | 0 | 29-07-2015 10:02 |
|