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