#date #timestamp #powershell-ise
#Дата #временная метка #powershell-ise
Вопрос:
У меня есть этот фрагмент кода:
$sursa_folder="C:folderfolderfolderfolder"
$sursa_file="file"
$dest_folder="F: nameDump"
Copy-Item (Join-Path $sursa_folder $sursa_file) -Destination $dest_folder
try {Compress-Archive -Path (Join-Path $dest_folder $sursa_file) -CompressionLevel Optimal -DestinationPath ((Join-Path $dest_folder $sursa_file) (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") -ErrorAction SilentlyContinue
#Compress-Archive -Path (Join-Path $dest_folder $sursa_file) -CompressionLevel Optimal -DestinationPath ("X:" (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") -ErrorAction SilentlyContinue Remove-Item (Join-Path $dest_folder $sursa_file) -Force -ErrorAction Stop Write-Host "finalizat OK"
}
catch {
write-host "Eroare: $_"
}
finally {
}
И я хочу добавить больше файлов в тот же архив. Как мне это сделать?
Я думал о чем-то таком:
$sursa_folder="C:folderfolderfolderfolder"
$sursa_file="file1""file2""file3""file4""file5""file6""file7"
$dest_folder="F: nameDump"
Copy-Item (Join-Path $sursa_folder $sursa_file) -Destination $dest_folder
try {
Compress-Archive -Path (Join-Path $dest_folder $sursa_file) -CompressionLevel Optimal -DestinationPath ((Join-Path $dest_folder $sursa_file) (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") -ErrorAction SilentlyContinue
#Compress-Archive -Path (Join-Path $dest_folder $sursa_file) -CompressionLevel Optimal -DestinationPath ("X:" (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") -ErrorAction SilentlyContinue
Remove-Item (Join-Path $dest_folder $sursa_file) -Force -ErrorAction Stop
Write-Host "finalizat OK"
}
catch {
write-host "Eroare: $_"
}
finally {
}
Но безрезультатно…
Спасибо, читатель, за ваше время.
Л.Е.: Теперь конечный результат.
# this function will zip an entire folder (in your case the destination folder)
function ZipFiles( $zipfilename, $sourcedir )
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,$zipfilename, $compressionLevel, $false)
}
$sursa_folder="C:folderfolderfolderfolder"
$sursa_file=@("file1","file2","file3","file4","file5","file6","file7") # <= eaxample name files, rename as needed.
$dest_folder= "F: nameDump"
$folderName = "File_Folder" # <= rename as needed.
$destinationfolder = New-Item -Path (Join-Path $dest_folder $folderName) -ItemType Directory
foreach($file in $sursa_file)
{
Copy-Item (Join-Path $sursa_folder $file) -Destination (Join-Path $dest_folder $folderName) # this copies the item from source to destination >> destination is a folder within the destination
#Now you will have multiple files ("file1","file2","file3","file4","file5","file6","file7") that are copied from source to a destination folder
}
try {
ZipFiles -sourcedir (Join-Path $dest_folder $folderName) -zipfilename ((Join-Path $dest_folder $folderName) (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") # zip the destination folder and give it a new name
Remove-Item -Path (Join-Path $dest_folder $folderName) -Force -ErrorAction Stop -Recurse -Confirm:$false # this will delete the unzipped old folder
Write-Host "finalizat OK"
}
catch {
write-host "Eroare: $_"
}
finally {}
Большое вам спасибо, Клинт Оливейра, я бы не справился без вашей помощи. 🙂
Комментарии:
1. Это архив , а не «архив» …
2. что происходит при запуске вашего кода. Это не работает? у вас есть «-ErrorAction SilentlyContinue», попробуйте удалить это и дайте мне знать, если есть ошибка.
Ответ №1:
1 > Я хочу дать этой папке постоянное имя. Измените File_Folder
имя папки на желаемое.
- Заменить
$folderName = Read-Host "Please Enter the folder Name"
на$folderName = "File_Folder"
2> я не хочу, чтобы PowerShell запрашивал у меня подтверждение, если я хочу удалить дочерние элементы с помощью item со всеми.
- Измените
Remove-item
строку на:
Remove-Item -Path (Join-Path $dest_folder $folderName) -Force -ErrorAction Stop -Recurse -Confirm:$false
3> где я могу найти эту документацию для PS? Я имею в виду, я пытался найти в Google $folderName = и почти ничего не нашел. Только другие люди задают другие вопросы. Я знаю, что в cmd (я думаю… если я не ошибаюсь) вы можете использовать? или клавиша tab (я думаю), и вы можете получить список возможных команд. Как мне проверить это с помощью PS?
- Документация PowerShell: https://docs.microsoft.com/en-us/powershell /
- список возможных команд> используйте «Клавишу табуляции«, однако вам нужно ввести глагол, например.
get-
илиset-
etc этот фрагмент взят из PowerShell ISE
Комментарии:
1. Remove-Item -Path (Join-Path $dest_folder $ folderName) -Force -ErrorAction Stop -Recurse -Confirm:$false # Пожалуйста, удалите путь в своем комментарии .. его локальный путь не должен быть в Интернете. Очень признателен
2. Работает нормально, но я получаю это на этапе удаления: не удается найти путь ‘C:folderfolder_Syncfolder — потому что его не существует. Что это такое C:folderfolder_Syncfolder или трикс, если уж на то пошло? Попробовал поискать его в Google …
3. Команда удаления пытается удалить папку, которая была преобразована в zip-файл в месте назначения.
4. он пытается найти папку «(Join-Path $ dest_folder $ folderName)», чтобы он мог ее удалить. Remove-Item -Path (Join-Path $dest_folder $folderName) -Принудительная остановка ErrorAction -Рекурсия -Подтверждение:$false
Ответ №2:
Рассмотрите возможность преобразования вашей $sursa_file
переменной в массив, а затем выполните следующие действия foreach ($file in $sursa_file)
:
$sursa_file=@("file1","file2","file3","file4","file5","file6","file7")
Вы получаете сообщение об ошибке, поскольку Join-Path $sursa_folder $sursa_file
пытается выполнить запрос
Если вы преобразуете $sursa_file
в массив и выполняете a foreach-object
, то он будет искать правильный путь к файлу каждый раз в циклах, хотя ваша переменная so Join-Path $sursa_folder $sursa_file
становится
Вот моя попытка: вы можете заполнить действия catch / finally самостоятельно.
# this function will zip an entire folder (in your case the destination folder)
function ZipFiles( $zipfilename, $sourcedir )
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,$zipfilename, $compressionLevel, $false)
}
$sursa_folder="C:folderfolderfolderfolder"
$sursa_file=@("file1","file2","file3","file4","file5","file6","file7")
$dest_folder= "F: nameDump"
$folderName = Read-Host "Please Enter the folder Name"
$destinationfolder = New-Item -Path (Join-Path $dest_folder $folderName) -ItemType Directory
foreach($file in $sursa_file)
{
Copy-Item (Join-Path $sursa_folder $file) -Destination (Join-Path $dest_folder $folderName) # this copies the item from source to destination >> destination is a folder within the destination
#Now you will have multiple files ("file1","file2","file3","file4","file5","file6","file7") that are copied from source to a destination folder
}
try {
ZipFiles -sourcedir (Join-Path $dest_folder $folderName) -zipfilename ((Join-Path $dest_folder $folderName) (Get-Date).ToString('ddMMyyyy-hh.mm.ss') ".zip") # zip the destination folder and give it a new name
Remove-Item (Join-Path $dest_folder $folderName) -Force -ErrorAction Stop # this will delete the unzipped old folder
Write-Host "finalizat OK"
}
catch {
write-host "Eroare: $_"
}
finally {}
Комментарии:
1. Хорошо, это работает … вроде того… Но как мне поместить все файлы в один zip-файл? Я имею в виду, что я хочу взять @(«file1», «file2», «file3», «file4», «file5», «file6», «file7») и поместить их в один и тот же zip-файл с одним zip-файлом для каждого файла, я не хочу иметь отдельные ZIP-файлы… Имеет ли это какой-либо смысл для вас? Большое спасибо за понимание PwerShell.
2. переместите свои try, catch, наконец, из цикла for-each и сожмите местоположение назначения. >> Я отредактировал сценарий.. проверьте, работает ли это
3. Я думаю, нам нужно каким-то образом назвать этот файл в> Compress-Archive -Path $dest_folder < . Я полагаю, что это делало это: Compress-Archive -Path (Join-Path $ dest_folder $file), брал имя из файла, который хотел его заархивировать, и создавал zip из этого имени. И я не знаю почему, но последний файл не копирует его, хотя он отображается в тестовом запуске «результат».
4. @BogdanNicolescu Я отредактировал сценарий в соответствии с вашими требованиями. Я добавил к нему комментарии, чтобы помочь вам. Надеюсь, это ответит на ваши вопросы и удовлетворит ваши требования. Какое имя вы хотите присвоить zip-файлу?
5. Текущий сценарий будет использовать имя папки назначения с помощью > $dest_folder . Разделить («»)[-1]