如何使用批处理文件重命名或创建包含其内容名称的 zip 文件

How to rename or create a zip file with the name of its content using a batch file

我有一个批处理和一个 vbs 文件来压缩具有特定目录名称的文件夹并将其复制到另一个文件夹。

有没有人知道如何使用其内容名称(文件名)扩展我拥有的现有脚本来压缩文件夹?

使用以下两个脚本,我可以将目录压缩并复制到另一个文件夹。

蝙蝠:

CScript zip.vbs C:\TEMP\zip\source\JEAR_20190115 C:\TEMP\zip\target\JEAR.zip

vbs:

'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

运行调用vbs的批处理文件文件夹的内容(3个文件)被压缩并复制到bat文件(C:\TEMP\zip\target\JEAR.zip)中描述的目标目录。

输出文件名在 bat 文件中指定,但目标是获得压缩文件夹内容的文件名(文件名)。即 JEAR_20180116.*

如果我答对了你的问题,我想你只想获取字符串,拆分最后一个目录名称,然后将其用作设置 zip 文件的变量:

@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"
for %%i in (%mypath%) do set "last=%%~nxi"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip

请注意,如果您将路径更改为在路径中添加尾部反斜杠,即:

C:\TEMP\zip\source\JEAR_20190115\

你可能想先去掉它,但我们可以简单地用以下方法测试它:

if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"

那么完整的脚本将是:

@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"
for %%i in (%mypath%) do set "last=%%~nxi"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip

但是如果你想将它命名为目录中的文件,你需要确保文件夹中的文件名都相同,因为我们只能使用一个名称来设置它,这将是列表中的最后一个文件,我们可以检查每个名称,但我假设您拥有相同名称但扩展名不同的文件:

@echo off
set "mypath=C:\TEMP\zip\source\JEAR_20190115"
for /f %%i in ('dir /b /a-d "%mypath%"') do set "last=%%~ni"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip