我想要一个 Windows(7 及以上版本)命令行压缩和归档命令/脚本,它不需要任何外部工具或实用程序,包括 PowerShell,因为我不太擅长 Windows 脚本编写。它应该完全独立,就像 Unix/Linux zip/tar 命令一样。
我搜索了很多此类命令或脚本,但还没有找到。有人找到过类似的东西吗?
答案1
你不需要成为一名专业的剧本作家就可以利用电源外壳你不需要使用明确的电源外壳要使用的脚本(或其 IDE 界面)电源外壳命令——你可以利用电源外壳命令并使其成为批处理脚本逻辑的一部分来执行和使用。
我认为你正在寻找视窗本地方式来完成任务,你只是想确保它确实是本地的视窗并将致力于Windows 7的及以上(较新)。
压缩和归档
我创建了一个批处理脚本,它可以从Windows 10和Windows 7的并使用适用于旧版本的逻辑电源外壳以及更新的版本,以防我使用较旧的逻辑。
拖放
只需将要压缩的文件夹拖到批处理脚本中,它将被存档为 zip 文件,并且它将在同一位置创建新的 zip 文件,但带有
<foldername you archive>.zip
所以如果你拖C:\User\User\Desktop\New Folder
进入脚本后,它将创建C:\User\User\Desktop\New Folder.zip
将文件夹拖到脚本
之后创建
剧本
笔记:我在脚本中留下了两个注释掉的变量,以便您可以使用它们并明确设置源文件夹和目标文件名(如果您愿意),而不是使用拖放方法。
@ECHO ON
::SET src_folder=C:\Users\User\Desktop\Test
::SET destfile=C:\Users\User\Desktop\Test.zip
SET src_folder=%~1
SET destfile=%~FN1.zip
:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")>>"%PSScript%"
ECHO $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal >>"%PSScript%"
ECHO $includebasedir = $true >>"%PSScript%"
ECHO [System.IO.Compression.ZipFile]::CreateFromDirectory("%src_folder%", "%destfile%", $compressionLevel, $includebasedir)>>"%PSScript%"
:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT
解压缩和提取
我还创建了一个批处理脚本,它可以从Windows 10和Windows 7的并使用适用于旧版本 PowerShell 和新版本的逻辑,以防我使用旧逻辑。
拖放
只需将要解压的 zip 文件拖到脚本中,它就会将文件的内容提取到与你拖入脚本的 zip 文件所在的同一文件夹中。因此,如果你有
C:\User\User\Desktop\ZipMe.zip
它包含一个名为的文件夹ZipMe
,一旦将其拖放到脚本中,它就会提取文件夹ZipMe
到C:\User\User\Desktop
。将 zip 文件拖拽到脚本中
之后提取
剧本
重要的:中的变量压缩和归档脚本以上(顶部第一个脚本)显示为$includebasedir = $true
指示它压缩实际文件夹及其内容。如果将此值设置为,$false
或者从不包含文件夹的 zip 中提取,则以下脚本会将所有文件和其他内容提取到 zip 文件所在的同一文件夹中 — 因此,如果 zip 文件包含这些文件和文件夹,并且文件中没有包含父文件夹,则将提取 100 个文件和文件夹。
笔记:我在脚本中留下了两个注释掉的变量,以便您可以使用它们并明确设置目标文件夹和 zip 文件名(如果您愿意的话),而不是使用拖放方法。
@ECHO ON
::SET dest_folder=C:\Users\User\Desktop\New folder
::SET zip_file=C:\Users\User\Desktop\Test\test.zip
SET dest_folder=%~DP1
SET zip_file=%~1
:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.Filesystem")>>"%PSScript%"
ECHO [io.compression.zipfile]::ExtractToDirectory("%zip_file%", "%dest_folder%") >>"%PSScript%"
:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
GOTO :EOF
更多资源
答案2
至少 Windows 7(和 XP...我还不太确定 Windows 10 的状态)没有命令行界面来与“Microsoft 压缩文件夹”支持提供的 ZIP 压缩支持一起使用(就像 Explorer 可以使用的一样)。
但是,您可以通过简单地创建一个脚本文件,然后使用内置于 Windows XP 及更高版本的 Windows Script Host(就像“Microsoft 压缩文件夹”支持一样)来实现此目的。
例如,Peter Mortensen 的回答显示可以生成的批处理文件的内容,该文件写出 8 行 VBScript,然后利用“Microsoft 压缩文件夹”支持。
请注意,最后的“sleep 2000”只是暂停2秒,并不像George Yockey 的方法(检查主动压缩)或检查 .Count (类似kayleeFrye_onDeck 的提交)。
我不确定基于 WSH 的答案是否违反了您在说不想要 PowerShell 时想要实现的目标,但实际上它根本不使用 PowerShell。