Використання файлу .bat для витягування рядка з текстового файлу в папці zip


0

Тож будь ласка, нехай зі мною. Це лише другий пакетний файл, який я коли-небудь писав, і моє перше повідомлення будь-де в StackExchange.

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

Ось частина розглянутого коду:

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

Дякую.


Декомпресуйте zip-файл у папку temp, прочитайте файл, видаліть папку temp. Довідку щодо цього див. Чи має Windows 7 розпакування в командному рядку, встановленому за замовчуванням?
Ƭᴇcʜιᴇ007

Відповіді:


0

Рішення

Незважаючи на те, що Windows відображає .zipархіви як стислі папки, вони зовсім не справжні папки. Це означає, що ви не можете отримати прямий доступ до стисненого вмісту, поки не дістанете його десь.

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 за ідею) і містить як звичайні пакетні команди, так і 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

Подальше читання


Я ніколи раніше не робив VBScript. Дякую за інформацію та ресурси. Щось нове, з чим грати.
запаморочливий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.