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

时间:2019-01-16 11:46:47

标签: windows batch-file vbscript

我有一个批处理文件和一个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。*

1 个答案:

答案 0 :(得分:1)

如果我正确地回答了您的问题,我想您只是想拿字符串,将最后一个目录名分开,然后在设置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