Як визначити назву файлу, витягнутого з архіву zip за допомогою пакетного сценарію


1

Фон

У мене є пакетний файл на Windows XP, який приймає один аргумент: ім'я zip-файлу, створене за допомогою 7-zip .

Цей файл містить один файл резервної копії MySQL зсередини: backup.sql.

Я хотів би відновити базу даних з цим файлом zip. Спочатку я витягую його до тимчасового каталогу, наприклад:

path_to_7zip\7z e "%~1" -otemp_dir

Я хотів би мати щось подібне (де extracted_file_name міг би бути backup.sql ):

path_to_mysql\mysql < extracted_file_name

Питання:

Як розробити назву витягнутого файлу (тобто. backup.sql )?

Що потрібно подавати як вхід, а не extracted_file_name якщо я не знаю назви файлу, що знаходиться у файлі zip?

Відповіді:


3

Можна створити пакетний файл, що містить кроки нижче.

cd\7ztemp
del \7zout\*.* /q
7z e *.7z -o\7zout
cd\7zout
for %%f in ( *.sql) do mysql ^< %%f

Припущення, які я зробив:

  • 7ztemp це каталог, до якого завантажується файл, і не містить інших файлів
  • 7zout - каталог, до якого витягується файл 7z. У мене видаляються існуючі файли 7zout перед вилученням архіву

Дякую ! Одне маленьке питання: що робить ^ означає в Росії ^< %%f ?
Misha Moroshko

@Misha the < є оператором перенаправлення, і його потрібно видалити, щоб він працював правильно. ^ є символом уникнення в командному рядку
Sathyajith Bhat

Крім того, як тільки ви будете щасливі, що сценарій працює відмінно, ви можете додати його @echo off як перший рядок для припинення показу команд
Sathyajith Bhat

Я бачив це багато разів < використовується без ^. Чи можете ви показати приклад, коли він не працюватиме належним чином ^ ? @echo off це гарна ідея! Дякую за ваш час !
Misha Moroshko

@Misha Ось скріншот того, що сталося під час тестування сценарію. Це може бути локалізовано для мене, але я не була впевнена i.imgur.com/TG3pe.png (ps: ви можете проігнорувати це повідомлення про те, що mysql не є дійсною командою, у мене її не встановлено)
Sathyajith Bhat

0

Якщо в папці є тільки один файл, можна скористатися DIR /B для перегляду вмісту.

Єдиним записом буде файл, який було розпаковано.


Як мені користуватися DIR /B ? path_to_mysql\mysql < DIR /B не працює...
Misha Moroshko

У Google досить багато хітів для пошуку "виведення команди в змінну dos", але всі приклади, які я пробував, не працюють для мене. Може, це буде для вас?
Richard

Міша, забудьте спробувати отримати все, що працює в одній команді.try dir / b c: windows Вона перераховує вміст каталогу, який просто показує імена файлів. Таким чином, ви можете перерахувати вміст каталогу з одним файлом, і він просто перераховує цей файл.
barlop

Вам навіть не потрібно виводити команду до змінної. Просто розпакуйте поштову папку до каталогу, потім копіюйте потрібний файл до потрібного каталогу. Якщо ви не знаєте ім'я файлу, це не має значення. Ви можете скопіювати весь вміст витягнутого zip. Або, * .sql, до каталогу. Не потрібно робити це в одній команді!
barlop
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.