Чи можливо створити .zip-файл із папки в командному рядку, я не хочу використовувати будь-який виконуваний сторонній файл.
Я думав про щось на кшталт "надіслати в стиснуту папку", але не знаю, як це зробити ...
Чи можливо створити .zip-файл із папки в командному рядку, я не хочу використовувати будь-який виконуваний сторонній файл.
Я думав про щось на кшталт "надіслати в стиснуту папку", але не знаю, як це зробити ...
Відповіді:
Починаючи з PowerShell 5 (лютий 2016 р.), Ви можете використовувати "Compress-Archive":
Compress-Archive -Path input.txt -DestinationPath output.zip
Або:
Compress-Archive input.txt output.zip
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
Я поєднав цей сценарій з кількох різних джерел, щоб краще відповідати моїм потребам. Скопіюйте та вставте скрипт у файл із розширенням ".vbs". Сценарій спочатку був створений для Windows XP, але він також працює в Windows 7 x64 Ultimate - жодних гарантій, якщо Windows буде тримати навколо різних об'єктів Shell, якими він користується.
Використання: у полі запуску чи командному рядку put-
"C:\zipper.vbs" "C:\folderToZip\" "C:\mynewzip.zip"
Шлях до сценарію, вихідної папки, створення zip-файлу (включити .zip в кінці).
Він не копіює порожні папки, тому будьте обережні.
Ось код vbs ---
Set Args = Wscript.Arguments
source = Args(0)
target = Args(1)
' make sure source folder has \ at end
If Right(source, 1) <> "\" Then
source = source & "\"
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
' this is the header to designate a file as a zip
zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
zip.Close
Set zip = nothing
wscript.sleep 500
Set objApp = CreateObject( "Shell.Application" )
intSkipped = 0
' Loop over items within folder and use CopyHere to put them into the zip folder
For Each objItem in objApp.NameSpace( source ).Items
If objItem.IsFolder Then
Set objFolder = objFSO.GetFolder( objItem.Path )
' if this folder is empty, then skip it as it can't compress empty folders
If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
intSkipped = intSkipped + 1
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Next
intSrcItems = objApp.NameSpace( source ).Items.Count
wscript.sleep 250
' delay until at least items at the top level are available
Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
wscript.sleep 200
Loop
'cleanup
Set objItem = nothing
Set objFolder = nothing
Set objApp = nothing
Set objFSO = nothing
Можна запустити скрипт PowerShell від BAT. Файл Bat отримує шлях до dir, який потрібно блискавити, та ім'я файлу zip як параметри.
@echo off
setlocal
rem First parameter - path to dir to be zipped
rem Second parameter- zip file name
set sourceDir=%1
set zipFile=%2
rem Create PowerShell script
echo Write-Output 'Custom PowerShell profile in effect!' > %~dp0TempZipScript.ps1
echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1
echo [IO.Compression.ZipFile]::CreateFromDirectory('%sourceDir%','%~dp0%zipFile%') >> %~dp0TempZipScript.ps1
rem Execute script with flag "-ExecutionPolicy Bypass" to get around ExecutionPolicy
PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dp0TempZipScript.ps1'"
del %~dp0TempZipScript.ps1
endlocal
Ось чудове посилання, яке показує, як зафіксувати файл за допомогою власних команд Windows.
Я перевірив його в каталозі, що містить кілька вкладених файлів і папок, і він працював чудово. Просто дотримуйтесь формат командного рядка.
Існує також спосіб розпакувати файли за допомогою командного рядка, який я також знайшов. Один із способів - просто відкрити вікно провідника, яке показує вміст заархівованого файлу. Деякі з них також використовують Java, яка не обов'язково є рідною для Windows, але настільки поширена, що майже здається так.
Чи має Windows 7 розпакування в командному рядку, встановленому за замовчуванням?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
Це давнє питання, але актуальність досі залишається актуальною.
Звичайно, у Windows є власний алгоритм стиснення, вбудований для використання zip-файлів, але він справді погано працює порівняно з 7zip продуктом з відкритим кодом, який можна знайти тут http://www.7-zip.org/
Інші вже обговорювали різні методи використання вбудованих функцій Windows, моє рішення вимагає встановлення додаткового програмного забезпечення.
7Zip підтримує широкий спектр файлів, включаючи ZIP, RAR, CAB та ISO, а також власний 7z формат.
Ви можете переглянути довідку командного рядка: "C: \ Program Files \ 7-Zip \ 7z.exe" --help
виконати просте додавання до zip-архіву:
"C: \ Program Files \ 7-Zip \ 7z.exe" ім'я файлу.zip c: \ path
Ось ще одна ідея з 4 різних джерел; не мої ідеї, але я склав їх, щоб змусити мене працювати
<!-- : Begin batch script
@each off
set sourceFolder="c:\test"
set destZip="%userprofile%\desktop\example.zip"
cscript //nologo "%~f0?.wsf" //job:exewsh %sourceFolder% %destZip%
exit /b
GOTO:EOF
----- Begin wsf script --->
<package><job id="exewsh"><script language="VBScript">
'Get command-line arguments.
Set objArgs = WScript.Arguments
InputFolder = objArgs(0)
ZipFile = objArgs(1)
'Create empty ZIP file.
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items
objShell.NameSpace(ZipFile).CopyHere(source)
'Required!
wScript.Sleep 2000
</script></job>
</package>
Уявіть, що ви хочете стиснути ту саму папку, яку ви знаходитесь у командному рядку БЕЗ відкриття вікна Powerhell:
powershell Compress-Archive . publish.zip
Я опублікую щось, що стосується відповіді WSkids, на жаль, я не можу використовувати функцію коментування.
Використання методу CopyHere () в VBS вводить кілька питань. Одне з цих питань полягає в тому, що метод негайно повертається, коли процес копіювання починається у фоновому режимі, тоді як декілька викликів CopyHere () будуть заважати один одному, а ZIP не буде створений правильно. Тут потрібна петля очікування, щоб виправити це. Мій цикл очікування заснований на відповіді на аналогічне питання, розміщеному тут .
Ось оновлена версія, яка виправляє помилку "Об'єкт необхідний", яку повідомляє pihentagy . Це проблема з тимчасовим часом, оскільки новостворений ZIP-файл входить у колекцію «Елементи», коли сценарій виконується на швидких машинах.
set Args = WScript.Arguments
source = Args(0)
' remove trailing slashes as we add slashes when needed later
while Right(source, 1) = "\"
source = Mid(source, 1, Len(source) - 1)
wend
target = Args(1)
' create empty ZIP file
set fso = CreateObject("Scripting.FileSystemObject")
set zip = fso.OpenTextFile(target, 2, vbtrue)
' write ZIP header, this ensures that Windows recognizes the file as "ZIP Folder"
zip.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
zip.Close
set zip = nothing
set fso = nothing
' copy files to ZIP file
set app = CreateObject("Shell.Application")
set sourceFolderObj = app.NameSpace(source)
set targetFolderObj = app.NameSpace(target)
for each item in sourceFolderObj.Items
itemPath = source & "\" & item.Name
copyItem = false
' ZIP file is included in Items collection and is recognized as folder, thus skip it to avoid script errors
if itemPath <> target then
if item.IsFolder then
if item.GetFolder.Items().Count = 0 then
' folder is empty, skip it as empty folders can't be compressed
else
copyItem = true
end if
else
copyItem = true
end if
end if
if copyItem then
targetFolderObj.CopyHere item
' wait until the file appears in the ZIP file,
' this is needed because CopyHere() returns immediately after starting an asynchronous copy process
' (starting multiple asynchronous copy will not work as it causes error messages, an invalid ZIP file, ...)
while (targetFolderObj.ParseName(item.Name) is nothing)
WScript.Sleep 1
wend
end If
next
set targetFolderObj = nothing
set sourceFolderObj = nothing
set app = nothing
Ось моя спроба узагальнити вбудовані вікна можливостей для стиснення та стискання - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and-folders -із-партія-ф
з кількома заданими рішеннями, які повинні працювати майже на кожній машині Windows.
compress.exe
.