如何使用批处理文件重命名或创建包含其内容名称的 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
我有一个批处理和一个 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