Несколько папок в zip с PowerShell - PullRequest
0 голосов
/ 30 января 2020

У меня есть несколько папок dir_01, dir_02, dir_03, которые я хочу сохранить в zip-файле, скажем, backup.zip. Это должно быть сохранено в папке с сегодняшней датой. Мне нужно получить файл .bat, чтобы сделать работу; дополнительные сторонние исполняемые файлы запрещены.

Здесь Я нашел, как создать папку с сегодняшней датой, но у меня проблемы с передачей $destination в -DestinationPath. Я создал .bat, который вызывает PowerShell. Код, вызывающий у меня проблемы:

powershell.exe $destination = New-Item -Path 'C:\path\to\destionation' -ItemType Directory -Name ("$(Get-Date -f yyyy-MM-dd)")

powershell.exe -nologo -noprofile -command Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath $destination\backup.zip -Force

Сообщение об ошибке выглядит следующим образом:

New-Object : Exception calling ".ctor" with "2" argument(s): "Access to the path 'C:\backup.zip' is denied."
At
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:729
char:30
+ ... ileStream = New-Object -TypeName System.IO.FileStream -ArgumentList $ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

Однако код работает, если я жестко запрограммировал путь к месту назначения, например:

powershell.exe -nologo -noprofile -command Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath 'C:\whole\path\backup.zip' -Force

Но при этом я не могу сохранить backup.zip в сегодняшней папке.

Вопрос: Как сохранить backup.zip в папке, которую я создал с сегодняшней датой?

1 Ответ

0 голосов
/ 30 января 2020

Вы можете выполнять обе команды в одном и том же сеансе PowerShell, разделяя их точкой с запятой.

powershell.exe $destination = New-Item -Path 'C:\path\to\destionation' -ItemType Directory -Name ("$(Get-Date -f yyyy-MM-dd)"); Compress-Archive -Path 'C:\path\dir_01', 'C:\path\dir_02', 'C:\path\dir_03' -DestinationPath $destination\backup.zip -Force

Это запустит PowerShell и создаст папку, а затем заархивирует ее в один сеанс, вместо того, чтобы создавать сеанс, в этом сеансе создайте папку, закройте сеанс, запустите новый сеанс PowerShell, заархивируйте, закройте второй сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...