Использование a.bat-файл для извлечения строки из текстового файла в zip-папке

так, пожалуйста, потерпите меня. Это только второй пакетный файл, который я когда-либо писал, и мой первый пост в StackExchange.

Я пишу пакетный файл, который говорит удаленному серверу запустить утилиту диагностики HP Array и вернуть отчет на мой компьютер. Я чрезвычайно взволнован, потому что он работает очень хорошо, по большей части. У меня есть одна небольшая проблема. Я пытаюсь вытащить серийный номер из текстового файла в папке zip, который приходит с удаленного сервера. Когда я извлекаю информацию из тестового текстового файла не в сжатой папке, эта часть кода работает. Однако он не работает, когда текстовый файл находится в папке zip. Есть ли способ заставить это работать?

вот часть рассматриваемого кода:

FOR /f "tokens=1-4 delims= " %%A IN ("%userprofile%Desktopreport.zipreport.txt") DO (
 IF %%A ==Chassis (
    SET "sn=%%D"
    ECHO %sn%
 )
)

спасибо.

13
задан duzzy
21.05.2023 20:22 Количество просмотров материала 2796
Распечатать страницу

1 ответ

решение

несмотря на то, Windows отобразит .zip архивы как сжатые папки, они не real папки на всех. Это означает, что вы не можете напрямую получить доступ к сжатому содержимому, пока не извлеките его где-нибудь.

Windows не предоставляет утилиту командной строки для извлечения (или создания, если на то пошло) сжатых архивов. С небольшим VBScript, вы можете, однако, обойти это ограничение:

REM^ &@echo off
REM^ &if not exist "%~f1" exit /b 2
REM^ &md "%temp%\%~nx1" 2>nul
REM^ &cscript /nologo /e:vbscript "%~f0" "%~f1" "%temp%\%~nx1"
REM^ &exit /b

Set sa = CreateObject("Shell.Application")
Set files = sa.NameSpace(WScript.Arguments(0)).Items
Set target = sa.NameSpace(WScript.Arguments(1))

For Each file In files
target.CopyHere file, 1556
Next

как это работает

приведенный выше скрипт является гибридным (спасибо dbenham и jeb за идею) и содержит как обычные команды batch, так и VBScript в одном файле.

скрипт принимает только один параметр-путь к архиву. Сначала скрипт проверяет, существует ли указанный файл на самом деле, а затем продолжает создавать подпапку с именем архива во встроенной временной папке.

затем выполняется код VBScript. Каждый файл в архиве копируется (извлекается) в целевую папку. Значение параметра 1556, что соответствует 4 + 16 + 512 + 1024 и необходимо, что делает всю деятельность бесхозный путем пропускать подсказки подтверждения (см. Соединение ниже для дополнительных деталей).

пример использования

@echo off
setlocal

set archive=report.zip
call UnzipHelper.cmd "%userprofile%\Desktop\%archive%" >nul
pushd "%temp%\%archive%"

REM your code here

popd
rd /s /q "%temp%\%archive%" 2>nul

pause
endlocal & exit /b

более дальнеишее чтение

0
отвечен and31415 2023-05-23 04:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

batch
batch-file
command-line
windows
zip
Вверх