Có thể tạo tệp .zip từ một thư mục trong dòng lệnh, tôi không muốn sử dụng bất kỳ thực thi của bên thứ ba nào.
Tôi đã suy nghĩ điều gì đó như 'gửi đến thư mục nén' nhưng tôi không biết làm thế nào ...
Có thể tạo tệp .zip từ một thư mục trong dòng lệnh, tôi không muốn sử dụng bất kỳ thực thi của bên thứ ba nào.
Tôi đã suy nghĩ điều gì đó như 'gửi đến thư mục nén' nhưng tôi không biết làm thế nào ...
Câu trả lời:
Bắt đầu với PowerShell 5 (tháng 2 năm 2016), bạn có thể sử dụng "Nén-Lưu trữ":
Compress-Archive -Path input.txt -DestinationPath output.zip
Hoặc là:
Compress-Archive input.txt output.zip
http://msdn.microsoft.com/powershell/reference/5.0/microsoft.powershell.archive/compress-archive
Tôi đã kết hợp kịch bản này từ nhiều nguồn khác nhau để phù hợp hơn với nhu cầu của mình. Sao chép và dán tập lệnh vào một tệp có phần mở rộng ".vbs". Kịch bản ban đầu được tạo cho Windows XP, nhưng nó cũng hoạt động trong Windows 7 x64 Ultimate - không đảm bảo nếu Windows sẽ giữ xung quanh các đối tượng Shell khác nhau mà ứng dụng này sử dụng.
Cách sử dụng: trong hộp chạy hoặc dòng lệnh put-
"C:\zipper.vbs" "C:\folderToZip\" "C:\mynewzip.zip"
Đường dẫn đến tập lệnh, thư mục nguồn, tệp zip để tạo (bao gồm .zip ở cuối).
Nó sẽ không sao chép các thư mục trống vì vậy hãy cẩn thận.
Đây là mã 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
Có thể chạy tập lệnh PowerShell từ BAT. Bat file nhận đường dẫn đến dir để được nén và tên tệp zip làm tham số.
@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
Đây là một liên kết tuyệt vời cho thấy cách nén tệp bằng các lệnh gốc của windows.
Tôi đã thử nghiệm nó với một thư mục chứa nhiều tệp và thư mục lồng nhau và nó hoạt động hoàn hảo. Chỉ cần làm theo định dạng của dòng lệnh.
Ngoài ra còn có một cách để giải nén các tập tin thông qua dòng lệnh mà tôi tìm thấy. Một cách, chỉ cần mở một cửa sổ thám hiểm cho biết nội dung của tệp nén là gì. Một số trong số này cũng sử dụng Java không nhất thiết phải có nguồn gốc từ windows nhưng phổ biến đến mức nó gần như là như vậy.
Windows 7 có giải nén tại dòng lệnh được cài đặt theo mặc định không?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-USE-the-command-line
Đây là một câu hỏi cũ, nhưng sự liên quan của nó vẫn còn hiện tại.
Windows tất nhiên có thuật toán nén riêng được tích hợp để sử dụng các tệp zip, nhưng, nó thực sự hoạt động kém khi so sánh với sản phẩm nguồn mở 7zip được tìm thấy ở đây http://www.7-zip.org/
Những người khác đã thảo luận về các phương pháp khác nhau để sử dụng các chức năng tích hợp trong windows, giải pháp của tôi yêu cầu cài đặt phần mềm bổ sung.
7Zip hỗ trợ nhiều loại tệp, bao gồm ZIP, RAR, CAB và ISO và nó có định dạng 7z.
Bạn có thể xem trợ giúp dòng lệnh: "C: \ Chương trình tập tin \ 7-Zip \ 7z.exe" - trợ giúp
để thực hiện thêm một kho lưu trữ zip đơn giản:
"C: \ Tệp chương trình \ 7-Zip \ 7z.exe" tên tệp.zip c: \ path
Đây là một ý tưởng khác, từ 4 nguồn khác nhau; không phải ý tưởng của tôi, nhưng tôi đã biên soạn chúng để làm cho nó hoạt động
<!-- : 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>
Hãy tưởng tượng rằng bạn muốn nén cùng một thư mục mà bạn đang sử dụng Command Prompt mà KHÔNG mở cửa sổ powershell:
powershell Compress-Archive . publish.zip
Tôi sẽ đăng một cái gì đó liên quan đến câu trả lời của WSkids vì thật đáng buồn là tôi không thể sử dụng chức năng bình luận.
Sử dụng phương thức CopyHere () trong VBS giới thiệu một số vấn đề. Một trong những vấn đề này là phương thức trả về ngay lập tức trong khi quá trình sao chép bắt đầu ở chế độ nền trong khi nhiều lệnh gọi CopyHere () sẽ can thiệp lẫn nhau và ZIP sẽ không được tạo chính xác. Một vòng lặp chờ đợi là cần thiết ở đây để khắc phục điều đó. Vòng lặp chờ của tôi dựa trên một câu trả lời cho một vấn đề tương tự được đăng ở đây .
Đây là một phiên bản cập nhật giúp sửa lỗi "Yêu cầu đối tượng" được báo cáo bởi pieaveragy . Đây là một vấn đề thời gian vì tệp ZIP mới được tạo được bao gồm trong bộ sưu tập Mục khi tập lệnh được thực thi trên các máy nhanh.
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
Đây là nỗ lực của tôi để tóm tắt các cửa sổ khả năng tích hợp để nén và giải nén - https://stackoverflow.com/questions/28043589/how-can-i-compres-zip-and-uncopress-unzip-files-and- Folders -với lô-f
với một vài giải pháp nhất định sẽ hoạt động trên hầu hết mọi máy tính windows.
compress.exe
.