Я пытаюсь автоматизировать повторяющийся сценарий с помощью сценария Powershell:
У меня есть сжатый (.zip) папка с несколькими файлами (.XML).
Мой сценарий:
C:\Users\*\Downloads
AppName.Version.zip
), которая будет находиться по тому же пути: C:\Users\*\Downloads
.Вопросы:
Как мне снова сжать папку, чтобы, нажав на сжатую папку, я сразу увидел файлы (сжатая папка> файлы), а не папку, а затем файлы (сжатая папка> файлы)
Команды Compress и Expand кричат о формате имени папки, и поэтому эти команды не справляются со своей задачей. Как мне преодолеть это?
$languageString = Read-Host ...
$replaceString = '<value>' + $languageString
$file = Get-Childitem "c:\users\*\Downloads\app.version.zip" -Recurse
$originalFileName = $file.Name
$absoluteFilePath = $file.FullName
$rename-item -path $absoluteFilePath -newname translate.zip
$file = Get-Childitem "c:\users\*\Downloads\translate.zip" -Recurse
$absoluteFilePath = $file.FullName
$unzipFilePath = $absoluteFilePath.Substring(0, $absoluteFilePath.LastIndexOf('.'))
expand-archive -path $absoluteFilePath -destinationpath $unzipFilePath
$files = @(Get-Childitem "c:\users\*\Downloads\*.xml)
foreach ($file in $files)
{
(Get-Content -path $file.FullName -Raw) -replace '<value>' , $replaceString | Set-Content -Path $file.FullName
#this line makes problems...
Compress-Archive -path $unzipFilePath -Destinationpath $unzipFilePath -Force
* char предназначен для запуска скрипта на разных машинах/пользователях.
Похоже, что команда {
после Foreach
не имеет подходящего }
. Можете ли вы добавить сообщение об ошибке, которое вы видите, для подтверждения?
Я вижу это в трех шагах: 1. распаковать во временное чистое место. 2. изменить ваши файлы там 3. заархивируйте это место обратно.
код будет иметь функции:
function Unzip_archive ($ArchiveFullPath, $Temp_Work_Fld) {
try {
#unzip
Add-Type -assembly 'system.io.compression.filesystem'
[io.compression.zipfile]::ExtractToDirectory($ArchiveFullPath, $Temp_Work_Fld)
}
catch {
throw "Failed to unzip the artifact"
}
Remove-Item $ArchiveFullPath -Force #only if you want to delete the archive
}
function CreateZipArchive($FolderToArchive, $ZipArchiveFullName){
$source = Get-ChildItem * -Directory | Where-Object {$_.FullName -match "$FolderToArchive"}
write-host "`nArchiving: $source ........."
Add-Type -Assembly system.IO.compression.filesystem
$compressionlevel = [System.IO.Compression.CompressionLevel]::Optimal
[io.compression.zipfile]::CreateFromDirectory($source, $ZipArchiveFullName, $compressionlevel, $true)
write-host "nDone !"
}
затем просто вызовите функции до и после внесения изменений во временную папку
Пожалуйста, предоставьте нам код, который вы используете для сжатия файлов и их распаковки. И, пожалуйста, используйте поддельные имена вместо специальных символов, таких как
*
, если вы беспокоитесь об утечке личной информации.