Как переименовать или создать zip-файл с именем его содержимого с помощью командного файла - PullRequest
0 голосов
/ 16 января 2019

У меня есть пакет и 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 голосов
/ 16 января 2019

Если я правильно понял ваш вопрос, я думаю, вы хотите просто взять строку, отделить последнее имя каталога и затем использовать его в качестве переменной при настройке вашего 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...